ZDNetChina伺服器站 作業系統技巧 網絡檔案系統( 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 Configuration 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!”