于博
摘要摘要:CortexA8處理器是第一款基于ARMv7 架構(gòu)的應(yīng)用處理器,是有史以來ARM 開發(fā)的性能最高、最具功率效率的處理器。ARM Cortex-A8處理器是一款適用于復(fù)雜操作系統(tǒng)的應(yīng)用處理器?;贜FS文件系統(tǒng),對(duì)CortexA8開發(fā)板遠(yuǎn)程添加自開發(fā)程序應(yīng)用進(jìn)行了研究。
關(guān)鍵詞關(guān)鍵詞:NFS; CortexA8處理器; ARMv7 架構(gòu); 自開發(fā)程序
DOIDOI:10.11907/rjdk.1431004
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2015)004011802
0引言
NFS是Network File System的簡(jiǎn)寫,即網(wǎng)絡(luò)文件系統(tǒng)[1]。網(wǎng)絡(luò)文件系統(tǒng)是FreeBSD支持的文件系統(tǒng)中的一種。 NFS允許一個(gè)系統(tǒng)在網(wǎng)絡(luò)上與他人共享目錄和文件。通過使用NFS,不同的操作系統(tǒng)彼此共享文件(share files)——可以通過NFS掛載遠(yuǎn)程主機(jī)目錄,訪問該目錄就像訪問本地目錄一樣,所以也可以簡(jiǎn)單地將它看作一個(gè)文件服務(wù)器(Fileserver)[2]。
1學(xué)習(xí)和使用NFS文件系統(tǒng)
NFS工作原理可以理解為:CortexA8開發(fā)板上需要安裝一個(gè)NFS客戶端軟件,Linux宿主機(jī)上安裝NFS服務(wù)器端軟件。Linux宿主機(jī)配置NFS文件,告訴本機(jī)哪塊硬盤區(qū)域可以被NFS Client設(shè)備掛載,Linux宿主機(jī)啟動(dòng)NFS服務(wù)器程序并等待Client掛載。CortexA8和Linux宿主機(jī)通過網(wǎng)線相連,運(yùn)行NFS Client程序通過網(wǎng)線掛載Linux宿主機(jī)上的那塊硬盤,這樣在CortexA8開發(fā)板(NFS Client)一端就可以看到Linux宿主機(jī)上這塊硬盤區(qū)域里所有的文件了。
1.1CortexA8開發(fā)板和Linux宿主機(jī)兩端安裝NFS組件
CortexA8開發(fā)板的Linux內(nèi)核和文件系統(tǒng)支持NFS組件,所以CortexA8這端不需作任何修改就可以支持NFS。Linux內(nèi)核的配置:在Linux宿主機(jī)下進(jìn)入/opt/Friendly ARM/mini210/linux3.0.8,運(yùn)行命令:#make menuconfig (進(jìn)入Linux內(nèi)核配置界面),進(jìn)入NFS組件的選擇安裝,如圖1所示。
1.2主機(jī)端安裝NFS服務(wù)器
在Linux宿主機(jī)端安裝NFS服務(wù)器,不同的Linux發(fā)行版會(huì)略有不同,筆者使用的是Fedora 17發(fā)行版,過程如下:運(yùn)行命令:#yum install port map nfsutils(安裝NFS所需要的組件) ,在/opt/Friendly ARM/mini210/目錄下建立一個(gè)共享目錄,取名為Source Code
運(yùn)行命令:#chimed 777 /opt/Friendly ARM/mini210/Source Code (將文件夾Source Code的權(quán)限設(shè)置為所有人可讀寫和操作),#vim /etc/exports(修改exports配置文件)。在exports配置文件添加一行/opt/Friendly ARM/mini210/Source Code *(sync,rw,no_root_squash)解析。/opt/Friendly ARM/mini210/Source Code 就是NFS服務(wù)器允許NFS客戶端掛載的文件。*:代表任意IP地址都可以掛載該NFS服務(wù)器的指定文件,Rw:代表擁有可讀寫權(quán)限。
No_root_squash:表示當(dāng)?shù)顷慛FS服務(wù)器使用共享目錄的使用者是root時(shí),其權(quán)限將被轉(zhuǎn)換為匿名使用者(nobody)。接下來Linux宿主機(jī)端還要禁用防火墻,在Fedora17下禁用防火墻的命令為#systemctl stop iptables.service。將NFS服務(wù)器配置成開機(jī)啟動(dòng)并啟動(dòng)NFS服務(wù)器,命令為#systemctl enable nfsserver.service。
2為CortexA8開發(fā)板添加自開發(fā)程序
2.1CortexA8處理器編譯
CortexA8采用了復(fù)雜的流水線構(gòu)架,針對(duì)強(qiáng)功耗應(yīng)用,CortexA8采用了一個(gè)優(yōu)化的裝載/存儲(chǔ)流水線,順序執(zhí)行,同步執(zhí)行超標(biāo)量處理器內(nèi)核,其擁有13級(jí)主流水線,10級(jí)NEON多媒體流水線,可以提供2 DMIPS/MHZ的性能;它有優(yōu)化的L1緩存,可以提高訪問存儲(chǔ)速度并降低功耗;它有專用的L2緩存,在編譯時(shí),可以把緩存當(dāng)作標(biāo)準(zhǔn)的RAM進(jìn)行處理,而緩存大小可以靈活配置,緩存的訪問延遲也可以編程控制;它有基于執(zhí)行記錄的動(dòng)態(tài)跳轉(zhuǎn)預(yù)盼,準(zhǔn)確性高達(dá)95%,而且提供重放機(jī)制以有效降低預(yù)判錯(cuò)誤帶來的性能損失;在技術(shù)方面,使用了更高性能及功耗效率和高代碼密度的Thumb-2技術(shù)[3]。它首次采用了強(qiáng)大的NEONTM信號(hào)處理擴(kuò)展集,對(duì)H.264和MP3等媒體編解碼提供加速。CortexA8解決方案還包括JazelleRCT Java加速技術(shù),提供最優(yōu)化的實(shí)時(shí)(JIT)和動(dòng)態(tài)調(diào)適編譯(DAC),同時(shí)減少3/4的內(nèi)存占用空間。此外,新處理器還配置了用于安全交易和數(shù)字版權(quán)管理的TrustZone技術(shù)和AMBA 3 AXITM互連協(xié)議,實(shí)現(xiàn)低功耗管理IEM的功能[4]。
在Linux宿主機(jī)下,進(jìn)入/opt/Friendly ARM/mini210目錄,用C語言編寫helloworld.c程序,運(yùn)行命令#armLinuxgcc helloworld.c hello world(使用交叉編譯器armlinuxgcc,編譯helloworld.c,源碼為helloworld的可執(zhí)行程序) 。
2.2CortexA8開發(fā)板燒錄
在同目錄下運(yùn)行命令#./hello world(執(zhí)行本目錄下的helloworld程序,應(yīng)該會(huì)報(bào)錯(cuò),因?yàn)檫@個(gè)程序是一個(gè)ARM體系程序而不是X86體系程序,X86主機(jī)無法識(shí)別里面的機(jī)器碼),將hello world可執(zhí)行程序復(fù)制到rootfs_qtopia_qt4目錄下,重新制作rootfs_qtopia_qt4.img文件系統(tǒng),并將文件系統(tǒng)燒錄至CortexA8開發(fā)板。
利用超級(jí)終端或者Telnet登陸開發(fā)板控制臺(tái),找到添加的helloworld程序,在控制臺(tái)下運(yùn)行命令$./hello world(執(zhí)行hello world程序),觀察是否有正確的輸出返回。
至此,已經(jīng)至少向開發(fā)板燒錄過兩次文件系統(tǒng)了。這里的問題是在之后的開發(fā)過程中是不是每次添加或者修改程序時(shí)都要進(jìn)行燒錄呢?那效率也實(shí)在太低了[5]。下面采用嵌入式軟件開發(fā)中最常用的開發(fā)方法,使用NFS文件系統(tǒng)進(jìn)行遠(yuǎn)程掛載來進(jìn)行程序開發(fā)。
3使用NFS進(jìn)行CortexA8開發(fā)
將Linux宿主機(jī)和CortexA8開發(fā)板通過網(wǎng)線相連,并將Linux宿主機(jī)的有線IP地址和CortexA8開發(fā)板的有線IP地址設(shè)置為同一網(wǎng)段(此次實(shí)驗(yàn)室筆者的Linux宿主機(jī)IP地址為192.168.1.22,CortexA8開發(fā)板的IP地址為192.168.1.230)。
在Linux宿主機(jī)上,將之前寫好的helloworld.c源程序和helloworld可執(zhí)行程序復(fù)制到/opt/Friendly ARM/mini210/Source Code目錄下。我們?cè)趯?shí)驗(yàn)中曾經(jīng)使用Windows下的putty.exe程序telnet登陸過開發(fā)板,其實(shí)絕大多數(shù)Linux操作系統(tǒng)也帶有該功能,在Linux宿主機(jī)下運(yùn)行命令#telnet 192.168.1.230(使用telnet工具登陸IP地址為192.168.1.230的CortexA8開發(fā)板命令行控制臺(tái)),輸入用戶名為root,即可在Linux宿主機(jī)上完成命令行登陸,如圖2所示。
在控制臺(tái)下運(yùn)行命令:
$mount –t nfs 192.168.1.22:/opt/Friendly ARM/mini210/Source Code /mnt –o no lock(注意這個(gè)命令是“$”符號(hào)打頭,是在控制臺(tái)進(jìn)行的,意思是將IP地址為192.168.1.22的NFS服務(wù)器/opt/Friendly ARM/mini210/Source Code文件夾掛載到開發(fā)板Linux文件系統(tǒng)的/mnt目錄下)。完成掛載后,運(yùn)行$ls /mnt命令,看一下是否是Linux宿主機(jī)/opt/Friendly ARM/mini210/Source Code目錄下的內(nèi)容,如圖3所示。筆者此時(shí)的/opt/Friendly ARM/mini210/Source Code目錄下的內(nèi)容稍有不同,讀者此時(shí)應(yīng)該只有helloworld.c和helloworld。嘗試運(yùn)行hello world程序,看是否有正確的返回。返回結(jié)果為正確,由此推出,NFS進(jìn)行CortexA8開發(fā)效率較高。
綜上所述,使用NFS進(jìn)行開發(fā),可以通過建立NFS,把Linux 服務(wù)器上的特定分區(qū)共享到待調(diào)試的嵌入式目標(biāo)系統(tǒng)上,這樣就可以直接在嵌入式目標(biāo)系統(tǒng)上操作Linux 服務(wù)器,同時(shí)可以在線對(duì)程序進(jìn)行調(diào)試和修改,大大簡(jiǎn)化了軟件開發(fā)工作。
參考文獻(xiàn)參考文獻(xiàn):
[1]程海粟,李慶武,俞楷,等.基于CortexA8 處理器的車牌識(shí)別系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)與現(xiàn)代化,2014(5):123125.
[2]百度百科.CortexA8開發(fā)平臺(tái)[EB/OL].http://baike.baidu.com/view/6631918.htm?fr=aladdin.
[3]楊亮.基于CortexA8嵌入式實(shí)驗(yàn)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 電子設(shè)計(jì)工程,2014(4) : 153154.
[4]任亮.基于ARM CortexA8的嵌入式Linux開發(fā)的平臺(tái)構(gòu)建[J]. 山西煤炭管理干部學(xué)院學(xué)報(bào),2012(4) : 134135.
[5]李寧.ARM CortexA8處理器原理與應(yīng)用[M].北京: 北京航空航天大學(xué)出版社,2012.
責(zé)任編輯(責(zé)任編輯:杜能鋼)