新聞中心
隨著物聯(lián)網(wǎng)時(shí)代的到來(lái),越來(lái)越多的嵌入式設(shè)備需要使用ARM處理器來(lái)支持各種功能。而針對(duì)ARM處理器的嵌入式Linux也因此日益增多。那么,如何在自己的PC機(jī)上編譯能夠運(yùn)行在ARM處理器上的應(yīng)用程序呢?本文將為大家介紹一些。

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括靈寶網(wǎng)站建設(shè)、靈寶網(wǎng)站制作、靈寶網(wǎng)頁(yè)制作以及靈寶網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,靈寶網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到靈寶省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
一、交叉編譯的概念
交叉編譯是指在一個(gè)計(jì)算機(jī)架構(gòu)下編譯出在另一種計(jì)算機(jī)架構(gòu)上運(yùn)行的程序。由于不同架構(gòu)的CPU指令集不同,在源代碼完成后,在本機(jī)上直接編譯運(yùn)行是無(wú)法在其他架構(gòu)的CPU上運(yùn)行的。
二、所需工具
Linux開(kāi)發(fā)環(huán)境:本文以Ubuntu 16.04 LTS操作系統(tǒng)為例。
交叉編譯工具:本文以arm-linux-gnueabihf為例。
目標(biāo)開(kāi)發(fā)板:本文以樹(shù)莓派3B開(kāi)發(fā)板為例,此開(kāi)發(fā)板使用BCM2837芯片,內(nèi)置ARM Cortex-A53處理器。
三、配置環(huán)境
1.添加交叉編譯工具的路徑
在~/.bashrc文件中添加以下語(yǔ)句:
export PATH=$PATH:/usr/local/arm/arm-linux-gnueabihf/bin
2.安裝相關(guān)庫(kù)
使用以下命令進(jìn)行安裝:
sudo apt-get install libncurses5-dev
sudo apt-get install gcc-arm-linux-gnueabihf
3.構(gòu)建目標(biāo)文件系統(tǒng)
從網(wǎng)絡(luò)上下載樹(shù)莓派官方的Raspbian系統(tǒng),使用以下命令進(jìn)行解壓:
sudo dd bs=4M if=Downloads/2023-04-08-raspbian-stretch-full.img of=/dev/sdb conv=fsync
其中,/dev/sdb表示你的SD卡設(shè)備。注意:該命令會(huì)清空SD卡上的所有數(shù)據(jù),請(qǐng)確認(rèn)后再操作。
4.編寫(xiě)源代碼
編寫(xiě)一段簡(jiǎn)單的c程序,例如:
#include
int mn()
{
printf(“Hello World!\n”);
return 0;
}
5.編譯源代碼
使用以下命令進(jìn)行編譯:
arm-linux-gnueabihf-gcc test.c -o test
6.傳輸文件
使用以下命令將生成的test文件傳輸至目標(biāo)板:
scp test [email protected]:/home/pi
其中,192.168.1.105為目標(biāo)板的IP地址,pi為目標(biāo)板的用戶(hù)名。
7.在目標(biāo)板執(zhí)行程序
在目標(biāo)板上執(zhí)行以下命令:
./test
如能輸出”Hello World!”,則說(shuō)明交叉編譯成功。
四、常用交叉編譯選項(xiàng)
1.使用-D選項(xiàng)生成預(yù)處理輸出文件
arm-linux-gnueabihf-gcc -DDEBUG test.c -o test
2.使用-l選項(xiàng)連接共享庫(kù)
arm-linux-gnueabihf-gcc test.c -o test -lncurses
3.使用-I選項(xiàng)指定頭文件目錄
arm-linux-gnueabihf-gcc test.c -I/usr/local/arm/ncurses/include/ -o test
五、小結(jié)
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
arm-linux-gcc交叉編譯器的制作,以及版本選擇問(wèn)題。
,需要必須有足夠動(dòng)經(jīng)驗(yàn)來(lái)支持。
另外,用 RH9 的都是高手,我想你的知識(shí)不需要來(lái)提問(wèn)了吧?
1、在 PC 上編譯 arm 的程序當(dāng)然需要較差編譯器,這個(gè)需要自己安裝,或者著現(xiàn)成的交叉編譯器環(huán)境,一般是一個(gè)特殊參數(shù)編譯出來(lái)的 gcc + binutils + glibc + linux-header。這個(gè)每個(gè)人動(dòng)環(huán)境不同,一般都需要自己編譯一個(gè),當(dāng)然沒(méi)有特殊需求,也可以找現(xiàn)成的。不過(guò)很難找,因?yàn)檫@套環(huán)境還要和你動(dòng)系統(tǒng)搭配,不然環(huán)境不匹配,連這個(gè)環(huán)境都不能運(yùn)行,那就更談不上編譯東西了。
有關(guān)自己編譯搭建交叉編譯環(huán)境,可以看看一個(gè)特殊的 Linux 發(fā)行版 LFS 的分支: CLFS 。
2、移植分很多意思,移植有可能就意味著這套源代碼不能在目標(biāo)系統(tǒng)上面編譯,需要你根據(jù)相應(yīng)的知識(shí)去修改源代碼來(lái)讓這套代碼適應(yīng)目標(biāo)編譯器的要求,比如源代碼有 SSE4 的優(yōu)化,這套程序在非 SSE4 CPU 上無(wú)法編譯運(yùn)行,但目標(biāo)機(jī)器連 SSE1 都不支持。那么就需要移植。
或者移植僅僅是根據(jù)新的環(huán)境進(jìn)行編譯,不需要進(jìn)行源代碼修改,只需要進(jìn)行一下編譯就能運(yùn)行的程序,也可以稱(chēng)為移植,就是從一個(gè)環(huán)境、架構(gòu) -》另一個(gè)環(huán)境、架構(gòu)。都可以稱(chēng)為移植,但真正的移植意味著修改程序源代碼來(lái)適應(yīng)新環(huán)境。你說(shuō)的這種移植是最簡(jiǎn)單的移植。
3、決定目標(biāo)硬件環(huán)境 -》搭建目標(biāo)編譯器 -》制作目標(biāo)環(huán)境(內(nèi)核,基礎(chǔ)軟件庫(kù))-》進(jìn)行應(yīng)用移植(移植需要的軟件、主應(yīng)用程序)-》搭建系統(tǒng)文件系統(tǒng) -》導(dǎo)入目標(biāo)系統(tǒng)-》啟動(dòng)目標(biāo)系統(tǒng)&應(yīng)用。說(shuō)起來(lái)很簡(jiǎn)單,因?yàn)檫@是完全沒(méi)有問(wèn)題的條件下。
至于超級(jí)終端。那是用來(lái)控制目標(biāo)系統(tǒng)的。目標(biāo)系統(tǒng)有可能不能插鍵盤(pán)鼠標(biāo)顯示器,這就需要一個(gè)遠(yuǎn)程網(wǎng)絡(luò)鏈接來(lái)進(jìn)行控制。以及通過(guò)遠(yuǎn)程鏈接來(lái)發(fā)送數(shù)據(jù)。這都需要終端的支持。
虛擬機(jī)下面進(jìn)行開(kāi)發(fā),不能發(fā)揮你的計(jì)算機(jī)的性能。而且因?yàn)楦糁?VMware 的軟件模擬層,可能還不會(huì)很方便的讓你鏈接目標(biāo)設(shè)備。
至于用 socket ,我還沒(méi)見(jiàn)到你的目標(biāo)需要這個(gè)東西,因?yàn)樗械臇|西都是現(xiàn)成的源代碼。不需要你從 0 開(kāi)始寫(xiě),當(dāng)然你想自己寫(xiě)一個(gè)系統(tǒng)內(nèi)核,或者服務(wù)器程序,或者的系統(tǒng)+應(yīng)用,我絕對(duì)不攔你,但希望你寫(xiě)完這套東西,能把源代碼發(fā)布出來(lái)。
ads 可以認(rèn)為是一個(gè)支持環(huán)境,他本身不是一個(gè)系統(tǒng)的開(kāi)發(fā) SDK 。
ads 沒(méi)用過(guò),印象里他還有模擬器,調(diào)試器什么的程序。功能上要比 Linux 開(kāi)發(fā)環(huán)境,WinCE 環(huán)境下面的東西更多更偏向于硬件方面,畢竟 ads 是 arm 出品的,不太可能偏向于軟件部分設(shè)計(jì)。Linux 和 WinCE 都是系統(tǒng)而不是硬件工具。
你可以認(rèn)為交叉編譯器是一個(gè)應(yīng)用程序,一個(gè)輸出器。把源代碼輸出為 arm 的代碼,這個(gè)應(yīng)用程序的輸出,是靠他自己的環(huán)境,而不是當(dāng)前系統(tǒng)的環(huán)境的。
當(dāng)前系統(tǒng)的各個(gè)軟件的版本,不能影響交叉編譯器輸出的環(huán)境(理論上,現(xiàn)實(shí)有的時(shí)候總是從別的地方給你打擊……),交叉編譯器一般至少有 gcc 、binutils 、glibc 庫(kù)、linux kernel 頭文件。
在軟件需求上。
頭文件誰(shuí)都不依賴(lài),glibc 只需要內(nèi)核頭文件,其他程序全都依賴(lài)于 glibc 。也就是所有程序都不依賴(lài)內(nèi)核,僅僅是依賴(lài)于內(nèi)核頭文件。
gcc 和 binutils 是把程序源代碼根據(jù)上面各個(gè)環(huán)節(jié)的需提供的功能來(lái)輸出為上面環(huán)節(jié)里面的二進(jìn)制程序。依賴(lài)你當(dāng)前環(huán)境的,只有 gcc 和 binutils 兩個(gè)程序的執(zhí)行、控制環(huán)節(jié)。只有他們兩個(gè)依賴(lài)的,而不是你的交叉編譯后的程序。
至于編譯器版本的選擇,新版本功能更好,舊版本兼容更好。
這個(gè)要看你的實(shí)際需要了。應(yīng)用程序源代碼也調(diào)編譯器的,同時(shí)也依賴(lài)于軟件庫(kù)的功能。
arm 開(kāi)發(fā)建議穩(wěn)定、兼容優(yōu)先。當(dāng)然也可以嘗試最新的編譯環(huán)境,來(lái)獲取更好的優(yōu)化(前提是還有什么代碼優(yōu)化的話)。
另外,團(tuán)IDC網(wǎng)上有許多產(chǎn)品團(tuán)購(gòu),便宜有口碑
arm-linux-gcc-3.4.5我一直在用,之前3.3.2只能編譯2.6的內(nèi)核,不能編譯bootloader,4.3.3關(guān)于內(nèi)核,和bootloader限制不大了,都可以編譯
關(guān)于arm linux交叉編譯的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱(chēng)為香港虛擬空間/香港網(wǎng)站空間,或者簡(jiǎn)稱(chēng)香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開(kāi)通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問(wèn)快、穩(wěn)定!
網(wǎng)站標(biāo)題:簡(jiǎn)單易學(xué)的ARMLinux交叉編譯入門(mén)指南(armlinux交叉編譯)
網(wǎng)頁(yè)網(wǎng)址:http://fisionsoft.com.cn/article/coidcoj.html
其他資訊
- 創(chuàng)新互聯(lián)Python教程:Python邏輯運(yùn)算符及其用法
- 利用Linux實(shí)現(xiàn)高效的文件去重復(fù)功能并建立數(shù)據(jù)庫(kù)(linux文件去重復(fù)數(shù)據(jù)庫(kù))
- 域名已經(jīng)備案成功,為什么訪問(wèn)依然提示沒(méi)有備案?(不添加新網(wǎng)站備案申請(qǐng)恢復(fù)至上次通過(guò)狀態(tài))
- 美國(guó)Linux服務(wù)器系統(tǒng)安裝圖形化界面的辦法
- 如何使用Redis存取數(shù)據(jù)的實(shí)例示例(往redis里存數(shù)據(jù)實(shí)例)


咨詢(xún)
建站咨詢(xún)
