实验模组名称.docx

上传人:b****1 文档编号:2436962 上传时间:2023-05-03 格式:DOCX 页数:13 大小:116.48KB
下载 相关 举报
实验模组名称.docx_第1页
第1页 / 共13页
实验模组名称.docx_第2页
第2页 / 共13页
实验模组名称.docx_第3页
第3页 / 共13页
实验模组名称.docx_第4页
第4页 / 共13页
实验模组名称.docx_第5页
第5页 / 共13页
实验模组名称.docx_第6页
第6页 / 共13页
实验模组名称.docx_第7页
第7页 / 共13页
实验模组名称.docx_第8页
第8页 / 共13页
实验模组名称.docx_第9页
第9页 / 共13页
实验模组名称.docx_第10页
第10页 / 共13页
实验模组名称.docx_第11页
第11页 / 共13页
实验模组名称.docx_第12页
第12页 / 共13页
实验模组名称.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验模组名称.docx

《实验模组名称.docx》由会员分享,可在线阅读,更多相关《实验模组名称.docx(13页珍藏版)》请在冰点文库上搜索。

实验模组名称.docx

实验模组名称

實驗模組名稱

建構crosscompiler,assembler&linker

實驗目的(150字以內)

●充分瞭解在嵌入式系統的開發過程中,為什麼需要使用crosscompiler、assembler與linker、Cstandardlibrary

●如何建構crosscompiler、assembler與linker

●如何建構支援crosscompiler之Cstandardlibrary

 

實驗器材

●PCx1

⏹Requirement:

LinuxOSinstalled、nativegcccompilerinstalled、Internetaccess

 

實驗所需軟體

●GNUbinutilssourcecode(binutils-2.14.tar.bz2),sourcecodecangetfrom

⏹ftp:

//ftp.gnu.org/gnu/binutils/binutils-2.14.tar.bz2

●GNUC/C++compiler(gcc-3.2.3.tar.bz2),sourcecodecangetfrom

⏹ftp:

//ftp.gnu.org/gnu/gcc/gcc-3.3/gcc-3.2.3.tar.bz2

●GNUglibc(glibc-2.2.5.tar.gz),sourcecodecangetfrom

⏹ftp:

//ftp.gnu.org/gnu/glibc/glibc-2.2.5.tar.gz

TableofContents

TableofContents2

Part1–IntroductiontoGNUC/C++compilerandbinutils3

Step1:

understandGNUbinutils3

Step2:

understandGNUC/C++compiler(GCC)4

Step3:

crosstoolchains(crosssystem-developmenttools)5

Step4:

crossnewlib5

Part2–Buildcrossbinutils6

Step1:

downloadsourcecodeofGNUbinutils6

Step2:

uncompresssourcecode6

Step3:

configurebinutils7

Step4:

compilebinutils8

Step5:

installbinutils8

Step6:

測試crossbinutils是否編譯成功8

Part3–Buildcrosscompiler10

Step1:

AddbinutilstoPATH10

Step2:

downloadsourcecodeofGNUgcc10

Step3:

uncompresssourcecode11

Step4:

configuregcc11

Step5:

compilegcc12

Step6:

installgcc14

Step7:

測試所編譯之crosscompiler是否成功14

Part4–Buildcrossnewlib16

Step1:

Addbinutils、gcctoPATH16

Step2:

downloadsourcecodeofGNUnewlib16

Step3:

uncompresssourcecode16

Step4:

configurenewlib17

Step5:

compilenewlib18

Step6:

installnewlib18

Step7:

測試crossnewlib(crossCstandardlibrary)是否編譯成功19

Part1–IntroductiontoGNUC/C++compilerandbinutils

由於嵌入式系統處理器生命週期短、程式碼高效能的需求,使得相關軟體開發工具在嵌入式系統這個領域逐漸扮演關鍵性的角色,要有完整的開發環境,協力廠商或使用者才願意為你開發相關的應用程式或使用你的系統,能快速的提供完整的發展環境,才能佔有市場,搶得先機。

軟體開發工具包含了:

compiler、assembler、linker、debugger與相關的函式庫,由於發展軟體開發工具的成本非常高,廠商往往花費鉅資購買編譯器和發展環境,有時還必須付出一筆可觀的權利金。

近年來由於OpenSource和FreeSoftware概念的興起,許多重要的軟體以OpenSource的方式出現,使用者可以自由的修改、散佈和使用該軟體,其中最著名的應為GNUgroup所發展的軟體套件,這些軟體都是GPLLicense(你可以修改、散佈、使用或酌量收取費用,但是必須開放其原始碼)。

Step1:

understandGNUbinutils

TheGNUBinutils為一群binarytools的集合.主要的程式為:

-ld-theGNUlinker.

-as-theGNUassembler.

其他的程式還包含:

-addr2line-Convertsaddressesintofilenamesandlinenumbers.

-ar-Autilityforcreating,modifyingandextractingfromarchives.

-c++filt-FiltertodemangleencodedC++symbols.

-gprof-Displaysprofilinginformation.

-nlmconv-ConvertsobjectcodeintoanNLM.

-nm-Listssymbolsfromobjectfiles.

-objcopy-Copysandtranslatesobjectfiles.

-objdump-Displaysinformationfromobjectfiles.

-ranlib-Generatesanindextothecontentsofanarchive.

-readelf-DisplaysinformationfromanyELFformatobjectfile.

-size-Liststhesectionsizesofanobjectorarchivefile.

-strings-Listsprintablestringsfromfiles.

-strip-Discardssymbols.

-windres-AcompilerforWindowsresourcefiles.

這些操作於binaryformat的程式大部分使用BFD(BinaryFileDescriptorlibrary)來處理低階的檔案格式的操作,使用opcodeslibrary來處理組譯與反組譯的相關事宜。

Binutils已經被移植到許多不同的硬體平台上,它同時也具有易於移植到其他平台的特性,因此,非常適合用於嵌入式系統的開發。

Step2:

understandGNUC/C++compiler(GCC)

GNU有許多成名之作,其中最重要的軟體之一就是GCC,GCC最早由RichardStallman所發展,因為它是免費使用且原始碼公開,所以發展的相當迅速,很快就有許多人將它移植到不同的平台上。

GCC廣受歡迎的另一個原因是它所編譯出來的程式碼的品質(程式碼的正確性、大小、執行速度等等)並不比一些其他的商用編譯器來的差,有時甚至比較好,因此常常看到許多平台上都有GCC的蹤影。

GCC提供一套方便的機制,使你可以很容易的將它移植到另一個平台,同時也可以利用它來做為其他語言的前端,到目前為止,它所支援的程式語言有C、C++、ObjectiveC、Fortran、Java、Pascal、Ada、Modula-3、Java等等。

選擇GCC來開發compiler,是因為它免費可以取得,同時又支援許多平台和處理器,它結構化的設計使得我們可以很容易將它移植到另一個平台上,符合我們快速產生目的程式碼的需求,下圖顯示GCC的內部架構。

在GCC的編譯過程中,Parsing負責分析輸入的原始程式產生Parsingtree,透過Treetraveling產生中間碼RTL(registertransferlanguage),接著GCC讀取MachineDescription利用patternmatch的方式去matchRTL藉此產生assemblercode,在此過程中,GCC會使用不同的最佳化方法去最佳化RTL和產生assemblercode。

Step3:

crosstoolchains(crosssystem-developmenttools)

由於嵌入式系統先天上的限制(有限的記憶體大小、處理器的效能、系統可能沒有螢幕顯示相關訊息等等),在嵌入式系統內執行compiler、assembler等開發工具有時是不可能的。

因此,軟體開發工具必須能提供跨平台編譯的功能,才能符合實際的需求。

Crosstoolchains有幾個專有名詞,必須瞭解:

-Buildmachine:

themachinebuildscrosstoolchains

-Hostmachine:

themachinecrosstoolchainswillexecuteon

-Targetmachine:

themachinecrosstoolchainswillproduceoutputsfor

GNUtoolchains使用三個欄位(CPUtype–Companyname–Systemtype)來設定machine:

-CPUtype

-Companyname

-Systemtype

-Forexample:

vax-dec-ultrix4.2、i386-redhat-linux、m68k-coff、arm-elf

Step4:

crossglibc

在撰寫程式的過程中,通常都會使用Cstandardlibrary,GNUnewlibproject提供了適用於嵌入式系統的Cstandardlibrary,讓整個發展環境更為完整。

Part2–Buildcrossbinutils

設定安裝目錄

#INSTDIR=/usr/local/arm/3.3

#DESTDIR=/home/thu/toolchain/install

取得binutilstarball

#wgetftp:

//ftp.gnu.org/gnu/binutils/binutils-2.14.tar.bz2

解壓縮binutilstarball

#tar–jxvfbinutils-2.14.tar.bz2

patchbinutils

#cp/home/thu/patch-files/binutils-2.14.patch.bz2

#bzcatbinutils-2.14.patch.bz2|patch-p1-E-dbinutils-2.14

建立build目錄

#mkdirbinutils-2.14/build

#cdbinutils-2.14/build

設定binutils

#CFLAGS=-O2

#CXXFLAGS=-O2

#../configure--target=arm-linux--prefix=${INSTDIR}

這個步驟將偵測目前系統與相關軟體的狀態,調整相關的參數,最後產生適當的Makefile。

--target=arm-linux參數設定targetmachine為arm,支援的fileformat為linux

--prefix=${INSTDIR}參數設定軟體將安裝於${INSTDIR}目錄下。

建立binutils

#make

安裝binutils

#makeDESTDIR=${DESTDIR}install

#PATH=${DESTDIR}${INSTDIR}/bin:

$PATH

目錄結構如下:

測試crossbinutils是否編譯成功

測試crossas是否可執行:

#arm-linux-as–version

GNUldversion2.1420030612

Copyright2002

FreeSoftwareFoundation,Inc.

Thisprogramisfreesoftware;youmayredistributeitunderthetermsof

theGNUGeneralPublicLicense.Thisprogramhasabsolutelynowarranty.

Thisassemblerwasconfiguredforatargetof`arm-elf'.

測試crosslinker是否可執行:

#arm-linux-ld–version

GNUldversion2.1420030612

Copyright2002FreeSoftwareFoundation,Inc.

Thisprogramisfreesoftware;youmayredistributeitunderthetermsof

theGNUGeneralPublicLicense.Thisprogramhasabsolutelynowarranty.

Part3–Buildcrosscompiler

取得gcctarball

#wgetftp:

//ftp.gnu.org/gnu/gcc/gcc-3.3/gcc-3.3.tar.bz2

解壓縮gcctarball

#tar-vxjfgcc-3.3.tar.bz2

patchgcc

#cp/home/thu/patch-files/gcc-3.3.patch.bz2.

#bzcatgcc-3.3.patch.bz2|patch-p1-E-dgcc-3.3

建立linuxheaders

#cp/home/thu/patch-files/linux-2.4.21-header.bz2.

#tar–jvxflinux-2.4.21-header.bz2

#HEADERS=/home/thu/toolchain/linux-2.4.21/include

建立build目錄

#mkdirgcc-3.3/build

#cdgcc-3.3/build

設定gcc

#../configure--target=arm-linux\

--prefix=${INSTDIR}\

--with-headers=${HEADERS}\

--disable-shared\

--disable-threads\

--disable-debug\

--enable-languages="c"

-這個步驟將偵測目前系統與相關軟體的狀態,調整相關的參數,最後產生適當的Makefile。

---target=arm-linux參數設定targetmachine為arm。

---prefix=/foo參數設定軟體將安裝於/foo目錄下。

---enable-languages=c參數設定前端只支援C,即只產生C的編譯器。

(這部分我們為了節省編譯的時間,因此只建構C編譯器,同學也可以使用--enable-languages=c,c++參數設定建構C與C++編譯器)

 

建立gcc

#makeDESTDIR=${DESTDIR}build_tooldir=${DESTDIR}${INSTDIR}/arm-linux

安裝gcc

#makeDESTDIR=${DESTDIR}install

目錄結構如下:

(與binutils相同)

測試所編譯之crosscompiler是否成功

#arm-linux-gcc–Stest.c

我們所建構之crosscompilerarm-elf-gcc將test.c編譯成ARM組合語言test.S

Part4–Buildcrossnewlib

取得glibctarball

#wgetftp:

//ftp.gnu.org/gnu/glibc/glibc-2.2.5.tar.gz

取得glibc-linuxthreads

#wgetftp:

//ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.5.tar.gz

解壓縮binutilstarball

#tar-vxzfglibc-2.2.5.tar.gz

#tar-Cglibc-2.2.5-vxzfglibc-linuxthreads-2.2.5.tar.gz

patchbinutils

#cp/home/thu/patch-files/glibc-2.2.5.patch.bz2.

#bzcatglibc-2.2.5.patch.bz2|patch-p1-E-dglibc-2.2.5

建立build目錄

#mkdirglibc-2.2.5/build

#cdglibc-2.2.5/build

設定binutils

../configurearm-linux\

--build=i686-pc-linux-gnu\

--with-headers=${HEADERS}\

--enable-add-ons\

--enable-shared\

--prefix=${INSTDIR}

-這個步驟將偵測目前系統與相關軟體的狀態,調整相關的參數,最後產生適當的Makefile。

-prefix=/foo參數設定軟體將安裝於/foo目錄下。

(與binutils、gcc相同)

 

建立binutils

#make

安裝binutils

#makeinstall_root=${DESTDIR}install

目錄結構如下:

(與binutils、gcc皆相同)

測試crossglibc(crossCstandardlibrary)是否編譯成功

測試crossnewlib是否可執行:

#arm-linux-gcc–Stest1.c

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2