網絡文件系統(NFS,Network File System)是一種將遠程主機上的分區(目錄)經網絡掛載到本地系統的一種機制,通過對網絡文件系統的支持,用戶可以在本地系統上像操作本地分區一樣來對遠程主機的共享分區(目錄)進行操作。
在嵌入式Linux的開發過程中,開發者需要在Linux服務器上進行所有的軟件開發,交叉編譯后,通用FTP方式將可執行文件下載到嵌入式系統運行,但這種方式不但效率低下,且無法實現在線的調試。因此,可以通過建立 NFS,把 Linux服務器上的特定分區共享到待調試的嵌入式目標系統上,就可以直接在嵌入式目標系統上操作Linux服務器,同時可以在線對程序進行調試和修改,大大的方便了軟件的開發。因此,NFS的是嵌入式Linux開發的一個重要的組成部分,本部分內容將詳細說明如何配置嵌入式Linux的NFS開發環境。
嵌入式Linux的NFS開發環境的實現包括兩個方面:一是Linux服務器端的NFS服務器支持;二是嵌入式目標系統的NFS客戶端的支持。因此,NFS開發環境的建立需要配置Linux服務器端和嵌入式目標系統端。
一、Linux服務器端NFS服務器的配置
以root身份登陸Linux服務器,編輯/etc目錄下的共享目錄配置文件exports,指定共享目錄及權限等。
執行如下命令編輯文件/etc/exports:
#vi/etc/exports
在該文件里添加如下內容:
/home/work 192.168.0.*(rw,sync,no_root_squash)然后保存退出。
添加的內容表示:允許ip地址范圍在192.168.0.*的計算機以讀寫的權限來訪問/home/work目錄。
/home/work也稱為服務器輸出共享目錄。
參數意義描述如下:
rw:讀/寫權限,只讀權限的參數為 ro;
sync:數據同步寫入內存和硬盤,也可以使用 async,此時數據會先暫存于內存中,而不立即寫入硬盤。
no_root_squash:NFS服務器共享目錄用戶的屬性,如果用戶是 root,那么對于這個共享目錄來說就具有root的權限。
接著執行如下命令,啟動端口映射:
#/etc/rc.d/init.d/portmap start
最后執行如下命令啟動NFS服務,此時NFS會激活守護進程,然后就開始監聽 Client端的請求:
#/etc/rc.d/init.d/NFS start
用戶也可以重新啟動Linux服務器,自動啟動NFS服務。
在NFS服務器啟動后,還需要檢查Linux服務器的防火墻等設置(一般需要關閉防火墻服務),確保沒有屏蔽掉NFS使用的端口和允許通信的主機,主要是檢查Linux服務器 iptables,ipchains等選項的設置 , 以 及 /etc/hosts.deny,/etc/hosts.allow文件。
我們首先在Linux服務器上進行NFS服務器的回環測試,驗證共享目錄是否能夠被訪問。在Linux服務器上運行如下命令:
# mount t NFS 192.168.0.20:/home/work/mnt
#ls/mnt
命令將Linux服務器的NFS輸出共享目錄掛載到/mnt目錄下,因此,如果NFS正常工作,應該能夠在/mnt目錄看到/home/work共享目錄中的內容。
二、嵌入式目標系統NFS客戶端的配置
在Linux服務器設置好后,還需要對客戶端進行相關配置。在配置內核時選擇Load an Alternate Configu ration File輸入配置文件的路徑和文件名添加內核對NFS的支持:
選 中 networking options-IP:kernel level auloconfiguralion項選中file systems-network file systems- 下的root file system on NFS和NFS file system support重新編譯內核下載bootloader和kernel到開發板上。
在嵌入式目標系統的Linux Shell下,執行如下命令來進行 NFS共享目錄掛載:
#mkdir/mnt/NFS//建立Linux服務器輸出共享目錄的掛載點;
# mount t NFS 192.168.0.20:/home/work/mnt/NFS o nolock
#cd/mnt/NFS
#ls
此時,嵌入式目標系統端所顯示的內容即為Linux服務器的輸出目錄的內容,即Linux服務器的輸出目。
錄/home/work通過NFS映射到了嵌入式目標系統的/mnt/NFS目錄。用戶可以用增/刪/修改文件的方式來驗證實際效果。mount命令中的192.168.0.20為Linux服務器的IP地址,/home/work為Linux服務器端所配置的共享輸出目錄,/mnt/NFS為嵌入式設備上的本地目錄。
在開發過程中,來回輸入命令非常煩人,這里寫了兩個簡單的腳本來完成NFS的啟動,掛載。
host啟動 NFS:
sNFS
#!/bin/bash
ifconfig eth0 192.168.0.20
/etc/rc.d/init.d/portmap start/etc/rc.d/init.d/NFS start
嵌入式目標機掛載NFS:
mNFS:
#!/bin/sh
mount -t NFS 192.168.0.20:/home/work/NFS /mnt/NFS -o nolock
echo“NFS ok!”