交叉編譯就是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。所謂平臺(tái),實(shí)際上包含兩個(gè)概念:體系結(jié)構(gòu)及操作系統(tǒng)。根據(jù)上述建立的開發(fā)環(huán)境,目標(biāo)平臺(tái)是基于ARM體系結(jié)構(gòu)的運(yùn)行嵌入式Linux操作系統(tǒng),而開發(fā)編譯環(huán)境是基于PC中虛擬機(jī)上的Linux操作系統(tǒng)。若在目標(biāo)平臺(tái)上運(yùn)行程序,則須在PC開發(fā)環(huán)境下對(duì)代碼進(jìn)行交叉編譯以適應(yīng)目標(biāo)平臺(tái)。
依據(jù)環(huán)境變量PREFIX,將編譯好的工具鏈安裝到指定文件夾就可以使用了。
例如,修改arm-Linux-gcc-2.95.3的環(huán)境變量為:
PATH=$PATH:$HOME/bin:$PREFIX/bin:/usr/local/arm/2.95.3/bin:/sbin:/usr/sbin:/usr/local/sbin,同時(shí)編寫hello.c程序進(jìn)行驗(yàn)證
$arm-Linux-gcc hello.c -o hello-arm
$file hello-arm
hello-arm: ELF 32-bit LSB executable, ARM, version1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs),not stripped
這表明生成的hello-arm可以在ARM平臺(tái)上運(yùn)行,也證明交叉編譯工具鏈?zhǔn)怯行Р⑶铱捎玫摹?/p>
Linux內(nèi)核編譯下載
具體步驟如下:
(1) 解壓Linux-2.6.21-2009-04 -10.bz2:tar xjvf Linux-2.6.21 -2009-04-10.bz2;
(2) 進(jìn)入Linux-2.6.21目錄,內(nèi)核編譯:make uImage;
(3) 編譯完成后,通過(guò)SSH把uImage文件拷貝到Windows環(huán)境下;
(4) 配置U-Boot環(huán)境變量;
(5) 配置tftp服務(wù)器:運(yùn)行Linux系統(tǒng)下的tftp服務(wù)器,復(fù)制Linux內(nèi)核的uImage文件到tftp下載工作目錄下,啟動(dòng)tftp服務(wù),確保PC和AT91RM9200接入同一網(wǎng)段;
(6) 下載內(nèi)核映像文件,并在U-Boot提示符下擦除Flash;
(7) 下載內(nèi)核映像文件到Flash中;
Linux文件系統(tǒng)
軟件平臺(tái)使用cramfs文件系統(tǒng),其特點(diǎn)是:系統(tǒng)訪問(wèn)某個(gè)位置的數(shù)據(jù)時(shí),立即計(jì)算出該數(shù)據(jù)在cramfs中的位置,解壓到RAM中,然后通過(guò)內(nèi)存訪問(wèn)來(lái)獲取數(shù)據(jù),cramfs中的解壓縮之后的內(nèi)存中的數(shù)據(jù)存放位置都是由cramfs文件系統(tǒng)本身來(lái)管理,用戶并不需要實(shí)現(xiàn)過(guò)程,因此增加了透明度,給開發(fā)人員節(jié)約了時(shí)間。
2 Linux操作系統(tǒng)下設(shè)備驅(qū)動(dòng)開發(fā)
Linux上的設(shè)備驅(qū)動(dòng)非常豐富,支持各種主流硬件設(shè)備和最新的硬件技術(shù)。設(shè)備驅(qū)動(dòng)程序在Linux內(nèi)核中,是一個(gè)個(gè)獨(dú)立的“黑盒子”,使某個(gè)特定的硬件響應(yīng)一個(gè)定義良好的內(nèi)部編程接口,同時(shí)完全隱藏設(shè)備的工作細(xì)節(jié)。通過(guò)一組標(biāo)準(zhǔn)化的調(diào)用,把這些調(diào)用映射到設(shè)備特定的操作上,則是設(shè)備驅(qū)動(dòng)程序的任務(wù)。而在Linux系統(tǒng)里,每一個(gè)設(shè)備都被看作一個(gè)文件,打開的設(shè)備在內(nèi)核中由一個(gè)File結(jié)構(gòu)標(biāo)志,內(nèi)核使用File_operations結(jié)構(gòu)訪問(wèn)驅(qū)動(dòng)程序的函數(shù)。每個(gè)設(shè)備與一組標(biāo)準(zhǔn)函數(shù)集關(guān)聯(lián)。
3 Linux操作系統(tǒng)下應(yīng)用程序開發(fā)
采取在PC上編譯應(yīng)用程序,運(yùn)行測(cè)試通過(guò)后,再通過(guò)網(wǎng)絡(luò)或串口等方法下載到目標(biāo)平臺(tái)/usr目錄下,對(duì)于較小的程序,使用串口下載比較方便,具體的步驟為
(1) PC模擬環(huán)境下開發(fā)程序,交叉編譯;
(2) 待ARM平臺(tái)下Linux正常運(yùn)行后,進(jìn)入usr目錄,然后選擇下載的程序;
(3) 下載完成后,chmod +x filenam修改文件屬性為可執(zhí)行命令;
(4) 執(zhí)行剛下載的文件命令為./filename。
通用工控平臺(tái)人機(jī)交互通信機(jī)制實(shí)現(xiàn)
嵌入式GUI為嵌入式系統(tǒng)提供了一種應(yīng)用于特殊場(chǎng)合的人機(jī)交互接口。新一代嵌入式GUI的主要特征有:以用戶為中心、多通道、智能化、高帶寬。嵌入式Linux 系統(tǒng)中,幾乎所有的GUI 都建立在FrameBuffer設(shè)備上。
MiniGUI 是一個(gè)根據(jù)嵌入式系統(tǒng)應(yīng)用特點(diǎn)量身定做的完整的圖形支持系統(tǒng)。將現(xiàn)代窗口和圖形技術(shù)帶入到嵌入式設(shè)備,是一個(gè)非常適合于嵌入式設(shè)備的高效、可靠、可定制、小巧靈活的圖形用戶界面支持系統(tǒng),主要優(yōu)點(diǎn)可總結(jié)為支持多種嵌入式操作系統(tǒng),具備優(yōu)秀的可移植性;可伸縮的系統(tǒng)架構(gòu),易于擴(kuò)展;功能豐富,可靈活剪裁;得到小體積高性能間的最佳平衡且具有廣泛的應(yīng)用領(lǐng)域。
?
1 移植MiniGUI前準(zhǔn)備
MiniGUI 1.3.3是MiniGUI的開源版本,并且資源豐富,性能穩(wěn)定,因此選用MiniGUI 1.3.3作為GUI的開發(fā)環(huán)境。進(jìn)行MiniGUI移植需要準(zhǔn)備表3所列的文件,它們可在互聯(lián)網(wǎng)上獲得。
2 PC模擬器開發(fā)環(huán)境搭建
建立自己的開發(fā)目錄,解壓文件libminigui-1.3.3.tar.gz和minigui-res-1.3.3.tar.gz;編譯安裝MiniGUI運(yùn)行所需庫(kù)文件libminigui;安裝資源文件minigui-res-1.3.3;修改/etc/ld.so.conf 文件,加入一行/usr/local/lib,然后執(zhí)行[root]# ldconfig 按照硬件平臺(tái)配置與開發(fā)環(huán)境的設(shè)置修改minigui配置文件,包括修改路徑,屏幕分辨率等。
PC模擬器開發(fā)環(huán)境搭建完畢后,就可在 PC上開發(fā)應(yīng)用程序,在 qvfb中執(zhí)行,驗(yàn)證程序的正確后,就可以進(jìn)行交叉編譯下載運(yùn)行。
3 交叉編譯Minigui1.3.3
解壓arm-Linux-2.95.3.bz2文件安裝交叉編譯工具?cross-2.95.3,安裝之后修改.bashrc腳本,設(shè)置環(huán)境變量:PATH="$PATH:/sbin:/usr/local/arm/2.95.3/bin:/usr/local/bin:/usr/local"。
接下來(lái)依次安裝 zlib庫(kù),png庫(kù)、libttf庫(kù),它們的作用分別是:其他的庫(kù)的編譯基礎(chǔ)、顯示PNG圖形、顯示文字。完成以上附加庫(kù)的交叉編譯工作后就可以編譯libminigui了。把/usr/local/arm/2.95.3/arm-Linux/lib中相應(yīng)的庫(kù)拷到目標(biāo)板/usr/lib目錄下,拷貝時(shí)先對(duì)庫(kù)文件執(zhí)行arm-Linux-strip命令,去除文件中的調(diào)試信息。同時(shí)把資源文件復(fù)制到目標(biāo)平臺(tái)的/usr/local/lib目錄下。這樣就完成了交叉編譯工作,可以將PC上調(diào)試好的應(yīng)用程序下載到目標(biāo)硬件平臺(tái)下進(jìn)行應(yīng)用了。
通用工控平臺(tái)人機(jī)界面開發(fā)
評(píng)論
查看更多