開發板和交叉編譯哪個好
㈠ arm-none-linux-gnueabi交叉工具鏈與arm-linux-gcc 有區別嗎
eabi標準的要好些,可能arm-linux-gcc就是arm-none-linux-gnueabi的一個鏈接
終於,郁悶已久的問題攻破了,用了三種配置交叉編譯的方法,最終在開發板上實現成功了,現在想一想,有的時候真的也是運氣。
之前已經試驗過使用arm-linux-gcc-3.4.1配置交叉編譯編譯環境,配置成功了,在開發板上失敗了~
後來使用腳本創建交叉編譯環境(crosstool-0.43),配置成功了(這個用了相當長的時間),在開發板上失敗了~
終於,在一個偶然的機會(其實是瀏覽無數網頁後),我終於找到了一個好的方法,並成功在開發板上運行。先說一下網上的一些方法,有些所謂的默認安裝了一些程序,但是在實際運行時發現根本沒有安裝,而且很多地方不知道該如何安裝。再有就是文章一上來就說安裝什麼什麼軟體,但是在網上搜根本找不到。只能說很多人只轉載文章,根本沒有試驗過。但是我還是幸運的找到了一個靠譜的文章http://www.adamjiang.com/pukiwiki/index.php?%E7%BC%96%E8%AF%91mini2440%E5%B7%A5%E5%85%B7%E9%93%BE
根據上面的做法,我成功了,在此小做總結。
首先下載工具鏈,幸好這篇文章給出了這個網站,要不還不知道要找多久。
http://www.codesourcery.com/.../arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
70多M很快就下完了,若不是root用戶下,可以將文件解壓到home的某個目錄下。
tar xjvfo arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /home/..../arm
那麼,在這個目錄下會生成一個arm-2008q3文件夾。
更改路徑不用說了,或者臨時或者非臨時。我就直接改~/.bashrc了,在最後加:
export PATH=/usr/local/arm-2008q3/bin:${PATH}
ok~現在使你路徑生效吧:
source ~/.bashrc
再輸入:export CROSS_COMPILE=arm-none-linux-gnueabi-
作用是:當你編譯軟體的時候,Makefile在大多數情況向會取得CROSS_COMPILE所指定的交叉編譯工具。
也可以輸入:export CROSS_COMPILE=/usr/local/arm-2008q3/bin/arm-none-linux-gnueabi-
這種種方法是通過絕對路徑來指定交叉編譯工具,這樣做可以更精確的為交叉編譯定位,同時可以避免很多錯誤。你可以通過下面這樣的例子指定交叉編譯工具的絕對路徑。
現在一切就緒,隨便編譯個hello world.c文件,用arm-none-linux-gnueabi-gcc helloworld.c -o helloworld,生成的helloworld文件通過nfs掛載到板子上。
最最後,在minicom下輸入:./helloworld。
就會顯示你希望見到的輸出了。。。。。。
首先,從下面的地址下載工具鏈
http://www.codesourcery.com/.../arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
等待下載完成後,將工具鏈解壓到/usr/local/目錄,如果你沒有編譯主機上的root許可權的話,你可以將工具鏈解壓到Linux用戶的home目錄中的某個位置(比如${HOME}/bin)
tar xjvfo arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /usr/local
這個操作將會在/usr/local目錄中創建一個么名為arm-2008q3的目錄。
接下來,你需要將這個新進添加的工具鏈的位置添加到PATH變數之中。編譯你的~/.bashrc文件,在其中加入新的PATH變數
export PATH=/usr/local/arm-2008q3/bin:${PATH}
使用source命令在當前shell中啟用這個變化,這樣你就不需要重新登入系統使用新變數了。
source ~/.bashrc
或者直接在shell中使用export對當前shell做同樣的操作。
export PATH=/usr/local/arm-2008q3/bin:${PATH}
如果你並不是bash用戶,你可以修改你使用的shell所對應的環境設置文件,比如,對於zsh來說,您應該修改~/.zsh文件。或者,你需要在每次登入shell後首先運行上面的export操作。
因為在開發主機上進行交叉編譯意味著使用開發主機的能力生成另外一個體系結構上運行的二進制代碼,所以,一般來說,你需要編譯的軟體通常都會接受一個叫做CROSS_COMPILE的變數來指定產生哪個體系結構的代碼。所以,配置工具鏈的最後一個步驟就是設置這個變數。如果你現在使用ls命令查看以下
ls /usr/local/arm-2008q3/bin/
目錄的話,你會看到很多以arm-none-linux-gnueabi-開始的可執行文件,而這個共同的前綴就是你需要的CROSS_COMPILE變數。現在,使用export命令設置環境變數
export CROSS_COMPILE=arm-none-linux-gnueabi-
現在,當你編譯軟體的時候,Makefile在大多數情況向會取得CROSS_COMPILE所指定的交叉編譯工具。當然,前提是,這些交叉編譯工具在你的PATH變數上。還有一種方法是通過絕對路徑來指定交叉編譯工具,這樣做可以更精確的為交叉編譯定位,同時可以避免很多錯誤。你可以通過下面這樣的例子指定交叉編譯工具的絕對路徑。
export CROSS_COMPILE=/usr/local/arm-2008q3/bin/arm-none-linux-gnueabi-
在大多數情況下,你並不需要將上面的export命令加入~/.bashrc這樣的文件,因為,你並不總是需要它們來做交叉編譯。比如,你僅僅希望編譯運行在開發主機上的程序時。
這樣,工具鏈就准備好了。
㈡ qt嵌入式環境環境搭建,編譯出來的嵌入式庫放哪兒PC里還是開發板上
親,
您最初的想法是正確的,x86平台的庫放在電腦上即可。
而通過arm-linux-交叉編譯工具鏈編譯過的庫,是需要放在
開發板的文件系統裡面的,通用的做法一般是放在/lib或者/usr/lib
目錄裡面即可。或者也可放在其他目錄中,但是需要配置一下LD_LIBRARY_PATH
環境變數。例如放在/home/qtlib目錄中,由於這個不是系統默認的動態庫目錄,
需要設置環境變數LD_LIBRARY_PATH,在/etc/profile下面添加:
export LD_LIBRARY_PATH=/home/qtlib:$LD_LIBRARY_PATH
這是我以前移植qt寫的文檔,希望能有所幫助
http://hi..com/bolin_tron/item/b806c5194cebce0fe75c3669
Enjoy!
㈢ 如何交叉編譯開源庫
所謂的搭建交叉編譯環境,即安裝、配置交叉編譯工具鏈。在該環境下編譯出嵌入式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平台)上執行,嵌入式開發應使用嵌入式交叉編譯工具鏈。
工具/原料
電腦系統:win7系統。虛擬機系統:workstation6.5 。虛擬機安裝的linux版本:fedora9.0。內核:linux2.6.25 。
方法/步驟
1
我使用的交叉編譯工具鏈是arm-linux-gcc-4.4.3,把它放在linux系統的路徑是圖一
2
在linux系統的路徑/home/song/share下放了交叉編譯工具鏈arm-linux-gcc-4.4.3的壓縮包,另一個版本的不用。有的人可能會問到怎麼把這個壓縮包弄到虛擬機的linux的系統的,我是通過samba服務從主機復制到虛擬機的,這里的share文件夾就是我samba伺服器的工作目錄,多了不說,這不是重點。
然後通過命令mkdir embedded 建立一個arm-linux-gcc的安裝目錄,如圖二所示。當然安裝路徑和目錄名稱「embedded」可以依自己的喜好而定。
步驟閱讀
然後通過命令將share文件夾下的arm-linux-gcc-4.4.3.tar.gz復制到這里的embedded文件夾下, 當然這里你也可以不進行這一步我這是為了方便以後管理,將arm-linux-gcc安裝到embedded文件夾下,方便以後尋找。
然後使用tar命令:tar zxvf arm-gcc-4.4.3.tar.gz將embedded文件夾下的arm-linux-gcc-4.4.3.tar.gz解壓縮安裝到當前目錄下
執行完解壓縮命令,就已經將交叉編譯工具鏈arm-linux-gcc-4.4.3安裝到linux系統上了,這里默認安裝到了圖六所示的路徑上。
接下來配置系統環境變數,把交叉編譯工具鏈的路徑添加到環境變數PATH中去,這樣就可以在任何目錄下使用這些工具。 vi /etc/profile 編輯profile文件,添加環境變數。
在profile中的位置處,添加圖八所示的紅線標注的一行,路徑就是圖六中的紅線標注的路徑後面加上/4.4.3/bin。
圖八中的路徑一定是你自己的安裝路徑,可以使用pwd命令查找一下那個bin目錄的路徑。添加完路徑後,保存退出。接下來使用命令:source /etc/profile,是修改後的profile文件生效,如圖九所示。
然後,使用命令:arm-linux-gcc -v查看當前交叉編譯鏈工具的版本信息,如圖九中的紅線標注第③行所示。很明顯 可以看到,如果不執行第②步,則查看版本信息不成功。
然後驗證交叉編譯工具鏈是否安裝成功並且可以使用,如圖九所示,隨便找一個目錄編輯一個hello源代碼。
編輯好hello.c文件後,保存退出。然後使用交叉編譯器對hello.c進行編譯,並生成可執行文件hello
這里生成的hello文件並不能像gcc編譯出來的文件那樣直接使用「./hello」命令執行並顯示內容 因為它是一個二進制文件,只能下載到開發板上執行!
至此,搭建交叉編譯環境步驟結束。
㈣ 交叉編譯的主機和開發板系統可以不一樣嗎
(1)交叉編譯器
在主機上用來編譯其它類型機器上可執行代碼的編譯器就叫交叉編譯器,我們進行嵌入式linux的開發主機大部分都是X86,而我們的嵌入式系統的處理器有可能是ARM/MIPS等非X86處理器,這時候就必須使用ARM/MIPS的交叉編譯器才能編譯出在這些處理器上能夠執行的代碼。這里我們使用的是ARM最新的EABI編譯器。
交叉編譯器在編譯的時候,對於浮點運行會預設硬浮點運算FPA(float point architecture),而沒有FPA的CPU,比如三星的2440等,會使用FPE(float point emulation即軟浮點),這樣在速度上就會受到極大限制。使用EABI(embeded application binary interface)則可以對此改善處理。
(2)不修改MAKEFILE來建立編譯環境
將arm-2008q3.tar.bz2拷貝到ubuntu系統的某個目錄,解壓後。使用VI編輯/etc/bash.bashrc,在文件最後加入環境變數設置(註:加bin的含義是交叉編譯器工具目錄):
保存後,用source運行一次該文件,就可以了。
(3)gcc: error trying to exec 'cc1': execvp: No such file or directory 的解決
今天在編譯開發板環境時,明明設置好編譯器的環境變數了,編譯時就是會出現:gcc: error trying to exec 'cc1': execvp: No such file or directory 錯誤提示。後來發現一個方法可以解決,輸入:whereis gcc,就可以了發現好幾個gcc,包括/usr/bin/gcc,所以我就把PATH路徑設過去,就OK了。
(4)Clock skew detected. Your build may be incomplete
如果你裝了Windows Linux雙系統,系統時間很可能出問題,從而造成文件修改時間比系統時間晚,兩種辦法:
1,應該是你的PC的系統時鍾錯誤,在BIOS中修改正確。
2,使用touch命令將所有文件的時間戳修改為你系統的當前時間。解決方法:find ./-name "*" -exec touch {} \;
㈤ 開發工具,模擬器,燒錄器,編譯器,交叉編譯器到底是什麼關系
房東太多的此長啊,不拉。
開發工具,模擬器,燃燒器,編譯器:開發工具模擬器,燃燒器和編譯器。模擬器只能燒一些簡單的IC,少數還行。燃燒器的程序員更強大的通配符量單一類型的刻錄機其實很簡單,就是你編譯程序寫入片內Flash內的介質燃燒器改造,我從事燒傷,我為自己代言
㈥ 關於嵌入式Linux應用程序的頭文件
一般都在/usr/include,你可以用whereis或者find搜索嘛,運行的時候應該是在開發板的根文件系統上找尋這些已經預編譯好的庫文件,如果開發板上沒有該庫文件,你需要交叉編譯這些庫文件再燒寫到開發板上吧,由於cpu架構不同,台式機的庫文件(已經預編譯好的.o文件)和開發板用的庫文件(*.o)並不通用,你需要自己解決庫文件問題。