![搭建Linux交叉編譯開發(fā)環(huán)境_第1頁](http://file4.renrendoc.com/view/a8e26d450bb9cc7257c7ecebf495de41/a8e26d450bb9cc7257c7ecebf495de411.gif)
![搭建Linux交叉編譯開發(fā)環(huán)境_第2頁](http://file4.renrendoc.com/view/a8e26d450bb9cc7257c7ecebf495de41/a8e26d450bb9cc7257c7ecebf495de412.gif)
![搭建Linux交叉編譯開發(fā)環(huán)境_第3頁](http://file4.renrendoc.com/view/a8e26d450bb9cc7257c7ecebf495de41/a8e26d450bb9cc7257c7ecebf495de413.gif)
![搭建Linux交叉編譯開發(fā)環(huán)境_第4頁](http://file4.renrendoc.com/view/a8e26d450bb9cc7257c7ecebf495de41/a8e26d450bb9cc7257c7ecebf495de414.gif)
![搭建Linux交叉編譯開發(fā)環(huán)境_第5頁](http://file4.renrendoc.com/view/a8e26d450bb9cc7257c7ecebf495de41/a8e26d450bb9cc7257c7ecebf495de415.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第二章搭建
Linux交叉編譯開發(fā)環(huán)境
Crosscompilingenvironment什么是交叉編譯呢?簡單地說,就是在一個平臺上生成另一個平臺上的可執(zhí)行代碼。這里需要注意的是所謂平臺,實際上包含兩個概念:體系結(jié)構(gòu)〔Architecture〕和操作系統(tǒng)〔OperatingSystem〕。同一個體系結(jié)構(gòu)可以運行不同的操作系統(tǒng);同一個操作系統(tǒng)也可以在不同的體系結(jié)構(gòu)上運行。2.1什么是交叉編譯
2.2.1編譯工具鏈以下是一個基于RedHatlinux的交叉編譯環(huán)境的建立過程。整個編譯過程包括:下載源文件、補丁和建立編譯的目錄;建立內(nèi)核頭文件;建立二進制工具〔binutils〕;建立初始編譯器〔bootstrapgcc〕;建立c庫(glibc);建立全套編譯器〔fullgcc〕。2.2建立交叉編譯開發(fā)工具鏈
需求:下載源文件、補丁和建立編譯的目錄
a,下載: b,建目錄:將所有的源代碼放到/usr/tmp/下; 交叉編譯器將安裝在/opt/host/armv5/
2.2建立交叉編譯開發(fā)工具鏈
建立整個toolchain的步驟
2.2建立交叉編譯開發(fā)工具鏈(1)Installingbinutils#cd/tmp#./configure--target=armv5-unknown-linux--prefix=/opt/host/armv5#make#makeinstall2.2建立交叉編譯開發(fā)工具鏈注意:這樣就在/opt/host/armv5/bin下產(chǎn)生了binutils,它們的作用如下:addr2line——將要找的地址轉(zhuǎn)成文件和行號,它要使用debug信息。ar——產(chǎn)生、修改和解開一個存檔文件。as——gnu的匯編器。2.2建立交叉編譯開發(fā)工具鏈c++filt——C++和java中有一種重載函數(shù),所用的重載函數(shù)最后會被編譯轉(zhuǎn)化成匯編的標號,c++filt就是實現(xiàn)這種反向的轉(zhuǎn)化,根據(jù)標號得到函數(shù)名。gasp——gnu匯編器預編譯器。2.2建立交叉編譯開發(fā)工具鏈ld——gnu的連接器。nm——列出目標文件的符號和對應的地址。objcopy——將某種格式的目標文件轉(zhuǎn)化成另外格式的目標文件。objdump——顯示目標文件的信息。2.2建立交叉編譯開發(fā)工具鏈ranlib——為一個存檔文件產(chǎn)生一個索引,并將這個索引存入存檔文件中。readelf——顯示elf格式的目標文件的信息。size——顯示目標文件各個節(jié)的大小和目標文件的大小。strings——打印出目標文件中可以打印的字符串,有個默認的長度,為4。strip——剝掉目標文件的所有的符號信息。2.2建立交叉編譯開發(fā)工具鏈〔2〕輸出工具的路徑,使得以后的編譯工作能看到這些工具: #exportPATH=/opt/host/armv5/bin:$PATH2.2建立交叉編譯開發(fā)工具鏈〔3〕建立編譯需要使用的頭文件#cd/tmpac9-rmk1-np12.2建立交叉編譯開發(fā)工具鏈##gzip-cdpatch-2.4.9-ac9.gz|patch-p1:AlanCoxpatch#bzip2-cdpatch-2.4.9-ac9-rmk1.bz2|patch-p1:RussellKingpatch#gzip-cddiff-2.4.9-ac9-rmk1-np1.gz|patch-p1:NicholasPitrepatch#makemenuconfig:DotocreateARMheaderfiles.Whenyouexit,selectsaveitem.#makedep:Alsodotocreateheaderfiles.#cd/opt/host/armv4l/armv4l-unknown-linux#cdinclude:Ifnotexisting,makeincludedirectory.#cp-a/usr/include/*.:Copyallheaderfilesunder/usr/includedirtothecurrentdir.注意:要把linux的頭文件拷做來作為編譯的頭文件的原因是,我們要編譯的是給ARM處理器使用的編譯器,那么就需要一個用于ARM處理器的Linux內(nèi)核系統(tǒng)的頭文件〔4〕編譯ARM-GCC交叉編譯器##./configure--target=armv4l-unknown-linux--prefix=/opt/host/armv4l#makeLANGUAGES=c#makeLANGUAGES=cinstall注意:gcc——gnu的C語言編譯器。unprotoize——將ANSIC的源碼轉(zhuǎn)化為K&RC的形式,去掉函數(shù)原型中的參數(shù)類型。cpp——gnu的C的預編譯器。gcov——gcc的輔助測試工具,可以用它來分析和優(yōu)化程序。2.2建立交叉編譯開發(fā)工具鏈建立c庫(glibc)
#cd/tmp2.2建立交叉編譯開發(fā)工具鏈#CC=armv5-unknown-linux-gcc./configurearm-linux--enable-add-ons--build=i686-pc-linux-gnu--disable-iconv--prefix=/opt/host/armv4l#make#makeinstall2.2建立交叉編譯開發(fā)工具鏈注意:glibc主要是程序運行所需要的庫函數(shù)的集合,包括輸入輸出,數(shù)學,io控制等等2.2建立交叉編譯開發(fā)工具鏈 〔6〕安裝g++#./configure--target=armv4l-unknown-linux--with-libs=/opt/host/armv4l/lib--with-headers=/opt/host/armv4l/include--prefix=/opt/host/armv4l#makeLANGUAGES="cc++"#makeLANGUAGES="cc++"install2.2建立交叉編譯開發(fā)工具鏈注意:g++——gnu的c++編譯器。protoize——與unprotoize相反,將K&RC的源碼轉(zhuǎn)化為ANSIC的形式,函數(shù)原型中參加參數(shù)類型。c++——gnu的c++編譯器。2.2建立交叉編譯開發(fā)工具鏈2.2.2下載工具鏈這里主要介紹一下Denx公司發(fā)布的一整套開放源碼的嵌入式Linux開發(fā)工具鏈——ELDK〔EmbeddedLinuxDevelopmentKit〕ELDK可以安裝和運行在以下主機環(huán)境中:FedoraCore1,2,3RedHatLinux7.3,8.0,9SuSELinux8.x,9.0,9.1,9.22.2建立交叉編譯開發(fā)工具鏈Debian3.0(Woody)andtesting(Sarge)Ubuntu4.10FreeBSD5.0SuseLinux7.2,7.3Mandrake8.2Slackware8.1beta2GentooLinux1.4_rc2ELDK同時支持ARM、PPC、MIPS等多種處理器。2.2建立交叉編譯開發(fā)工具鏈 ELDK包括了一個安裝工具和許多RPM包,他們可以安裝到用戶的交叉編譯的主機的硬盤中。ELDK的RPM包可以分為2種:嵌入式Linux開發(fā)工具;為目標處理器編譯好的工具和元件。其中,第一局部包括執(zhí)行在開發(fā)主機上的交叉編譯工具,有GNU交叉編譯器GCC、Binutils和GDB等。第二局部是一些已經(jīng)編譯好的、可以在目標開發(fā)板上運行的工具和庫。這些工具和庫可以用來建立一個Linux的Roofs文件系統(tǒng)。2.2建立交叉編譯開發(fā)工具鏈2.2.3驗證工具鏈 注意: 通過上述兩種方式建立的工具鏈,還需要經(jīng)過驗證方可使用,我們主要通過實際編譯一個例子程序來驗證。2.2建立交叉編譯開發(fā)工具鏈在嵌入式軟件開發(fā)過程中,有些主機效勞是必要的,同時也會為我們的開發(fā)工作帶來便利。這里主要介紹四種主機效勞:samba、DHCP、TFTP和NFS。
2.3配置主機效勞
2.3.1配置sambaSamba效勞使Linux和Windows之間實現(xiàn)文件共享,方便對文件的編輯。 1) 修改samba配置文件/etc/samba/smb.conf 2) 為Samba創(chuàng)立一個單獨的口令文件。要根據(jù)你的現(xiàn)存/etc/passwd文件來創(chuàng)立 3) 改變Samba口令文件的權(quán)限許可,因此只有根用戶才有讀寫權(quán)限
2.3配置主機效勞
4) 要設置每個Samba用戶的口令,使用以下命令〔把username替換為每個用戶的用戶名〕 5) 加密口令必須在Samba配置文件中被啟用 6) 在shell提示下鍵入servicesmbrestart來確定smb效勞被啟動 7) 為防止每次啟動主機都要手工啟動samba效勞,使用命令使得samba效勞在每次系統(tǒng)啟動時都默認執(zhí)行
2.3配置主機效勞
2.3.2配置DHCPDHCP是動態(tài)主機配置協(xié)議。這個協(xié)議用于向計算機自動提供IP地址,子網(wǎng)掩碼和路由信息。在開發(fā)的過程中,目標系統(tǒng)并沒有自己的靜態(tài)IP地址,它是在啟動時向DHCP效勞器申請,因此需要在主機上配置DHCP效勞,以便在目標系統(tǒng)請求IP時,動態(tài)為它分配IP地址。DHCP效勞的配置文件為/etc/dhcpd.conf,通過修改該文件進行配置。etc/dhcpd.conf通常包括三局部:parameters、declarations、option。
2.3配置主機效勞
(1) DHCP配置文件中的parameters〔參數(shù)〕:說明如何執(zhí)行任務,是否要執(zhí)行任務,或?qū)⒛男┚W(wǎng)絡配置選項發(fā)送給客戶 (2) DHCP配置文件中的declarations〔聲明〕:用來描述網(wǎng)絡布局、提供客戶的IP地址等 (3) DHCP配置文件中的option〔選項〕:用來配置DHCP可選參數(shù),全部用option關鍵字作為開始
2.3配置主機效勞
重新啟動dhcp效勞為防止每次啟動主機都要手工啟動dhcp效勞,使用命令使得dhcp效勞在每次系統(tǒng)啟動時都默認執(zhí)行
2.3配置主機效勞
2.3.3配置TFTP 在目標系統(tǒng)的開發(fā)過程中,Linux內(nèi)核是從主機下載到目標系統(tǒng)上解壓并運行的,因此主機必須提供這種文件傳輸效勞。Tftp是一種簡單的文件傳輸協(xié)議,多用于嵌入系統(tǒng)應用中,因此主機需要配置tftp效勞,供下載內(nèi)核時使用
2.3配置主機效勞
修改配置參數(shù)在主機上創(chuàng)立/tftpboot目錄,以供存放內(nèi)核重新啟動tftp效勞為防止每次啟動主機都要手工啟動tftp效勞,使用命令使得tftp效勞在每次系統(tǒng)啟動時都默認執(zhí)行
2.3配置主機效勞
2.3.4配置NFS 網(wǎng)絡文件系統(tǒng)〔NFS〕是一種在網(wǎng)絡上的機器間共享文件的方法,在開發(fā)的過程中,目標系統(tǒng)沒有足夠的本地存儲設備供使用,它可以通過主機提供的NFS效勞,使用在主機上的文件系統(tǒng),就如同位于本地硬盤驅(qū)動器上一樣
2.3配置主機效勞
修改NFS配置文件 注意: 上面格式表示,同一共享目錄提供給兩個不同的主機,但提供給這兩臺主機的權(quán)限和參數(shù)可以是不同的??梢栽O定的參數(shù)主要有以下幾種:
2.3配置主機效勞
rw:可讀寫的權(quán)限;ro:只讀的權(quán)限;root_squash:root用戶的所有請求映射成如anonymous用戶一樣的權(quán)限〔默認〕;no_root_squash:保存共享文件的UID和GID〔默認〕;all_squash:共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄;
2.3配置主機效勞
no_all_squash:保存共享文件的UID和GID〔默認〕;sync:資料同步寫入到內(nèi)存與硬盤當中;async:資料會先暫存于內(nèi)存當中,而非直接寫入硬盤;secure
:NFS通過1024以下的平安TCP/IP端口發(fā)送;insecure:NFS通過1024以上的端口發(fā)送;hide
:在NFS共享目錄中不共享其子目錄;no_hide
:共享NFS目錄的子目錄
2.3配
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能家居材料采購合同
- 2025年度智能城市基礎設施建設合同范本
- 2025年度建筑工程施工廢棄物處理與環(huán)保合同
- 2025年度混凝土運輸車輛節(jié)能改造服務合同范本
- 2025年企業(yè)臨時用工聘合同范文(2篇)
- 2025年摩托車二手定金合同書寫模板
- 2025年中止合同的模板
- 2025年個人房屋租賃協(xié)議合同(三篇)
- 2025年中外出租合同樣本(2篇)
- 2025年中外合資經(jīng)營企業(yè)合同代理企(五篇)
- 2024年北京市中考數(shù)學試卷(含答案解析)
- 河南省2024年中考英語真題【附真題答案】
- 2024公路工程施工安全風險辨識與管控實施指南
- 浙江省嘉興市2023-2024學年高一上學期1月期末考試政治試題
- 新疆2024年新疆和田師范??茖W校招聘70人筆試歷年典型考題及考點附答案解析
- 【正版授權(quán)】 ISO 15978:2002 EN Open end blind rivets with break pull mandrel and countersunk head - AIA/St
- 2024時事政治考試題庫(基礎題)
- 2024山西文旅投資集團招聘117人公開引進高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
- 小學校本課程教材《趣味數(shù)學》
- 干細胞療法推廣方案
- (2024年)電工安全培訓(新編)課件
評論
0/150
提交評論