嵌入式FPGA熱門培訓內容之基于以太網的嵌入式開發環境的研究與實現

時間:2018-12-12 17:14:47

引言

嵌入式系統的開發與應用是目前發展的一個熱點,而嵌入式系統的開發手段在嵌入式開發中起著至關重要的作用。其中,通過以太網調試和運行開發程序的方法在嵌入式系統的開發中得到了廣泛應用,本文就此展開說明。

mClinux特點簡介

1. 取消了內存管理單元MMU,具有完整的網絡功能。 

2. 完備的文件系統支持,采用了romfs文件系統作為根文件系統,相對于一般的ext2文件系統要求更少的空間。

3. 使用了flat可執行文件格式:elf格式有很大的文件頭,flat文件對文件頭和一些段信息做了簡化。 

4. 體積小,可移植性強。

常見的基于mClinux的嵌入:

式系統開發環境的構建方法

在嵌入式系統的開發過程中,通常都要建立交叉編譯環境,圖1為常見的嵌入 式系統開發環境示意圖,基于以太網下的調試一般應將宿主機和用戶板接入到局域網中,本文以mClinux +S3C4510B的開發環境為例進行說明。通常的做法是在宿主機上安裝RedHat  Linux操作系統,并同時安裝針對ARM開發的工具鏈arm-elf-tools。這樣,在宿主機上編輯和編譯好的用戶程序,就可以通過以太網,將編譯 后的可執行文件下載到用戶板來運行。下載方式主要有以下幾種。

FTP方式

首先需要打開一個超級終端,設置好相應的通訊參數,再給系統上電,就可以在超級終端里看到mClinux的啟動信息。這里指明宿主機的IP地址是:10.5.22.247,用戶板的IP地址是:10.5.22.8,執行如下命令來配置用戶板的IP:

# ifconfig eth0 10.5.22.8

eth0 指網絡設備。需要注意的是,用戶板的IP地址需和宿主機的IP地址在同一網段,否則難以正常的訪問宿主機。

這時如果可以ping通宿主機,就可以通過FTP方式訪問宿主機的網絡資源了。

接下來選擇用戶程序的存放目錄。應注意,如果用戶板用的是romfs文件系統,那么只有少數幾個目錄可以訪問(如tmp ,var等)。選好存放目錄之后,就可以通過FTP方式訪問宿主機了,鍵入如下命令:

# cd  /tmp

# ftp 10.5.22.247

然后輸入用戶名和密碼以確定是否具有訪問權限,成功登陸之后,需要確定文件傳送格式。FTP可以用binary和ascii兩種方式來傳送文件,這里選擇的是binary方式。輸入以下指令來獲取文件:

# binary

# get filename

# bye

執行# bye后就可以退出FTP。這時可以鍵入ls命令來查看文件是否已經傳到選定的目錄下。接下來要做的是改變文件的權限,如果沒有可執行權限,在用戶板中就無法運行程序。

# chmod 755 filename

這里的參數“7”表示擁有讀、寫和執行的權限;“5”僅代表擁有讀和執行的權限。完成以上配置后,就可以用如下命令執行用戶程序了:

# ./filename

NFS方式

使 用NFS (NetWork File System)方式可以使嵌入式應用程序的開發和調試變得更為方便,并在不同的機器、不同的操作系統間共享文件,因此,NFS在嵌入式開發中得到了廣泛的 應用。目前,在mClinux-2.4-x版本下配置NFS相對比較困難,下面就配置問題進行詳細說明。

服務器(Sever)端的設置

首先需要設置 Linux下的/etc/exports文檔,它是NFS的主要設定文檔。在Linux下的shell終端,進行如下操作:

# vim /etc/exports

將這個默認的空文件修改為只有如下一行內容:

/home/tmp  *(rw,no_root_ squash)

這就表示在任何情況下,客戶端都可以訪問服務器端的/home/tmp目錄。

接下來要在服務器端開啟如下的兩個進程:

1.開啟NFS服務

# /etc/rc.d/init.d/nfs      start

啟動NFS服務:             [ OK ]

Starting NFS quotas:      [ OK ]

啟動NFS 守護進程:     [ OK ]

啟動NFS mounted :       [ OK ] 

2.開啟portmap服務

# /etc/rc.d/init.d/portmap    start

配置完成后,可用如下辦法簡單測試一下NFS是否配置成功(注意在Linux下要將防火墻關閉):在宿主機上自己mount自己,看是否成功。例如,在宿主機/目錄下執行:

mount 10.5.22.247:/root/   /home/zhang/mount

然后到/home/zhang/mount/目錄下看是否可以列出/root/目錄下的所有文件和目錄。若可以,則說明NFS在服務器端的配置成功。

客戶端(Client)的設置

相 對于Sever端的設置,Client端使用的是 mClinux, 設置起來相對復雜一些,需要對mClinux的內核重新編譯,并進行相關配置。需要設置Customize  Kernel Settings 和 Customize Vender/User Setings(NEW)兩項。

1. 對Customize  Kernel Settings進行配置

[ * ] Customize  Kernel Settings

進入File systems的設置,可以看到Network file systems---,將NFS File system support選中。

2.設置Customize Vender/User Setings(NEW)

[ * ] Customize Vender/User Setings(NEW)

在Customize Vender/User Setings 項目中,選擇Network Applications之后,需要其中的portmap服務,[*]  portmap即可。然后選擇mount和umount服務使mClinux支持mount和umount指令。mClinux-2.4-x的內核對 NFS mount的支持不夠,這使得在mClinux上添加NFS服務存在一些困難,而在較新的mClinux版本mClinux-2.6-x中重寫了對 NTFS文件系統的支持。在BusyBox中選擇mount和umount及mount NFS support三項即可,這樣客戶端的配置完成。最后重新編譯內核,指令如下:

# make menuconfig ------------- 內核配置

# make dep -------------尋找依存關系

# make clean------------清除以前構造內核時生成的文件

# make lib_only-----------該命令編譯庫文件

# make user_only----------編譯用戶應用程序文件

# make romfs ----------生成romfs文件系統 

# make image----------生成romfs.o文件

# make

重 新編譯后,會在.../image/目錄下生成image.rom文件,它是壓縮了的內核在rom的映像文件,將其燒寫到用戶板的Flash即可。用戶板 重新啟動之后,新的內核已經開始工作,這時就可以在終端里進行NFS mount了(以在minicom為例)。輸入如下指令:

#mount -t nfs 10.5.22.247:/home/tmp /var/tmp /nfsmount -o  nolock

# mount

執行完兩條指令后,在Linux下的minicom里會看到如下信息:

 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)

這樣就將宿主機的/home/tmp目錄掛載到了用戶板的/var/tmp目錄。

結語

通過以上兩種方式的比較,可以看到,就開發的效率來說,NFS的方式明顯具有優勢。畢竟,用戶開發的程序往往不能一次就調試成功,采用 NFS方式使得多人同時開發一個程序成為可能。事實上,除了文中提到的兩種方式以外,還有其它以太網環境下的嵌入式開發手段,如telnet等,限于篇 幅,不再詳細介紹。

? 江苏快3号码表