版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第1818章章 建立交叉編譯工具鏈建立交叉編譯工具鏈工欲善其事,必先利其器。嵌入式工欲善其事,必先利其器。嵌入式Linux開發(fā)不能短少開發(fā)不能短少的就是開發(fā)工具,其中最根本的是編譯工具。和傳統(tǒng)的編譯的就是開發(fā)工具,其中最根本的是編譯工具。和傳統(tǒng)的編譯方式不同,嵌入式系統(tǒng)開發(fā)需求在不同的計(jì)算機(jī)上編譯出開方式不同,嵌入式系統(tǒng)開發(fā)需求在不同的計(jì)算機(jī)上編譯出開發(fā)板需求的程序,所用的編譯工具也與傳統(tǒng)的編譯工具不同發(fā)板需求的程序,所用的編譯工具也與傳統(tǒng)的編譯工具不同。本章講解如何構(gòu)建嵌入式。本章講解如何構(gòu)建嵌入式Linux開發(fā)需求的交叉編譯工具開發(fā)需求的交叉編譯工具鏈,主要內(nèi)容如下:鏈,主要內(nèi)容如下:交
2、叉編譯工具鏈引見交叉編譯工具鏈引見手工構(gòu)建交叉編譯工具鏈?zhǔn)止?gòu)建交叉編譯工具鏈運(yùn)用腳本構(gòu)建交叉編譯工具鏈運(yùn)用腳本構(gòu)建交叉編譯工具鏈交叉編譯工具鏈常見的問題交叉編譯工具鏈常見的問題18.1 18.1 什么是交叉編譯什么是交叉編譯交叉編譯是伴隨嵌入式系統(tǒng)的開展而來的,傳統(tǒng)的程交叉編譯是伴隨嵌入式系統(tǒng)的開展而來的,傳統(tǒng)的程序編譯方式,生成的程序直接在本地運(yùn)轉(zhuǎn),這種編譯方式稱序編譯方式,生成的程序直接在本地運(yùn)轉(zhuǎn),這種編譯方式稱作本地編譯作本地編譯Native Compilation;嵌入式系統(tǒng)多采用交;嵌入式系統(tǒng)多采用交叉編譯的方式,在本機(jī)編譯好的程序是不能在本機(jī)運(yùn)轉(zhuǎn)的,叉編譯的方式,在本機(jī)編譯好的程
3、序是不能在本機(jī)運(yùn)轉(zhuǎn)的,需求經(jīng)過特定的手段例如燒寫,下載等安裝到目的系統(tǒng)需求經(jīng)過特定的手段例如燒寫,下載等安裝到目的系統(tǒng)上執(zhí)行。這種編譯運(yùn)轉(zhuǎn)的方法比較繁瑣,是遭到實(shí)踐條件限上執(zhí)行。這種編譯運(yùn)轉(zhuǎn)的方法比較繁瑣,是遭到實(shí)踐條件限制的。大多數(shù)的嵌入式系統(tǒng)目的板系統(tǒng)資源都很有限,無論制的。大多數(shù)的嵌入式系統(tǒng)目的板系統(tǒng)資源都很有限,無論是存儲(chǔ)空間還是是存儲(chǔ)空間還是CPU處置才干,都很難到達(dá)編譯程序的要求處置才干,都很難到達(dá)編譯程序的要求。而且很多目的板是沒有操作系統(tǒng)的,需求經(jīng)過其他的機(jī)器。而且很多目的板是沒有操作系統(tǒng)的,需求經(jīng)過其他的機(jī)器編譯操作系統(tǒng)和運(yùn)用程序。編譯操作系統(tǒng)和運(yùn)用程序。18.2 18.2
4、需求哪些東西需求哪些東西建立交叉編譯工具鏈可以在多種平臺(tái)上進(jìn)展,本書建建立交叉編譯工具鏈可以在多種平臺(tái)上進(jìn)展,本書建議運(yùn)用議運(yùn)用x86體系構(gòu)造的體系構(gòu)造的PC機(jī),在機(jī),在Linux系統(tǒng)下進(jìn)展。這種選系統(tǒng)下進(jìn)展。這種選擇不是強(qiáng)迫的,是由于擇不是強(qiáng)迫的,是由于x86體系構(gòu)造是運(yùn)用最廣泛的。同時(shí)體系構(gòu)造是運(yùn)用最廣泛的。同時(shí),運(yùn)用,運(yùn)用Linux系統(tǒng)可以防止許多開發(fā)環(huán)境的設(shè)置。建立交叉系統(tǒng)可以防止許多開發(fā)環(huán)境的設(shè)置。建立交叉編譯工具鏈需求以下的預(yù)備:編譯工具鏈需求以下的預(yù)備:磁盤空間:磁盤空間:源代碼:源代碼:命令行:命令行:其他工具:其他工具:18.3 18.3 手工創(chuàng)建工具鏈?zhǔn)止?chuàng)建工具鏈構(gòu)建交叉
5、編譯器首先是確定目的平臺(tái)。在構(gòu)建交叉編譯器首先是確定目的平臺(tái)。在GNU系統(tǒng),系統(tǒng),每個(gè)目的平臺(tái)都有一個(gè)明確的格式和稱號(hào),這些信息可以在每個(gè)目的平臺(tái)都有一個(gè)明確的格式和稱號(hào),這些信息可以在構(gòu)建工具的過程中識(shí)別工具的正確版本。由于編譯交叉工具構(gòu)建工具的過程中識(shí)別工具的正確版本。由于編譯交叉工具鏈的過程中會(huì)有兩套編譯器環(huán)境,明確了平臺(tái)稱號(hào)和格式才鏈的過程中會(huì)有兩套編譯器環(huán)境,明確了平臺(tái)稱號(hào)和格式才干保證生成工具不出錯(cuò)。干保證生成工具不出錯(cuò)。在運(yùn)轉(zhuǎn)在運(yùn)轉(zhuǎn)gcc的時(shí)候,的時(shí)候,gcc會(huì)在途徑中查找包含指定目的規(guī)會(huì)在途徑中查找包含指定目的規(guī)范的運(yùn)用程序途徑。范的運(yùn)用程序途徑。GNU的目的規(guī)范格式為的目的規(guī)
6、范格式為CPU-PLATFORM-OS。如。如x86目的機(jī)稱號(hào)是目的機(jī)稱號(hào)是i686-pc-linux-gnu,ARM目的平臺(tái)稱號(hào)是目的平臺(tái)稱號(hào)是arm-linux-gnu。構(gòu)建交叉工具鏈通常。構(gòu)建交叉工具鏈通常有以下有以下3種方法:種方法:1分步驟手工編譯分步驟手工編譯2經(jīng)過腳本編譯經(jīng)過腳本編譯3直接獲取交叉編譯工具鏈直接獲取交叉編譯工具鏈18.3.1 18.3.1 預(yù)備任務(wù)預(yù)備任務(wù)- -獲取源代碼獲取源代碼手工編譯交叉編譯工具鏈需求編譯用到的庫和源代碼手工編譯交叉編譯工具鏈需求編譯用到的庫和源代碼,首先是下載如下源代碼:,首先是下載如下源代碼:Linux內(nèi)核代碼內(nèi)核代碼glibc庫庫工具程
7、序工具程序內(nèi)核線程包內(nèi)核線程包編譯器編譯器18.3.2 18.3.2 開場(chǎng)了開場(chǎng)了- -建立任務(wù)環(huán)境建立任務(wù)環(huán)境構(gòu)建交叉編譯工具鏈需求建立一個(gè)任務(wù)環(huán)境,包括建構(gòu)建交叉編譯工具鏈需求建立一個(gè)任務(wù)環(huán)境,包括建立任務(wù)目錄和環(huán)境變量。任務(wù)目錄是交叉編譯工具鏈構(gòu)建過立任務(wù)目錄和環(huán)境變量。任務(wù)目錄是交叉編譯工具鏈構(gòu)建過程中運(yùn)用的目錄,任務(wù)目錄沒有特殊要求,用戶可以根據(jù)本程中運(yùn)用的目錄,任務(wù)目錄沒有特殊要求,用戶可以根據(jù)本人的喜好建立。本書假定在當(dāng)前用戶的用戶目錄下建立一個(gè)人的喜好建立。本書假定在當(dāng)前用戶的用戶目錄下建立一個(gè)armtools作為任務(wù)目錄。作為任務(wù)目錄。mkdir armtools18.3.3
8、 18.3.3 建立建立linuxlinux內(nèi)核頭文件內(nèi)核頭文件交叉編譯器需求經(jīng)過內(nèi)核頭文件獲取目的平臺(tái)支持的系統(tǒng)交叉編譯器需求經(jīng)過內(nèi)核頭文件獲取目的平臺(tái)支持的系統(tǒng)函數(shù)調(diào)用的信息。因此,需求拷貝內(nèi)核的頭文件。但是,直接函數(shù)調(diào)用的信息。因此,需求拷貝內(nèi)核的頭文件。但是,直接拷貝內(nèi)核頭文件是不行的,還需求對(duì)內(nèi)核做簡(jiǎn)單的配置,讓內(nèi)拷貝內(nèi)核頭文件是不行的,還需求對(duì)內(nèi)核做簡(jiǎn)單的配置,讓內(nèi)核腳本生成目的平臺(tái)的頭文件。需求留意的是,核腳本生成目的平臺(tái)的頭文件。需求留意的是,Linux內(nèi)核版內(nèi)核版本和編譯器版本依賴比較強(qiáng),一個(gè)版本的編譯器不能保證編譯本和編譯器版本依賴比較強(qiáng),一個(gè)版本的編譯器不能保證編譯一切內(nèi)
9、核版本。一切內(nèi)核版本。1首先在首先在$PRJROOT/kernel目錄下解緊縮內(nèi)核源代碼目錄下解緊縮內(nèi)核源代碼2接下來進(jìn)入內(nèi)核代碼目錄配置目的平臺(tái)的頭文件:接下來進(jìn)入內(nèi)核代碼目錄配置目的平臺(tái)的頭文件:3Linux內(nèi)核配置的頂層界面,按照功能劃分分成假內(nèi)核配置的頂層界面,按照功能劃分分成假設(shè)干項(xiàng),與生成目的平臺(tái)頭文件相關(guān)的是設(shè)干項(xiàng),與生成目的平臺(tái)頭文件相關(guān)的是System Type項(xiàng)。運(yùn)項(xiàng)。運(yùn)用光標(biāo)鍵挪動(dòng)到該選項(xiàng),回車進(jìn)入配置界面。用光標(biāo)鍵挪動(dòng)到該選項(xiàng),回車進(jìn)入配置界面。4目的平臺(tái)選擇終了后,直接回車,回到了系統(tǒng)類型目的平臺(tái)選擇終了后,直接回車,回到了系統(tǒng)類型配置界面。配置界面。5配置內(nèi)核終了后
10、,檢查能否生成正確的內(nèi)核頭文件配置內(nèi)核終了后,檢查能否生成正確的內(nèi)核頭文件include/linux/version.h和和include/linux/autoconf.h,這兩個(gè)文件,這兩個(gè)文件是編譯是編譯glibc需求的。需求的。6最后一步是把生成的內(nèi)核頭文件復(fù)制到交叉編譯工最后一步是把生成的內(nèi)核頭文件復(fù)制到交叉編譯工具鏈目錄。具鏈目錄。18.3.4 18.3.4 編譯安裝編譯安裝binutilsbinutilsbinutils是交叉編譯工具鏈里一個(gè)重要的工具包,由是交叉編譯工具鏈里一個(gè)重要的工具包,由GNU提供。提供。binutils包括了銜接器、匯編器和用于目的文件包括了銜接器、匯編器
11、和用于目的文件和檔案的工具。和檔案的工具。binutils工具包主要針對(duì)二進(jìn)制代碼的維護(hù)工具包主要針對(duì)二進(jìn)制代碼的維護(hù)。1binutils工具包內(nèi)容工具包內(nèi)容2編譯安裝編譯安裝binutils工具包工具包18.3.5 18.3.5 編譯安裝編譯安裝gccgcc的的c c編譯器編譯器這一步建立這一步建立arm-linux-gcc交叉編譯器,但是這個(gè)交叉編譯器,但是這個(gè)gcc編編譯器是沒有譯器是沒有g(shù)libc庫支持的。也就是說,此編譯器只能用于編庫支持的。也就是說,此編譯器只能用于編譯內(nèi)核、譯內(nèi)核、Bootloader等不需求等不需求glibc庫支持的程序。庫支持的程序。glibc庫也庫也要運(yùn)用此
12、編譯器,所以創(chuàng)建這個(gè)編譯器確切的說是為了建立要運(yùn)用此編譯器,所以創(chuàng)建這個(gè)編譯器確切的說是為了建立glibc庫。有的文檔把這個(gè)步驟叫做庫。有的文檔把這個(gè)步驟叫做gcc的第一次編譯,這是的第一次編譯,這是相對(duì)后面的編譯過程講的。相對(duì)后面的編譯過程講的。18.3.6 18.3.6 編譯安裝編譯安裝glibcglibc庫庫GNU glibc庫是庫是Linux系統(tǒng)程序非常重要的組成部分。系統(tǒng)程序非常重要的組成部分。假設(shè)用戶開發(fā)目的平臺(tái)的運(yùn)用程序,那么必需編譯安裝假設(shè)用戶開發(fā)目的平臺(tái)的運(yùn)用程序,那么必需編譯安裝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沒有沒有g(shù)libc支持,編譯好支持,編譯好glibc以后,需以后,需求重新編譯求重新編譯gcc用于支持用于支持glibc庫。需求留意的是,第一次編庫。需求留意的是,第一次編譯的譯的gcc只能支持只能支持C言語程序編譯,如今編譯的言語程序編譯,如今編譯的gcc可以支持可以支持C和和C+言語。本次編譯也叫做第二次編譯。言語。本次編
14、譯也叫做第二次編譯。18.3.8 18.3.8 最后的任務(wù)最后的任務(wù)到目前為止,曾經(jīng)完成了分步驟構(gòu)建交叉工具鏈的一到目前為止,曾經(jīng)完成了分步驟構(gòu)建交叉工具鏈的一切任務(wù)。最后還需求測(cè)試一下構(gòu)建的工具鏈能否符合要求。切任務(wù)。最后還需求測(cè)試一下構(gòu)建的工具鏈能否符合要求。18.4 18.4 運(yùn)用腳本創(chuàng)建工具鏈運(yùn)用腳本創(chuàng)建工具鏈?zhǔn)止?gòu)建交叉編譯工具鏈不僅步驟繁瑣,而且容易出手工構(gòu)建交叉編譯工具鏈不僅步驟繁瑣,而且容易出錯(cuò)。為了簡(jiǎn)化構(gòu)建工具鏈的過程,減小出錯(cuò),錯(cuò)。為了簡(jiǎn)化構(gòu)建工具鏈的過程,減小出錯(cuò),Linux社區(qū)設(shè)社區(qū)設(shè)計(jì)了一套編譯工具鏈的腳本計(jì)了一套編譯工具鏈的腳本Crosstool。Crosstool
15、是一組建立是一組建立交叉編譯環(huán)境的腳步工具,經(jīng)過指定不同參數(shù),交叉編譯環(huán)境的腳步工具,經(jīng)過指定不同參數(shù),Crosstool腳腳本可以建立指定版本的本可以建立指定版本的gcc編譯器和編譯器和glibc程序庫。該腳本也程序庫。該腳本也是一個(gè)開源工程,讀者假設(shè)出于任務(wù)需求建議運(yùn)用是一個(gè)開源工程,讀者假設(shè)出于任務(wù)需求建議運(yùn)用crosstools構(gòu)建交叉編譯工具鏈。構(gòu)建交叉編譯工具鏈。18.5 18.5 更簡(jiǎn)便的方法更簡(jiǎn)便的方法 - - 獲取已編譯好的交叉編譯獲取已編譯好的交叉編譯環(huán)境環(huán)境以上兩節(jié)講的構(gòu)建交叉編譯工具鏈的方法都需求手工干涉以上兩節(jié)講的構(gòu)建交叉編譯工具鏈的方法都需求手工干涉。本節(jié)引見一種更
16、簡(jiǎn)便的方法,直接下載曾經(jīng)編譯好的工具鏈。本節(jié)引見一種更簡(jiǎn)便的方法,直接下載曾經(jīng)編譯好的工具鏈。Linux社區(qū)提供了多個(gè)版本的社區(qū)提供了多個(gè)版本的ARM平臺(tái)交叉編譯工具鏈。下平臺(tái)交叉編譯工具鏈。下面是三個(gè)不同版本編譯器的下載地址。面是三個(gè)不同版本編譯器的下載地址。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 小結(jié)小結(jié)本章講解了搭建嵌入式本章講解了搭建嵌入式Linux開發(fā)環(huán)境最關(guān)鍵的技術(shù)開發(fā)環(huán)境最關(guān)鍵的技
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人健康保險(xiǎn)合同范本2篇
- 長沙南方職業(yè)學(xué)院《俄語基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度智能倉儲(chǔ)物流設(shè)施建設(shè)合同范本3篇
- 2024物業(yè)權(quán)益讓與擔(dān)保合同 權(quán)益方與受讓方協(xié)議
- 思政教育團(tuán)隊(duì)建設(shè)與教師專業(yè)成長
- 二零二五版集成墻板家裝裝修環(huán)保評(píng)估合同范本3篇
- 2025年校園歷史文化宣傳欄制作與教育推廣合同3篇
- 二零二五年度建筑設(shè)計(jì)創(chuàng)意大賽參賽合同2篇
- 2025年新型農(nóng)業(yè)技術(shù)培訓(xùn)合同范本3篇
- 2025年度定制化鋁材加工與銷售一體化合同4篇
- 獵聘-2024高校畢業(yè)生就業(yè)數(shù)據(jù)報(bào)告
- 2024虛擬現(xiàn)實(shí)產(chǎn)業(yè)布局白皮書
- 車站值班員(中級(jí))鐵路職業(yè)技能鑒定考試題及答案
- JTG∕T E61-2014 公路路面技術(shù)狀況自動(dòng)化檢測(cè)規(guī)程
- 高中英語短語大全(打印版)
- 軟件研發(fā)安全管理制度
- 三位數(shù)除以兩位數(shù)-豎式運(yùn)算300題
- 寺院消防安全培訓(xùn)課件
- 比摩阻-管徑-流量計(jì)算公式
- GB/T 42430-2023血液、尿液中乙醇、甲醇、正丙醇、丙酮、異丙醇和正丁醇檢驗(yàn)
- 五年級(jí)數(shù)學(xué)應(yīng)用題100道
評(píng)論
0/150
提交評(píng)論