引言
嵌入式系統(tǒng)的開(kāi)發(fā)與應(yīng)用是目前發(fā)展的一個(gè)熱點(diǎn),而嵌入式系統(tǒng)的開(kāi)發(fā)手段在嵌入式開(kāi)發(fā)中起著至關(guān)重要的作用。其中,通過(guò)以太網(wǎng)調(diào)試和運(yùn)行開(kāi)發(fā)程序的方法在嵌入式系統(tǒng)的開(kāi)發(fā)中得到了廣泛應(yīng)用,本文就此展開(kāi)說(shuō)明。
mClinux特點(diǎn)簡(jiǎn)介
1. 取消了內(nèi)存管理單元MMU,具有完整的網(wǎng)絡(luò)功能。
2. 完備的文件系統(tǒng)支持,采用了romfs文件系統(tǒng)作為根文件系統(tǒng),相對(duì)于一般的ext2文件系統(tǒng)要求更少的空間。
3. 使用了flat可執(zhí)行文件格式:elf格式有很大的文件頭,flat文件對(duì)文件頭和一些段信息做了簡(jiǎn)化。
4. 體積小,可移植性強(qiáng)。
圖1 開(kāi)發(fā)環(huán)境示意圖
常見(jiàn)的基于mClinux的嵌入
式系統(tǒng)開(kāi)發(fā)環(huán)境的構(gòu)建方法
在嵌入式系統(tǒng)的開(kāi)發(fā)過(guò)程中,通常都要建立交叉編譯環(huán)境,圖1為常見(jiàn)的嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境示意圖,基于以太網(wǎng)下的調(diào)試一般應(yīng)將宿主機(jī)和用戶板接入到局域網(wǎng)中,本文以mClinux +S3C4510B的開(kāi)發(fā)環(huán)境為例進(jìn)行說(shuō)明。通常的做法是在宿主機(jī)上安裝RedHat Linux操作系統(tǒng),并同時(shí)安裝針對(duì)ARM開(kāi)發(fā)的工具鏈arm-elf-tools。這樣,在宿主機(jī)上編輯和編譯好的用戶程序,就可以通過(guò)以太網(wǎng),將編譯后的可執(zhí)行文件下載到用戶板來(lái)運(yùn)行。下載方式主要有以下幾種。
FTP方式
首先需要打開(kāi)一個(gè)超級(jí)終端,設(shè)置好相應(yīng)的通訊參數(shù),再給系統(tǒng)上電,就可以在超級(jí)終端里看到mClinux的啟動(dòng)信息。這里指明宿主機(jī)的IP地址是:10.5.22.247,用戶板的IP地址是:10.5.22.8,執(zhí)行如下命令來(lái)配置用戶板的IP:
# ifconfig eth0 10.5.22.8
eth0 指網(wǎng)絡(luò)設(shè)備。需要注意的是,用戶板的IP地址需和宿主機(jī)的IP地址在同一網(wǎng)段,否則難以正常的訪問(wèn)宿主機(jī)。
這時(shí)如果可以ping通宿主機(jī),就可以通過(guò)FTP方式訪問(wèn)宿主機(jī)的網(wǎng)絡(luò)資源了。
接下來(lái)選擇用戶程序的存放目錄。應(yīng)注意,如果用戶板用的是romfs文件系統(tǒng),那么只有少數(shù)幾個(gè)目錄可以訪問(wèn)(如tmp ,var等)。選好存放目錄之后,就可以通過(guò)FTP方式訪問(wèn)宿主機(jī)了,鍵入如下命令:
# cd /tmp
# ftp 10.5.22.247
然后輸入用戶名和密碼以確定是否具有訪問(wèn)權(quán)限,成功登陸之后,需要確定文件傳送格式。FTP可以用binary和ascii兩種方式來(lái)傳送文件,這里選擇的是binary方式。輸入以下指令來(lái)獲取文件:
# binary
# get filename
# bye
執(zhí)行# bye后就可以退出FTP。這時(shí)可以鍵入ls命令來(lái)查看文件是否已經(jīng)傳到選定的目錄下。接下來(lái)要做的是改變文件的權(quán)限,如果沒(méi)有可執(zhí)行權(quán)限,在用戶板中就無(wú)法運(yùn)行程序。
# chmod 755 filename
這里的參數(shù)“7”表示擁有讀、寫(xiě)和執(zhí)行的權(quán)限;“5”僅代表?yè)碛凶x和執(zhí)行的權(quán)限。完成以上配置后,就可以用如下命令執(zhí)行用戶程序了:
# ./filename
NFS方式
使用NFS (NetWork File System)方式可以使嵌入式應(yīng)用程序的開(kāi)發(fā)和調(diào)試變得更為方便,并在不同的機(jī)器、不同的操作系統(tǒng)間共享文件,因此,NFS在嵌入式開(kāi)發(fā)中得到了廣泛的應(yīng)用。目前,在mClinux-2.4-x版本下配置NFS相對(duì)比較困難,下面就配置問(wèn)題進(jìn)行詳細(xì)說(shuō)明。
服務(wù)器(Sever)端的設(shè)置
首先需要設(shè)置 Linux下的/etc/exports文檔,它是NFS的主要設(shè)定文檔。在Linux下的shell終端,進(jìn)行如下操作:
# vim /etc/exports
將這個(gè)默認(rèn)的空文件修改為只有如下一行內(nèi)容:
/home/tmp *(rw,no_root_ squash)
這就表示在任何情況下,客戶端都可以訪問(wèn)服務(wù)器端的/home/tmp目錄。
接下來(lái)要在服務(wù)器端開(kāi)啟如下的兩個(gè)進(jìn)程:
1.開(kāi)啟NFS服務(wù)
# /etc/rc.d/init.d/nfs start
啟動(dòng)NFS服務(wù): [ OK ]
Starting NFS quotas: [ OK ]
啟動(dòng)NFS 守護(hù)進(jìn)程: [ OK ]
啟動(dòng)NFS mounted : [ OK ]
2.開(kāi)啟portmap服務(wù)
# /etc/rc.d/init.d/portmap start
配置完成后,可用如下辦法簡(jiǎn)單測(cè)試一下NFS是否配置成功(注意在Linux下要將防火墻關(guān)閉):在宿主機(jī)上自己mount自己,看是否成功。例如,在宿主機(jī)/目錄下執(zhí)行:
mount 10.5.22.247:/root/ /home/zhang/mount
然后到/home/zhang/mount/目錄下看是否可以列出/root/目錄下的所有文件和目錄。若可以,則說(shuō)明NFS在服務(wù)器端的配置成功。
客戶端(Client)的設(shè)置
相對(duì)于Sever端的設(shè)置,Client端使用的是 mClinux, 設(shè)置起來(lái)相對(duì)復(fù)雜一些,需要對(duì)mClinux的內(nèi)核重新編譯,并進(jìn)行相關(guān)配置。需要設(shè)置Customize Kernel Settings 和 Customize Vender/User Setings(NEW)兩項(xiàng)。
1. 對(duì)Customize Kernel Settings進(jìn)行配置
[ * ] Customize Kernel Settings
進(jìn)入File systems的設(shè)置,可以看到Network file systems---,將NFS File system support選中。
2.設(shè)置Customize Vender/User Setings(NEW)
[ * ] Customize Vender/User Setings(NEW)
在Customize Vender/User Setings 項(xiàng)目中,選擇Network Applications之后,需要其中的portmap服務(wù),[*] portmap即可。然后選擇mount和umount服務(wù)使mClinux支持mount和umount指令。mClinux-2.4-x的內(nèi)核對(duì)NFS mount的支持不夠,這使得在mClinux上添加NFS服務(wù)存在一些困難,而在較新的mClinux版本mClinux-2.6-x中重寫(xiě)了對(duì)NTFS文件系統(tǒng)的支持。在BusyBox中選擇mount和umount及mount NFS support三項(xiàng)即可,這樣客戶端的配置完成。最后重新編譯內(nèi)核,指令如下:
# make menuconfig ------------- 內(nèi)核配置
# make dep -------------尋找依存關(guān)系
# make clean------------清除以前構(gòu)造內(nèi)核時(shí)生成的文件
# make lib_only-----------該命令編譯庫(kù)文件
# make user_only----------編譯用戶應(yīng)用程序文件
# make romfs ----------生成romfs文件系統(tǒng)
# make image----------生成romfs.o文件
# make
重新編譯后,會(huì)在.../image/目錄下生成image.rom文件,它是壓縮了的內(nèi)核在rom的映像文件,將其燒寫(xiě)到用戶板的Flash即可。用戶板重新啟動(dòng)之后,新的內(nèi)核已經(jīng)開(kāi)始工作,這時(shí)就可以在終端里進(jìn)行NFS mount了(以在minicom為例)。輸入如下指令:
#mount -t nfs 10.5.22.247:/home/tmp /var/tmp /nfsmount -o nolock
# mount
執(zhí)行完兩條指令后,在Linux下的minicom里會(huì)看到如下信息:
Rootfs on / type rootfs (rw)
/dev/rom0 on / type rootfs (ro)
/proc on/proc type proc (rw)
/dev/ram0 on/var type ext2 (rw)
/dev/ram1 on /disk type ext2 (rw)
10.5.22.247:/home/tmp on /var/tmp type nfs (rw,v3,rsize=8192,hard, udp,nolock,addr=10.5.22.2)
這樣就將宿主機(jī)的/home/tmp目錄掛載到了用戶板的/var/tmp目錄。
結(jié)語(yǔ)
通過(guò)以上兩種方式的比較,可以看到,就開(kāi)發(fā)的效率來(lái)說(shuō),NFS的方式明顯具有優(yōu)勢(shì)。畢竟,用戶開(kāi)發(fā)的程序往往不能一次就調(diào)試成功,采用NFS方式使得多人同時(shí)開(kāi)發(fā)一個(gè)程序成為可能。事實(shí)上,除了文中提到的兩種方式以外,還有其它以太網(wǎng)環(huán)境下的嵌入式開(kāi)發(fā)手段,如telnet等,限于篇幅,不再詳細(xì)介紹。
相關(guān)推薦
嵌入式工業(yè)以太網(wǎng)的應(yīng)用研究


以太網(wǎng)接口怎么實(shí)現(xiàn)嵌入式系統(tǒng)的網(wǎng)絡(luò)互連?
嵌入式以太網(wǎng)開(kāi)發(fā)
嵌入式軟件開(kāi)發(fā)與非嵌入式軟件開(kāi)發(fā)的區(qū)別?
嵌入式開(kāi)發(fā)
嵌入式開(kāi)發(fā)與Python編程有哪些區(qū)別及其聯(lián)系呢
嵌入式開(kāi)發(fā)與傳統(tǒng)軟件開(kāi)發(fā)的區(qū)別?
嵌入式開(kāi)發(fā)與非嵌入式開(kāi)發(fā)的區(qū)別
嵌入式開(kāi)發(fā)中的一些硬件相關(guān)的概念有哪些
嵌入式開(kāi)發(fā)入門(mén)之旅
嵌入式開(kāi)發(fā)入門(mén)之旅
嵌入式開(kāi)發(fā)學(xué)習(xí)方法步驟
嵌入式開(kāi)發(fā)就業(yè)方向的問(wèn)題
嵌入式開(kāi)發(fā)工具面臨的挑戰(zhàn)是什么?未來(lái)的發(fā)展趨勢(shì)呢?
嵌入式開(kāi)發(fā)教程之程序設(shè)計(jì)與開(kāi)發(fā)維護(hù)
嵌入式開(kāi)發(fā)是什么意思
嵌入式開(kāi)發(fā)是指什么?嵌入式有何應(yīng)用呢
嵌入式開(kāi)發(fā)有哪些技巧?
嵌入式開(kāi)發(fā)板開(kāi)發(fā)與SOC系統(tǒng)開(kāi)發(fā)有哪些不同之處呢
嵌入式開(kāi)發(fā)板環(huán)境的搭建
嵌入式開(kāi)發(fā)板有什么功能?
嵌入式開(kāi)發(fā)流程
嵌入式開(kāi)發(fā)流程是怎樣的?
嵌入式開(kāi)發(fā)的優(yōu)缺點(diǎn)是什么?
嵌入式開(kāi)發(fā)要學(xué)什么
嵌入式開(kāi)發(fā)要學(xué)什么?
嵌入式開(kāi)發(fā)要學(xué)什么內(nèi)容 嵌入式開(kāi)發(fā)學(xué)習(xí)路線介紹
嵌入式開(kāi)發(fā)要學(xué)什么內(nèi)容 嵌入式開(kāi)發(fā)學(xué)習(xí)路線介紹
嵌入式開(kāi)發(fā)要學(xué)什么內(nèi)容 嵌入式開(kāi)發(fā)學(xué)習(xí)路線介紹
Java開(kāi)發(fā)和嵌入式開(kāi)發(fā)
Linux下嵌入式開(kāi)發(fā)環(huán)境有哪些?
SOPC在嵌入式工業(yè)以太網(wǎng)控制器中有哪些應(yīng)用?
VScode嵌入式開(kāi)發(fā)如何入門(mén)
labview2013 如何設(shè)置STM32嵌入式開(kāi)發(fā)環(huán)境
一文詳解Express Pi嵌入式開(kāi)發(fā)板
什么是嵌入式以太網(wǎng)數(shù)字語(yǔ)音廣播系統(tǒng)解決方案?
什么是嵌入式?單片機(jī)開(kāi)發(fā)與嵌入式開(kāi)發(fā)的區(qū)別在哪
什么樣的人適合轉(zhuǎn)行嵌入式開(kāi)發(fā)?
傳統(tǒng)開(kāi)發(fā)和嵌入式開(kāi)發(fā)的優(yōu)缺點(diǎn)分別是什么
關(guān)于linux嵌入式開(kāi)發(fā)箱相關(guān)問(wèn)題,求助!??!
分享買(mǎi)來(lái)的各種嵌入式開(kāi)發(fā)課件(3)
基于嵌入式以太網(wǎng)控制的接口電路及軟硬件實(shí)現(xiàn)方法
基于嵌入式模塊comX的實(shí)時(shí)以太網(wǎng)
基于嵌入式系統(tǒng)的以太網(wǎng)接口電路實(shí)現(xiàn)設(shè)計(jì)
基于DSP的嵌入式以太網(wǎng)接口電路設(shè)計(jì)
基于FPGA的嵌入式以太網(wǎng)接口硬件設(shè)計(jì)
基于TCP IP協(xié)議棧的嵌入式以太網(wǎng)終端設(shè)計(jì)
基于coLinux的嵌入式開(kāi)發(fā)環(huán)境構(gòu)建
基于雙以太網(wǎng)處理器Jupiter實(shí)現(xiàn)嵌入式設(shè)備網(wǎng)絡(luò)的設(shè)計(jì)
如何從嵌入式開(kāi)發(fā)/云平臺(tái)開(kāi)發(fā)/Android端來(lái)實(shí)現(xiàn)一個(gè)物聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)?
如何從零開(kāi)始學(xué)習(xí)嵌入式開(kāi)發(fā)技術(shù)?
如何使用eop燒寫(xiě)嵌入式開(kāi)發(fā)板的裸板程序呢
如何利用Clion去配置一種stm32嵌入式開(kāi)發(fā)環(huán)境呢
如何去實(shí)現(xiàn)嵌入式以太網(wǎng)與Matlab通信系統(tǒng)的設(shè)計(jì)?
如何去實(shí)現(xiàn)S3C2440嵌入式系統(tǒng)的以太網(wǎng)接口設(shè)計(jì)?
如何去實(shí)現(xiàn)一種基于STM32CubeMX的嵌入式開(kāi)發(fā)設(shè)計(jì)
如何基 Visual Studio Code來(lái)搭建嵌入式開(kāi)發(fā)環(huán)境
如何完成嵌入式串行千兆以太網(wǎng)的設(shè)計(jì)
如何對(duì)LS1028A嵌入式開(kāi)發(fā)板進(jìn)行測(cè)試呢
學(xué)FPGA為什么要學(xué)以太網(wǎng)控制器
學(xué)習(xí)嵌入式開(kāi)發(fā)需要什么基礎(chǔ)?
怎么實(shí)現(xiàn)嵌入式以太網(wǎng)數(shù)字語(yǔ)音廣播系統(tǒng)的設(shè)計(jì)?
怎么實(shí)現(xiàn)基于S3C4480X的嵌入式以太網(wǎng)接口設(shè)計(jì)?
怎么學(xué)好ARM嵌入式開(kāi)發(fā)?
怎樣將OpenCV環(huán)境與交叉編譯器移植到嵌入式開(kāi)發(fā)平臺(tái)上呢
想做以太網(wǎng)通訊開(kāi)發(fā)需要補(bǔ)充哪方面的知識(shí)呢?
新手學(xué)習(xí)嵌入式開(kāi)發(fā)要學(xué)什么
新手學(xué)習(xí)嵌入式開(kāi)發(fā)要學(xué)什么?
求一種嵌入式以太網(wǎng)接口的設(shè)計(jì)方案
究竟什么是嵌入式開(kāi)發(fā)
請(qǐng)問(wèn)嵌入式系統(tǒng)實(shí)現(xiàn)以太網(wǎng),TCP/IP協(xié)議棧是都是移植的嗎?
請(qǐng)問(wèn)如何使用樹(shù)莓派去進(jìn)行l(wèi)inux嵌入式開(kāi)發(fā)?
請(qǐng)問(wèn)怎樣去設(shè)計(jì)嵌入式以太網(wǎng)控制器?
誰(shuí)知道SOPC技術(shù)在嵌入式工業(yè)以太網(wǎng)中有哪些應(yīng)用呢?
高性能嵌入式以太網(wǎng)CAN網(wǎng)關(guān)怎么實(shí)現(xiàn)?
嵌入式以太網(wǎng)接口的研究與設(shè)計(jì)

SOPC技術(shù)在嵌入式工業(yè)以太網(wǎng)中的設(shè)計(jì)應(yīng)用


嵌入式開(kāi)發(fā)環(huán)境的搭建


嵌入式開(kāi)發(fā)的產(chǎn)品有哪些_嵌入式開(kāi)發(fā)的流程

評(píng)論