當前位置:首頁 » 編程軟體 » 嵌入式交叉編譯環境搭建

嵌入式交叉編譯環境搭建

發布時間: 2025-04-07 12:23:52

1. 如何建立針對arm-linux的交叉編譯環境

採用交叉編譯的主要原因在於,多數嵌入式目標系統不能提供足夠的資源供編譯過程使用,因而只好將編譯工程轉移到高性能的主機中進行。
linux下的交叉編譯環境重要包括以下幾個部分:
1.對目標系統的編譯器gcc
2.對目標系統的二進制工具binutils
3.目標系統的標准c庫glibc
4.目標系統的linux內核頭文件
交叉編譯環境的建立步驟
一、下載源代碼 下載包括binutils、gcc、glibc及linux內核的源代碼(需要注意的是,glibc和內核源代碼的版本必須與目標機上實際使用的版本保持一致),並設定shell變數PREFIX指定可執行程序的安裝路徑。
二、編譯binutils 首先運行configure文件,並使用--prefix=$PREFIX參數指定安裝路徑,使用--target=arm-linux參數指定目標機類型,然後執行make install。
三、配置linux內核頭文件
首先執行make mrproper進行清理工作,然後執行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)進行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架構,因為預設架構為主機的cpu架構),這一步需要根據目標機的實際情況進行詳細的配置,筆者進行的實驗中目標機為HP的ipaq-hp3630 PDA,因而設置system type為SA11X0,SA11X0 Implementations中選擇Compaq iPAQ H3600/H3700。
配置完成之後,需要將內核頭文件拷貝到安裝目錄: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux
四、第一次編譯gcc
首先運行configure文件,使用--prefix=$PREFIX參數指定安裝路徑,使用--target=arm-linux參數指定目標機類型,並使用--disable-threads、--disable-shared、--enable-languages=c參數,然後執行make install。這一步將生成一個最簡的gcc。由於編譯整個gcc是需要目標機的glibc庫的,它現在還不存在,因此需要首先生成一個最簡的gcc,它只需要具備編譯目標機glibc庫的能力即可。
五、交叉編譯glibc
這一步驟生成的代碼是針對目標機cpu的,因此它屬於一個交叉編譯過程。該過程要用到linux內核頭文件,默認路徑為$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一個名為sys-linux的軟連接,使其內核頭文件所在的include目錄;或者,也可以在接下來要執行的configure命令中使用--with-headers參數指定linux內核頭文件的實際路徑。
configure的運行參數設置如下(因為是交叉編譯,所以要將編譯器變數CC設為arm-linux-gcc): CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 最後,按以上配置執行configure和make install,glibc的交叉編譯過程就算完成了,這里需要指出的是,glibc的安裝路徑設置為$PREFIXARCH=arm/arm-linux,如果此處設置不當,第二次編譯gcc時可能找不到glibc的頭文件和庫。
六、第二次編譯gcc
運行configure,參數設置為--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++。
運行make install。
到此為止整個交叉編譯環境就完全生成了。
幾點注意事項
第一點、在第一次編譯gcc的時候可能會出現找不到stdio.h的錯誤,解決辦法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS變數的設定中增加-Dinhibit_libc和-D__gthr_posix_h。

2. 奼傚姪錛歲t鍦╨inux涓嬶紝宓屽叆寮忎氦鍙夌紪璇戠幆澧冮厤緗錛

絳:1銆佸彲浠2銆丵tCreator鍙鏄涓涓闆嗘垚寮鍙戝伐鍏鳳紝榪欎釜鐗堟湰闅忔剰錛岀綉涓婁笅灝卞彲浠ワ紝Qte涓嶆槸鐢ㄦ渶鏂幫紝鑰屾槸鏈濂界敤璺熶綘鍦↙inux寮鍙板紑鍙戜竴鏍風殑銆

棣栧厛瑕佸湪Linux涓嬩氦鍙夌紪璇慟te鐨勫簱錛岀劧鍚庡啀灝哃ib榪欎簺鏂囦歡縐繪嶅湪鏉垮瓙涓婏紝鏈鍚庨氳繃浜ゅ弶緙栬瘧濂界殑搴撳幓緙栬瘧浣犲湪pc涓婄紪鍐欑殑紼嬪簭錛屾斁鍒版澘瀛愪笂榪愯!鍏充簬浜ゅ弶緙栬瘧QT鐨勬枃絝狅紝緗戜笂鍙浠ユ悳鍒板緢澶氥

3銆乄IN7騫沖彴鐨勪氦鍙夌紪璇戝伐鍏峰畨瑁呮瘮杈冮夯鐑︼紝涓嶆帹鑽愪嬌鐢錛岀洿鎺ュ湪Linux鍘諱笅涓涓鍒浜轟氦鍙夊伐鍏峰寘錛岀洿鎺ヨВ鍘嬪氨濂姐傘

鍘誨弸鍠勭殑瀹樼綉錛屾垨鍏朵粬緗戠珯涓嬭繖綾葷殑宸ュ叿瑙夊緱浣犺佸厛鐞嗚В浠涔堝彨浜ゅ弶緙栬瘧寮鍙!!!!!

3. Ubuntu 嵌入式交叉編譯環境搭建

在一種計算機環境中運行的編譯程序,能編譯出在另外一種環境下運行的代碼,我們就稱這種編譯器支持交叉編譯,這個編譯過程就叫交叉編譯。簡單地說,就是在一個平台上生成另一個平台上的可執行代碼,而這種工具就是交叉編譯器(cross compiler)。

安裝前的絮叨,首先簡單介紹一下,所謂的搭建交叉編譯環境,即安裝、配置交銀叢知叉編譯工具鏈。在該環境下編譯出嵌入式Linux系統所需的操作系統、應用程序等,然後再上傳到目標機上。 交叉編譯工具鏈是為了編譯、鏈接、處理和調試跨平台體系結構的程序代碼。對於交叉開發的工具鏈來說,在文件名稱上加了一個前綴,用來區別本地的工具鏈。例如,arm-linux-表示是對arm的交叉編譯工具鏈;arm-linux-gcc表示是使用gcc的編譯器。除了體系結構相關的編譯選項以外,其使用方法與Linux主機上的gcc相同,所以Linux編程技術對於嵌入式同樣適用。不過,並不是任何一個版本拿來都能用,各種軟體包往往存在版本匹配問題。例如,編譯內核時需要使用arm-linux-gcc-4.3.3版本的交叉編譯工具鏈,而使用arm-linux-gcc-3.4.1的交叉編譯工具鏈,則會導致編譯失敗。 那麼gcc和arm-linux-gcc的區別是什麼呢?區別就是gcc是linux下的C語言編譯器,編譯出來的程序在本地執行,而arm-linux-gcc用來在linux下跨平台的C語言編譯器,編譯出來的程序在目標機(如ARM平台)上執行,嵌入式開發應使用嵌入式交叉編譯工具鏈。

壓縮包arm-linux-gcc-4.4.3.tar.gz存放在一個目錄下,這個目錄就是你等會解壓縮的目錄,以後這個目錄就不能隨便刪掉了,我的存放路徑是 /home/song/software,如下圖,記住這個路徑,等會還會用到。

使用tar命令:tar zxvf arm-gcc-4.4.3.tar.gz將software文件夾下的arm-linux-gcc-4.4.3.tar.gz解壓縮安裝到當前目錄下如下圖

通過下圖可以看鋒消到解壓成功了,並且解壓後的文件存放在了/home/song/software/opt/FriendlyARM/toolschain/4.4.3文件夾下,如下圖所示,這個存放路徑可得記住,如下圖

接下來配置系統環境變數,把交叉編譯工具鏈的路徑添加到環境變數PATH中去,這樣就可以在任何目錄下使用這些工具。記下上一步中的安裝路徑,使用命令:vim /etc/profile 編輯profile文件,添加環境變數。

在profile中最後一行添加:export PATH=$PATH:/home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin這個路徑就是那個bin目錄所在的路徑,可能你的不一樣,按照你實際的目錄填就可以了,如下圖32行, 編寫完退出並保存

使用命令:source /etc/profile 使環境變數生效

在終端上輸入命令arm-linux再按Tab鍵,可以看到下圖,說明環境變數設置成功了

使用命令:arm-linux-gcc -v 會出現下面的錯誤提示:/home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc: 15: exec: /home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueabi-gcc: not found

意思是出現這種問題的原因是由於Ubuntu12.04用的是64位的,解決方法就是使用命令:sudo apt-get install ia32-libs 裝一些32位的庫。

待安裝完32位的庫之後,再使鄭鎮用命令:arm-linux-gcc -v,這一次就成功了,如下圖

驗證,編譯一個hello.c文件

使用命令:arm-linux-gcc hello.c -o hello 看是否編譯成功 可見成功生成了二進制文件。

總結:其實在安裝過程中,會出現各種各樣的錯誤,一般就是庫文件安裝不完整,大家可以把錯誤信息直接復制,到網上搜索一下,一般都能解決,這里希望大家在學習Linux時多一點耐心。

4. 如何利用Eclipse C/C++搭建嵌入式ARM開發環境

由於覺得在Linux下不方便編寫代碼,所以准備在windows上搭建開發環境,其實在Linux上也搭建好了,但是使用起來不是很人性化,尤其是文件比較多的時候就很麻煩。下面就選擇在windows上用Eclipse做開發。【後來發現還是需要在Linux下編程,因為Windows下沒法包含Linux下的一些頭文件,所以下面也介紹Linux環境下的Eclipse搭建】。

Windows下的Eclipse環境搭建:

1. 下載並安裝Eclipse C/C++

2. 下載交叉編譯器,之前在Linux都用的arm-linux-gcc,後來使用TI的ti-sdk-am335x-evm-08開發包,裡面安裝的編譯器是arm-none-linux-gnueabi-gcc,都是能用的,所以我也選擇了arm-none-linux-gnueabi-gcc作為交叉編譯器,下載windows平台的編譯器,然後安裝。

下載地址:http://www.veryarm.com/arm-none-linux-gnueabi-gcc

3. 開啟Eclipse的ssh遠程登錄功能,我分別開啟了Beaglebone Black和Linux的ssh terminal,操作起來很是方便。

4. 新建C項目工程「hello」,編寫簡單的hello代碼,注意選擇交叉編譯選項,交叉編譯器前綴「arm-none-linux-gnueabi-」交叉編譯器路徑選擇arm-none-linux-gnueabi-gcc安裝的路徑「…Linuxin」,在此文件夾下有arm-none-linux-gnueabi-gcc.exe、arm-none-linux-gnueabi-gdb.exe等,還有cs-make.exe,這里需要把「cs-make.exe」改成「make.exe」,因為Eclipse不認cs-make.exe編譯的時候會報錯的。

圖文安裝參考:http://www.linuxidc.com/Linux/2016-03/129577.htm

5. 調試(構建Ctrl+B)的時候會自動生成makefile,生成編譯結果,放到ARM嵌入式平台運行就可以了,成功執行並輸出「hello」。

Linux下的Eclipse環境搭建:

官網下載http://www.eclipse.org/downloads/

發下是收費的

sudo apt-get install eclipse直接就安裝了

然後sudo eclipse –s啟動後發現「窗口->打開視圖」裡面沒有ssh遠程登錄的選項,網路一下發現它是Eclipse的插件,查詢下這個軟體:sudo apt-cache search Remote System Explorer,發現一個eclipse-rse,就是它了,然後直接安裝:sudo apt-get install eclipse-rse

重啟eclipse

新建工程時發現沒有C/C++工程,只有Java工程,再次搜索sudo apt-cache search eclipse C/C++

發現其中一條:

eclipse-cdt - C/C++ Development Tools for Eclipse

繼續安裝:

sudo apt-get install eclipse-cdt

再次重啟eclipse,就有了C/C++項目,高興ing。

新建C工程,添加編譯器:

arm-none-linux-gnueabi-

/opt/toolschain/4.4.3/bin

編寫hello程序,編譯OK,在BBB上執行,成功!

5. CMake搭建編譯環境總結

目錄


前言
交叉編譯環境搭建是嵌入式開發者面對的常見挑戰,主要涉及在目標平台(如Arm板)上編譯代碼的過程。常見的編譯工具包括Makefile和CMake。本文將總結CMake在搭建編譯環境時的常用技巧。

入門案例:單個源文件


代碼路徑: 代碼路徑鏈接

工程結構


在開始使用CMake之前,需要構建工程結構,包括文件、目錄和CMakeLists.txt文件。


工程編譯


完成CMakeLists.txt文件編寫後,執行cmake命令(指定路徑),然後使用make命令編譯。


多個源文件


代碼路徑: 代碼路徑鏈接

工程結構


當工程包含多個文件和目錄時,使用一個CMakeLists.txt文件可能難以維護。因此,建議按照模塊結構,為每個主要模塊創建單獨的CMakeLists.txt文件,將文件和目錄按層次嵌套管理。


優點


頂層CMakeLists.txt負責設置工程屬性、交叉工具和包含子路徑的CMakeLists.txt文件。子路徑下的CMakeLists.txt主要關注編譯文件的路徑、目標生成路徑和編譯目標。


配置示例


配置頂層CMakeLists.txt時,應包含工程屬性、交叉工具設置和包含子路徑的CMakeLists文件。子路徑下的CMakeLists.txt應關注頭文件路徑、目標生成路徑和編譯目標。


其他用法


配置局部變數、設置全局變數、獲取全局變數、指定目標輸出路徑、設置環境變數等。


環境設置和編譯器配置


設置環境變數、編譯器路徑、依賴庫路徑、頭文件路徑、編譯器編譯選項、CMakeLists路徑嵌套等。


編譯警告和報錯設置


使用GCC設置編譯警告和報錯選項,例如打開所有警告並將其視為錯誤。


交叉編譯環境設置


配置默認庫、頭文件搜索路徑、交叉編譯工具鏈、浮點運算處理方式、動態庫編譯、靜態庫編譯和可執行文件編譯。


6. 嵌入式ARM linux操作系統中如何構建交叉開發環境

這個問題相當專業了,之前我去周立功那邊了解過的。

按照以下步驟進行安裝:

1) 安裝32位的兼容庫和libncurses5-dev庫

在安裝交叉編譯工具之前需要先安裝32位的兼容庫和libncurses5-dev庫,安裝32兼容庫需要從ubuntu的源庫中下載,所以需要在Linux主機系統聯網的條件下,通過終端使用如下命令安裝:

vmuser@Linux-host ~$sudo apt-get install ia32-libs

若Linux主機系統沒有安裝32位兼容庫,在使用交叉編譯工具的時候可能會出現錯誤:

-bash: ./arm-fsl-linux-gnueabi-gcc: 沒有那個文件或目錄

在終端中使用如下命令則可以安裝libncurses5-dev庫。

vmuser@Linux-host ~$sudo apt-get install libncurses5-dev

如果沒有安裝此庫,在使用make menucofig時出現如下所示的錯誤:

*** Unableto find the ncurses libraries or the

*** required headerfiles.

*** 'makemenuconfig' requires the ncurses libraries.

***

Installncurses (ncurses-devel) and try again.

***

make[1]: *** [scripts/kconfig/dochecklxdialog] 錯誤 1

make: *** [menuconfig] 錯誤 2

2) 安裝交叉編譯工具鏈

將交叉編譯工具「gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2」文件通過U盤的方式拷貝到Linux主機的「/tmp」目錄下,然後執行如下命令進行解壓安裝交叉編譯工具鏈:

vmuser@Linux-host ~$ cd /tmp

vmuser@Linux-host ~$ sudo tar -jxvfgcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2 -C /opt/

vmuser@Linux-host /tmp$ # 輸入vmuser用戶的密碼「vmuser」

執行完解壓命令後,交叉編譯工具鏈將被安裝到「/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0」目錄下。交叉編譯器的具體目錄是「/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin」,為了方便使用,還需將該路徑添加到PATH環境變數中,其方法為:修改「/etc/profile」文件,具體操作方法如下:

在終端中輸入如下指令

vmuser@Linux-host ~$ sudo vi /etc/profile # 若提示輸入密碼,則輸入「vmuser」

用vi編輯器打開「/etc/profile」文件後,在文件末尾增加如下一行內容:

export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin

文件修改並保存後,再在終端中輸入如下指令,更新環境變數,使設置生效。

vmuser@Linux-host ~$source /etc/profile

在終端輸入arm-fsl-linux-gnueabi-並按TAB鍵,如果能夠看到很多arm-fsl-linux-gnueabi-前綴的命令,則基本可以確定交叉編譯器安裝正確,如下圖所示。

熱點內容
蘭州win10ftp伺服器託管 發布:2025-04-07 21:46:32 瀏覽:743
android視頻編碼 發布:2025-04-07 21:43:56 瀏覽:492
ice伺服器被炸之前長什麼樣子 發布:2025-04-07 21:39:34 瀏覽:826
資料庫軟體開發 發布:2025-04-07 21:38:41 瀏覽:323
中石化優化專區伺服器是什麼意思 發布:2025-04-07 21:25:03 瀏覽:371
怎麼清理手機usb存儲器 發布:2025-04-07 21:20:23 瀏覽:817
怎麼打開系統配置 發布:2025-04-07 21:17:19 瀏覽:704
家庭風險規劃怎麼配置 發布:2025-04-07 21:13:09 瀏覽:369
如何用雲伺服器看國外 發布:2025-04-07 21:13:07 瀏覽:458
寶寶玩編程 發布:2025-04-07 20:56:12 瀏覽:704