歡迎您光臨本站 註冊首頁

嵌入式linux的NFS開發環境的建立及配置實例

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

  在應用程序開發環節,NFS方式比ftp方式的執行效率要高,因為它不需要將linux server端的程序下載到嵌入式目標系統就可以調試。下面先將NFS建立的詳細過程寫一下,然後舉一個簡單的應用程序開發實例來比較ftp方式和nfs方式的不同。

1 建立NFS開發環境

嵌入式linux的NFS開發環境包含著兩個方面:一是linux server端的NFS Server支持;二是target board的NFS Client支持。

1.1 linux server端

1.1.1 以root的身份登錄,編譯共享目錄的配置文件exports,指定共享目錄及其許可權。
#vi /etc/exports
在該文件中添加:
/home/lqm(共享目錄) 192.168.1.*(rw,sync,no_root_squash)
添加的內容表示允許IP範圍在192.168.1.*的計算機以讀寫的許可權來訪問共享目錄/home/lqm。
【註:參數說明如下:
rw---讀/寫許可權。如果設定只讀許可權,則設為ro。但是一般情況下,為了方便交互,要設置為rw。
sync--數據同步寫入內存和硬碟。
no_root_squash--此參數用來要求伺服器允許遠程系統以它自己的root特權存取該目錄。就是說,如果用戶是root,那麼他就對這個共享目錄有root的許可權。很明顯,該參數授予了target board很大的權利。安全性是首先要考慮的,可以採取一定的保護機制,在下面會講一下保護機制。如果使用默認的root_squash,target board自己的根文件系統可能有很多無法寫入,所以運行會受到極大的限制。在安全性有所保障的前提下,推薦使用no_root_squash參數。】

1.1.2 起用保護機制
可以通過設定/etc/hosts.deny和/etc/hosts.allow文件來限制網路服務的存取許可權。
***/etc/hosts.deny***
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
***/etc/hosts.allow***
portmap:192.168.1.100
lockd:192.168.1.100
mountd:192.168.1.100
rquotad:192.168.1.100
statd:192.168.1.100
同時使用這兩個文件就會使得只有ip為192.168.1.100的機器使用NFS服務。你的target board的ip地址設定為192.168.1.100,這樣就可以了。

1.1.3 啟動
首先要啟動portmapper(埠映射)服務,這是NFS本身需要的。
#/etc/init.d/portmap start
然後啟動NFS Server。此時NFS會激活守護進程,然後開始監聽客戶端的請求。
#/etc/init.d/nfs start
NFS Server啟動后,還要檢查一下linux server的iptables等,確定沒有屏蔽NFS使用的埠和允許通信的主機。
可以首先在linux server上面進行NFS的迴環測設。修改/etc/hosts.allow,把ip改為linux server的ip地址,然後在linux server上執行命令:
#mount -t nfs :/home/lqm /mnt
#ls /mnt
如果NFS Server正常工作,應該在/mnt下面看到共享目錄/home/lqm的內容。

1.2 target board端的client

1.2.1 嵌入式linux內核應該支持NFS客戶端。

內核配置時,選擇如下:
File system--> Network File Systems-->
選中NFS System support和Provide NFSvs client support,然後保存退出,重新編譯內核,將生成的zImage重新下載到target board。

1.2.2 在target board的linux shell下,執行下列命令來進行NFS共享目錄的掛載。
#mkdir /mnt/nfs
#mount -o nolock -t nfs :/home/lqm /mnt/nfs
#ls /mnt/nfs
由於很多嵌入式設備的根文件系統中不帶portmap,所以一般都使用-o nolock參數,即不使用NFS文件鎖,這樣就可以避免使用portmap。如果順利,在/mnt/nfs下,就可以看到linux server的共享文件夾下的內容了,而且兩個文件夾內的修改是同步的。

2 應用程序實例

編寫一個簡單的C程序test.c
-------------------------------------------
/*This is a test program.*/
int main(void)
{
int i;
for(i=0;i<10;i++)
printf("Hello World %d times.\n",i);
return 0;
}
-------------------------------------------
編譯該程序:
#arm-linux-gcc -o test test.c

2.1 FTP方式

首先將test下載到target board。啟動target board的linux,在超級終端中執行:
#cd /var
#ftp
ftp>bin //以binary mode傳輸文件
ftp>get test
ftp>exit
然後修改文件屬性:
#chmod +x test
#./test
這時可以查看結果了。

2.2 NFS方式

在target board端掛載linux server的共享輸出目錄,並且運行程序。
#mkdir /mnt/nfs
#mount -o nolock -t nfs :/home/lqm /mnt/nfs
#ls /mnt/nfs
這時應該可以顯示linux server的共享目錄的內容。然後執行:
#./test

3 總結

這兩種方式在應用程序不是特別複雜時區別不是很大,但是當開發程序比較複雜時,採用NFS方式顯然效率要高得多。完成應用程序得開發,調試好后就可以下載到嵌入式目標板的flash文件系統,或者直接編譯到嵌入式linux內核並且燒寫到flash,從而最終成為一個獨立的嵌入式應用程序。
---------------------------------------
參考書目:《building embedded linux systems》
《嵌入式linux系統開發詳解--基於EP93XX系列ARM》
這兩本書在過程上都比較細緻,很適合初學者學習。在實踐熟悉的基礎上,提升理論高度,這是我所認可的學習方法。

[火星人 ] 嵌入式linux的NFS開發環境的建立及配置實例已經有1067次圍觀

http://coctec.com/docs/linux/show-post-189690.html