




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第1818章章 建立交叉編譯工具鏈建立交叉編譯工具鏈工欲善其事,必先利其器。嵌入式工欲善其事,必先利其器。嵌入式Linux開發不能短少開發不能短少的就是開發工具,其中最根本的是編譯工具。和傳統的編譯的就是開發工具,其中最根本的是編譯工具。和傳統的編譯方式不同,嵌入式系統開發需求在不同的計算機上編譯出開方式不同,嵌入式系統開發需求在不同的計算機上編譯出開發板需求的程序,所用的編譯工具也與傳統的編譯工具不同發板需求的程序,所用的編譯工具也與傳統的編譯工具不同。本章講解如何構建嵌入式。本章講解如何構建嵌入式Linux開發需求的交叉編譯工具開發需求的交叉編譯工具鏈,主要內容如下:鏈,主要內容如下:交
2、叉編譯工具鏈引見交叉編譯工具鏈引見手工構建交叉編譯工具鏈手工構建交叉編譯工具鏈運用腳本構建交叉編譯工具鏈運用腳本構建交叉編譯工具鏈交叉編譯工具鏈常見的問題交叉編譯工具鏈常見的問題18.1 18.1 什么是交叉編譯什么是交叉編譯交叉編譯是伴隨嵌入式系統的開展而來的,傳統的程交叉編譯是伴隨嵌入式系統的開展而來的,傳統的程序編譯方式,生成的程序直接在本地運轉,這種編譯方式稱序編譯方式,生成的程序直接在本地運轉,這種編譯方式稱作本地編譯作本地編譯Native Compilation;嵌入式系統多采用交;嵌入式系統多采用交叉編譯的方式,在本機編譯好的程序是不能在本機運轉的,叉編譯的方式,在本機編譯好的程
3、序是不能在本機運轉的,需求經過特定的手段例如燒寫,下載等安裝到目的系統需求經過特定的手段例如燒寫,下載等安裝到目的系統上執行。這種編譯運轉的方法比較繁瑣,是遭到實踐條件限上執行。這種編譯運轉的方法比較繁瑣,是遭到實踐條件限制的。大多數的嵌入式系統目的板系統資源都很有限,無論制的。大多數的嵌入式系統目的板系統資源都很有限,無論是存儲空間還是是存儲空間還是CPU處置才干,都很難到達編譯程序的要求處置才干,都很難到達編譯程序的要求。而且很多目的板是沒有操作系統的,需求經過其他的機器。而且很多目的板是沒有操作系統的,需求經過其他的機器編譯操作系統和運用程序。編譯操作系統和運用程序。18.2 18.2
4、需求哪些東西需求哪些東西建立交叉編譯工具鏈可以在多種平臺上進展,本書建建立交叉編譯工具鏈可以在多種平臺上進展,本書建議運用議運用x86體系構造的體系構造的PC機,在機,在Linux系統下進展。這種選系統下進展。這種選擇不是強迫的,是由于擇不是強迫的,是由于x86體系構造是運用最廣泛的。同時體系構造是運用最廣泛的。同時,運用,運用Linux系統可以防止許多開發環境的設置。建立交叉系統可以防止許多開發環境的設置。建立交叉編譯工具鏈需求以下的預備:編譯工具鏈需求以下的預備:磁盤空間:磁盤空間:源代碼:源代碼:命令行:命令行:其他工具:其他工具:18.3 18.3 手工創建工具鏈手工創建工具鏈構建交叉
5、編譯器首先是確定目的平臺。在構建交叉編譯器首先是確定目的平臺。在GNU系統,系統,每個目的平臺都有一個明確的格式和稱號,這些信息可以在每個目的平臺都有一個明確的格式和稱號,這些信息可以在構建工具的過程中識別工具的正確版本。由于編譯交叉工具構建工具的過程中識別工具的正確版本。由于編譯交叉工具鏈的過程中會有兩套編譯器環境,明確了平臺稱號和格式才鏈的過程中會有兩套編譯器環境,明確了平臺稱號和格式才干保證生成工具不出錯。干保證生成工具不出錯。在運轉在運轉gcc的時候,的時候,gcc會在途徑中查找包含指定目的規會在途徑中查找包含指定目的規范的運用程序途徑。范的運用程序途徑。GNU的目的規范格式為的目的規
6、范格式為CPU-PLATFORM-OS。如。如x86目的機稱號是目的機稱號是i686-pc-linux-gnu,ARM目的平臺稱號是目的平臺稱號是arm-linux-gnu。構建交叉工具鏈通常。構建交叉工具鏈通常有以下有以下3種方法:種方法:1分步驟手工編譯分步驟手工編譯2經過腳本編譯經過腳本編譯3直接獲取交叉編譯工具鏈直接獲取交叉編譯工具鏈18.3.1 18.3.1 預備任務預備任務- -獲取源代碼獲取源代碼手工編譯交叉編譯工具鏈需求編譯用到的庫和源代碼手工編譯交叉編譯工具鏈需求編譯用到的庫和源代碼,首先是下載如下源代碼:,首先是下載如下源代碼:Linux內核代碼內核代碼glibc庫庫工具程
7、序工具程序內核線程包內核線程包編譯器編譯器18.3.2 18.3.2 開場了開場了- -建立任務環境建立任務環境構建交叉編譯工具鏈需求建立一個任務環境,包括建構建交叉編譯工具鏈需求建立一個任務環境,包括建立任務目錄和環境變量。任務目錄是交叉編譯工具鏈構建過立任務目錄和環境變量。任務目錄是交叉編譯工具鏈構建過程中運用的目錄,任務目錄沒有特殊要求,用戶可以根據本程中運用的目錄,任務目錄沒有特殊要求,用戶可以根據本人的喜好建立。本書假定在當前用戶的用戶目錄下建立一個人的喜好建立。本書假定在當前用戶的用戶目錄下建立一個armtools作為任務目錄。作為任務目錄。mkdir armtools18.3.3
8、 18.3.3 建立建立linuxlinux內核頭文件內核頭文件交叉編譯器需求經過內核頭文件獲取目的平臺支持的系統交叉編譯器需求經過內核頭文件獲取目的平臺支持的系統函數調用的信息。因此,需求拷貝內核的頭文件。但是,直接函數調用的信息。因此,需求拷貝內核的頭文件。但是,直接拷貝內核頭文件是不行的,還需求對內核做簡單的配置,讓內拷貝內核頭文件是不行的,還需求對內核做簡單的配置,讓內核腳本生成目的平臺的頭文件。需求留意的是,核腳本生成目的平臺的頭文件。需求留意的是,Linux內核版內核版本和編譯器版本依賴比較強,一個版本的編譯器不能保證編譯本和編譯器版本依賴比較強,一個版本的編譯器不能保證編譯一切內
9、核版本。一切內核版本。1首先在首先在$PRJROOT/kernel目錄下解緊縮內核源代碼目錄下解緊縮內核源代碼2接下來進入內核代碼目錄配置目的平臺的頭文件:接下來進入內核代碼目錄配置目的平臺的頭文件:3Linux內核配置的頂層界面,按照功能劃分分成假內核配置的頂層界面,按照功能劃分分成假設干項,與生成目的平臺頭文件相關的是設干項,與生成目的平臺頭文件相關的是System Type項。運項。運用光標鍵挪動到該選項,回車進入配置界面。用光標鍵挪動到該選項,回車進入配置界面。4目的平臺選擇終了后,直接回車,回到了系統類型目的平臺選擇終了后,直接回車,回到了系統類型配置界面。配置界面。5配置內核終了后
10、,檢查能否生成正確的內核頭文件配置內核終了后,檢查能否生成正確的內核頭文件include/linux/version.h和和include/linux/autoconf.h,這兩個文件,這兩個文件是編譯是編譯glibc需求的。需求的。6最后一步是把生成的內核頭文件復制到交叉編譯工最后一步是把生成的內核頭文件復制到交叉編譯工具鏈目錄。具鏈目錄。18.3.4 18.3.4 編譯安裝編譯安裝binutilsbinutilsbinutils是交叉編譯工具鏈里一個重要的工具包,由是交叉編譯工具鏈里一個重要的工具包,由GNU提供。提供。binutils包括了銜接器、匯編器和用于目的文件包括了銜接器、匯編器
11、和用于目的文件和檔案的工具。和檔案的工具。binutils工具包主要針對二進制代碼的維護工具包主要針對二進制代碼的維護。1binutils工具包內容工具包內容2編譯安裝編譯安裝binutils工具包工具包18.3.5 18.3.5 編譯安裝編譯安裝gccgcc的的c c編譯器編譯器這一步建立這一步建立arm-linux-gcc交叉編譯器,但是這個交叉編譯器,但是這個gcc編編譯器是沒有譯器是沒有glibc庫支持的。也就是說,此編譯器只能用于編庫支持的。也就是說,此編譯器只能用于編譯內核、譯內核、Bootloader等不需求等不需求glibc庫支持的程序。庫支持的程序。glibc庫也庫也要運用此
12、編譯器,所以創建這個編譯器確切的說是為了建立要運用此編譯器,所以創建這個編譯器確切的說是為了建立glibc庫。有的文檔把這個步驟叫做庫。有的文檔把這個步驟叫做gcc的第一次編譯,這是的第一次編譯,這是相對后面的編譯過程講的。相對后面的編譯過程講的。18.3.6 18.3.6 編譯安裝編譯安裝glibcglibc庫庫GNU glibc庫是庫是Linux系統程序非常重要的組成部分。系統程序非常重要的組成部分。假設用戶開發目的平臺的運用程序,那么必需編譯安裝假設用戶開發目的平臺的運用程序,那么必需編譯安裝glibc庫。庫。glibc-2.3.2版本引薦先安裝以下的工具:版本引薦先安裝以下的工具:GN
13、U make 3.79或更新的版本;或更新的版本;GCC 3.2或更新的版本;或更新的版本;GNU binutils 2.13或更新的版本?;蚋碌陌姹尽?8.3.7 18.3.7 編譯安裝編譯安裝gccgcc的的c,c+c,c+編譯器編譯器第一次編譯的第一次編譯的gcc沒有沒有glibc支持,編譯好支持,編譯好glibc以后,需以后,需求重新編譯求重新編譯gcc用于支持用于支持glibc庫。需求留意的是,第一次編庫。需求留意的是,第一次編譯的譯的gcc只能支持只能支持C言語程序編譯,如今編譯的言語程序編譯,如今編譯的gcc可以支持可以支持C和和C+言語。本次編譯也叫做第二次編譯。言語。本次編
14、譯也叫做第二次編譯。18.3.8 18.3.8 最后的任務最后的任務到目前為止,曾經完成了分步驟構建交叉工具鏈的一到目前為止,曾經完成了分步驟構建交叉工具鏈的一切任務。最后還需求測試一下構建的工具鏈能否符合要求。切任務。最后還需求測試一下構建的工具鏈能否符合要求。18.4 18.4 運用腳本創建工具鏈運用腳本創建工具鏈手工構建交叉編譯工具鏈不僅步驟繁瑣,而且容易出手工構建交叉編譯工具鏈不僅步驟繁瑣,而且容易出錯。為了簡化構建工具鏈的過程,減小出錯,錯。為了簡化構建工具鏈的過程,減小出錯,Linux社區設社區設計了一套編譯工具鏈的腳本計了一套編譯工具鏈的腳本Crosstool。Crosstool
15、是一組建立是一組建立交叉編譯環境的腳步工具,經過指定不同參數,交叉編譯環境的腳步工具,經過指定不同參數,Crosstool腳腳本可以建立指定版本的本可以建立指定版本的gcc編譯器和編譯器和glibc程序庫。該腳本也程序庫。該腳本也是一個開源工程,讀者假設出于任務需求建議運用是一個開源工程,讀者假設出于任務需求建議運用crosstools構建交叉編譯工具鏈。構建交叉編譯工具鏈。18.5 18.5 更簡便的方法更簡便的方法 - - 獲取已編譯好的交叉編譯獲取已編譯好的交叉編譯環境環境以上兩節講的構建交叉編譯工具鏈的方法都需求手工干涉以上兩節講的構建交叉編譯工具鏈的方法都需求手工干涉。本節引見一種更
16、簡便的方法,直接下載曾經編譯好的工具鏈。本節引見一種更簡便的方法,直接下載曾經編譯好的工具鏈。Linux社區提供了多個版本的社區提供了多個版本的ARM平臺交叉編譯工具鏈。下平臺交叉編譯工具鏈。下面是三個不同版本編譯器的下載地址。面是三個不同版本編譯器的下載地址。ARM Linux下載地址:下載地址:.uk/pub/armlinux/toolchain/提供版本:提供版本:arm-linux-gcc版本版本2.95.3, 3.0和和3.2H下載地址:下載地址:/projects/toolchain/提供版本:提供版本:arm-linux-gcc版本版本3.3.2和和3.4.1ELDK 4.1下載地址:下載地址:ftpftp.denx.de/pub/eldk/4.1/提供版本:提供版本:arm-linux-gcc版本版本4.0.018.6 18.6 小結小結本章講解了搭建嵌入式本章講解了搭建嵌入式Linux開發環境最關鍵的技術開發環境最關鍵的技
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司期貨部管理制度
- 門診醫師工作管理制度
- 黨支部決策管理制度
- 車間天車安全管理制度
- 公司私人戶管理制度
- 裝修工程測量管理制度
- 財稅公司人員管理制度
- 高校參觀考察管理制度
- 會議預決算管理制度
- 餐飲烹調加工管理制度
- 污水處理系統工程合同范本
- 路基石方破碎開挖專項施工方案
- 德能勤績廉個人總結的
- 二年級美術上冊課件 《3.我的手印畫》 贛美版 (共18張PPT)
- Q∕SY 126-2014 油田水處理用緩蝕阻垢劑技術規范
- GB∕T 3216-2016 回轉動力泵 水力性能驗收試驗 1級、2級和3級
- 電子電氣評估規范-最新
- 全國青少年機器人技術等價考試三級全套課件
- 黑布林繪本 Dad-for-Sale 出售爸爸課件
- 腹腔鏡下肝葉切除術(實用課件)
- 三菱M70數控系統以太網應用
評論
0/150
提交評論