網路檔案系統(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:
#gedit /etc/exports
或者使用
#sudo gedit /etc/exports
在該檔案裡添加如下內容:
/nfsboot *(rw,sync,no_root_squash)
然後儲存退出。
添加的內容表示:允許ip 位址範圍是所有IP地址的電腦以讀寫的許可權來訪問/nfsboot 目錄。
/nfsboot 也稱為伺服器輸出共用目錄。
括弧內的參數意義描述如下:
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.1.20:/home/work /mnt
# ls /mnt
命令將Linux 伺服器的NFS 輸出共用目錄掛載到/mnt 目錄下,因此,如果NFS 正常工作,應該能夠在/mnt 目錄看到/home/work 共用目錄中的內容。
二、Linux核心裡添加NFS支援
三、在UBOOT裡設定啟動參數如下:
setenv bootargs noinitrd root=/dev/nfs console=ttySAC0 init=/init nfsroot=192.168.1.103:/nfsboot ip=192.168.1.20:192.168.1.103:192.168.1.1:255.255.255.0::eth0:on
通過上面的參數設定,就可避免去燒寫FLASH的過程,直接把電腦主機裡的目錄當作檔案系統,這樣可以方便修改測試任何程式,當完全調試完成後,就可以燒寫到FLASH裡載入並運行