第18章建立交叉編譯工具鏈ppt課件_第1頁
第18章建立交叉編譯工具鏈ppt課件_第2頁
第18章建立交叉編譯工具鏈ppt課件_第3頁
第18章建立交叉編譯工具鏈ppt課件_第4頁
第18章建立交叉編譯工具鏈ppt課件_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第第1818章章 建立交叉編譯工具鏈建立交叉編譯工具鏈工欲善其事,必先利其器。嵌入式工欲善其事,必先利其器。嵌入式Linux開發(fā)不能短少開發(fā)不能短少的就是開發(fā)工具,其中最根本的是編譯工具。和傳統(tǒng)的編譯的就是開發(fā)工具,其中最根本的是編譯工具。和傳統(tǒng)的編譯方式不同,嵌入式系統(tǒng)開發(fā)需求在不同的計算機上編譯出開方式不同,嵌入式系統(tǒng)開發(fā)需求在不同的計算機上編譯出開發(fā)板需求的程序,所用的編譯工具也與傳統(tǒng)的編譯工具不同發(fā)板需求的程序,所用的編譯工具也與傳統(tǒng)的編譯工具不同。本章講解如何構(gòu)建嵌入式。本章講解如何構(gòu)建嵌入式Linux開發(fā)需求的交叉編譯工具開發(fā)需求的交叉編譯工具鏈,主要內(nèi)容如下:鏈,主要內(nèi)容如下:交

2、叉編譯工具鏈引見交叉編譯工具鏈引見手工構(gòu)建交叉編譯工具鏈手工構(gòu)建交叉編譯工具鏈運用腳本構(gòu)建交叉編譯工具鏈運用腳本構(gòu)建交叉編譯工具鏈交叉編譯工具鏈常見的問題交叉編譯工具鏈常見的問題18.1 18.1 什么是交叉編譯什么是交叉編譯交叉編譯是伴隨嵌入式系統(tǒng)的開展而來的,傳統(tǒng)的程交叉編譯是伴隨嵌入式系統(tǒng)的開展而來的,傳統(tǒng)的程序編譯方式,生成的程序直接在本地運轉(zhuǎn),這種編譯方式稱序編譯方式,生成的程序直接在本地運轉(zhuǎn),這種編譯方式稱作本地編譯作本地編譯Native Compilation;嵌入式系統(tǒng)多采用交;嵌入式系統(tǒng)多采用交叉編譯的方式,在本機編譯好的程序是不能在本機運轉(zhuǎn)的,叉編譯的方式,在本機編譯好的程

3、序是不能在本機運轉(zhuǎn)的,需求經(jīng)過特定的手段例如燒寫,下載等安裝到目的系統(tǒng)需求經(jīng)過特定的手段例如燒寫,下載等安裝到目的系統(tǒng)上執(zhí)行。這種編譯運轉(zhuǎn)的方法比較繁瑣,是遭到實踐條件限上執(zhí)行。這種編譯運轉(zhuǎn)的方法比較繁瑣,是遭到實踐條件限制的。大多數(shù)的嵌入式系統(tǒng)目的板系統(tǒng)資源都很有限,無論制的。大多數(shù)的嵌入式系統(tǒng)目的板系統(tǒng)資源都很有限,無論是存儲空間還是是存儲空間還是CPU處置才干,都很難到達編譯程序的要求處置才干,都很難到達編譯程序的要求。而且很多目的板是沒有操作系統(tǒng)的,需求經(jīng)過其他的機器。而且很多目的板是沒有操作系統(tǒng)的,需求經(jīng)過其他的機器編譯操作系統(tǒng)和運用程序。編譯操作系統(tǒng)和運用程序。18.2 18.2

4、需求哪些東西需求哪些東西建立交叉編譯工具鏈可以在多種平臺上進展,本書建建立交叉編譯工具鏈可以在多種平臺上進展,本書建議運用議運用x86體系構(gòu)造的體系構(gòu)造的PC機,在機,在Linux系統(tǒng)下進展。這種選系統(tǒng)下進展。這種選擇不是強迫的,是由于擇不是強迫的,是由于x86體系構(gòu)造是運用最廣泛的。同時體系構(gòu)造是運用最廣泛的。同時,運用,運用Linux系統(tǒng)可以防止許多開發(fā)環(huán)境的設置。建立交叉系統(tǒng)可以防止許多開發(fā)環(huán)境的設置。建立交叉編譯工具鏈需求以下的預備:編譯工具鏈需求以下的預備:磁盤空間:磁盤空間:源代碼:源代碼:命令行:命令行:其他工具:其他工具:18.3 18.3 手工創(chuàng)建工具鏈手工創(chuàng)建工具鏈構(gòu)建交叉

5、編譯器首先是確定目的平臺。在構(gòu)建交叉編譯器首先是確定目的平臺。在GNU系統(tǒng),系統(tǒng),每個目的平臺都有一個明確的格式和稱號,這些信息可以在每個目的平臺都有一個明確的格式和稱號,這些信息可以在構(gòu)建工具的過程中識別工具的正確版本。由于編譯交叉工具構(gòu)建工具的過程中識別工具的正確版本。由于編譯交叉工具鏈的過程中會有兩套編譯器環(huán)境,明確了平臺稱號和格式才鏈的過程中會有兩套編譯器環(huán)境,明確了平臺稱號和格式才干保證生成工具不出錯。干保證生成工具不出錯。在運轉(zhuǎn)在運轉(zhuǎn)gcc的時候,的時候,gcc會在途徑中查找包含指定目的規(guī)會在途徑中查找包含指定目的規(guī)范的運用程序途徑。范的運用程序途徑。GNU的目的規(guī)范格式為的目的規(guī)

6、范格式為CPU-PLATFORM-OS。如。如x86目的機稱號是目的機稱號是i686-pc-linux-gnu,ARM目的平臺稱號是目的平臺稱號是arm-linux-gnu。構(gòu)建交叉工具鏈通常。構(gòu)建交叉工具鏈通常有以下有以下3種方法:種方法:1分步驟手工編譯分步驟手工編譯2經(jīng)過腳本編譯經(jīng)過腳本編譯3直接獲取交叉編譯工具鏈直接獲取交叉編譯工具鏈18.3.1 18.3.1 預備任務預備任務- -獲取源代碼獲取源代碼手工編譯交叉編譯工具鏈需求編譯用到的庫和源代碼手工編譯交叉編譯工具鏈需求編譯用到的庫和源代碼,首先是下載如下源代碼:,首先是下載如下源代碼:Linux內(nèi)核代碼內(nèi)核代碼glibc庫庫工具程

7、序工具程序內(nèi)核線程包內(nèi)核線程包編譯器編譯器18.3.2 18.3.2 開場了開場了- -建立任務環(huán)境建立任務環(huán)境構(gòu)建交叉編譯工具鏈需求建立一個任務環(huán)境,包括建構(gòu)建交叉編譯工具鏈需求建立一個任務環(huán)境,包括建立任務目錄和環(huán)境變量。任務目錄是交叉編譯工具鏈構(gòu)建過立任務目錄和環(huán)境變量。任務目錄是交叉編譯工具鏈構(gòu)建過程中運用的目錄,任務目錄沒有特殊要求,用戶可以根據(jù)本程中運用的目錄,任務目錄沒有特殊要求,用戶可以根據(jù)本人的喜好建立。本書假定在當前用戶的用戶目錄下建立一個人的喜好建立。本書假定在當前用戶的用戶目錄下建立一個armtools作為任務目錄。作為任務目錄。mkdir armtools18.3.3

8、 18.3.3 建立建立linuxlinux內(nèi)核頭文件內(nèi)核頭文件交叉編譯器需求經(jīng)過內(nèi)核頭文件獲取目的平臺支持的系統(tǒng)交叉編譯器需求經(jīng)過內(nèi)核頭文件獲取目的平臺支持的系統(tǒng)函數(shù)調(diào)用的信息。因此,需求拷貝內(nèi)核的頭文件。但是,直接函數(shù)調(diào)用的信息。因此,需求拷貝內(nèi)核的頭文件。但是,直接拷貝內(nèi)核頭文件是不行的,還需求對內(nèi)核做簡單的配置,讓內(nèi)拷貝內(nèi)核頭文件是不行的,還需求對內(nèi)核做簡單的配置,讓內(nèi)核腳本生成目的平臺的頭文件。需求留意的是,核腳本生成目的平臺的頭文件。需求留意的是,Linux內(nèi)核版內(nèi)核版本和編譯器版本依賴比較強,一個版本的編譯器不能保證編譯本和編譯器版本依賴比較強,一個版本的編譯器不能保證編譯一切內(nèi)

9、核版本。一切內(nèi)核版本。1首先在首先在$PRJROOT/kernel目錄下解緊縮內(nèi)核源代碼目錄下解緊縮內(nèi)核源代碼2接下來進入內(nèi)核代碼目錄配置目的平臺的頭文件:接下來進入內(nèi)核代碼目錄配置目的平臺的頭文件:3Linux內(nèi)核配置的頂層界面,按照功能劃分分成假內(nèi)核配置的頂層界面,按照功能劃分分成假設干項,與生成目的平臺頭文件相關(guān)的是設干項,與生成目的平臺頭文件相關(guān)的是System Type項。運項。運用光標鍵挪動到該選項,回車進入配置界面。用光標鍵挪動到該選項,回車進入配置界面。4目的平臺選擇終了后,直接回車,回到了系統(tǒng)類型目的平臺選擇終了后,直接回車,回到了系統(tǒng)類型配置界面。配置界面。5配置內(nèi)核終了后

10、,檢查能否生成正確的內(nèi)核頭文件配置內(nèi)核終了后,檢查能否生成正確的內(nèi)核頭文件include/linux/version.h和和include/linux/autoconf.h,這兩個文件,這兩個文件是編譯是編譯glibc需求的。需求的。6最后一步是把生成的內(nèi)核頭文件復制到交叉編譯工最后一步是把生成的內(nèi)核頭文件復制到交叉編譯工具鏈目錄。具鏈目錄。18.3.4 18.3.4 編譯安裝編譯安裝binutilsbinutilsbinutils是交叉編譯工具鏈里一個重要的工具包,由是交叉編譯工具鏈里一個重要的工具包,由GNU提供。提供。binutils包括了銜接器、匯編器和用于目的文件包括了銜接器、匯編器

11、和用于目的文件和檔案的工具。和檔案的工具。binutils工具包主要針對二進制代碼的維護工具包主要針對二進制代碼的維護。1binutils工具包內(nèi)容工具包內(nèi)容2編譯安裝編譯安裝binutils工具包工具包18.3.5 18.3.5 編譯安裝編譯安裝gccgcc的的c c編譯器編譯器這一步建立這一步建立arm-linux-gcc交叉編譯器,但是這個交叉編譯器,但是這個gcc編編譯器是沒有譯器是沒有g(shù)libc庫支持的。也就是說,此編譯器只能用于編庫支持的。也就是說,此編譯器只能用于編譯內(nèi)核、譯內(nèi)核、Bootloader等不需求等不需求glibc庫支持的程序。庫支持的程序。glibc庫也庫也要運用此

12、編譯器,所以創(chuàng)建這個編譯器確切的說是為了建立要運用此編譯器,所以創(chuàng)建這個編譯器確切的說是為了建立glibc庫。有的文檔把這個步驟叫做庫。有的文檔把這個步驟叫做gcc的第一次編譯,這是的第一次編譯,這是相對后面的編譯過程講的。相對后面的編譯過程講的。18.3.6 18.3.6 編譯安裝編譯安裝glibcglibc庫庫GNU glibc庫是庫是Linux系統(tǒng)程序非常重要的組成部分。系統(tǒng)程序非常重要的組成部分。假設用戶開發(fā)目的平臺的運用程序,那么必需編譯安裝假設用戶開發(fā)目的平臺的運用程序,那么必需編譯安裝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 最后的任務最后的任務到目前為止,曾經(jīng)完成了分步驟構(gòu)建交叉工具鏈的一到目前為止,曾經(jīng)完成了分步驟構(gòu)建交叉工具鏈的一切任務。最后還需求測試一下構(gòu)建的工具鏈能否符合要求。切任務。最后還需求測試一下構(gòu)建的工具鏈能否符合要求。18.4 18.4 運用腳本創(chuàng)建工具鏈運用腳本創(chuàng)建工具鏈手工構(gòu)建交叉編譯工具鏈不僅步驟繁瑣,而且容易出手工構(gòu)建交叉編譯工具鏈不僅步驟繁瑣,而且容易出錯。為了簡化構(gòu)建工具鏈的過程,減小出錯,錯。為了簡化構(gòu)建工具鏈的過程,減小出錯,Linux社區(qū)設社區(qū)設計了一套編譯工具鏈的腳本計了一套編譯工具鏈的腳本Crosstool。Crosstool

15、是一組建立是一組建立交叉編譯環(huán)境的腳步工具,經(jīng)過指定不同參數(shù),交叉編譯環(huán)境的腳步工具,經(jīng)過指定不同參數(shù),Crosstool腳腳本可以建立指定版本的本可以建立指定版本的gcc編譯器和編譯器和glibc程序庫。該腳本也程序庫。該腳本也是一個開源工程,讀者假設出于任務需求建議運用是一個開源工程,讀者假設出于任務需求建議運用crosstools構(gòu)建交叉編譯工具鏈。構(gòu)建交叉編譯工具鏈。18.5 18.5 更簡便的方法更簡便的方法 - - 獲取已編譯好的交叉編譯獲取已編譯好的交叉編譯環(huán)境環(huán)境以上兩節(jié)講的構(gòu)建交叉編譯工具鏈的方法都需求手工干涉以上兩節(jié)講的構(gòu)建交叉編譯工具鏈的方法都需求手工干涉。本節(jié)引見一種更

16、簡便的方法,直接下載曾經(jīng)編譯好的工具鏈。本節(jié)引見一種更簡便的方法,直接下載曾經(jīng)編譯好的工具鏈。Linux社區(qū)提供了多個版本的社區(qū)提供了多個版本的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 小結(jié)小結(jié)本章講解了搭建嵌入式本章講解了搭建嵌入式Linux開發(fā)環(huán)境最關(guān)鍵的技術(shù)開發(fā)環(huán)境最關(guān)鍵的技

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論