1. 程式人生 > >用NFS掛載時引數解析及uboot設定

用NFS掛載時引數解析及uboot設定

NFS引數解析和uboot核心設定

setenv bootargs "root=/dev/nfs nfsroot=192.168.0.231:/forlinx/rootip=192.168.0.232:192.168.0.231:192.168.0.2 0 1:255.255.255.0:witech.com.cn:eth0ff console=ttySAC0,115200"

/dev/nfs    是固定的

192.168.0.231    PCLinux伺服器的IP

192.168.0.231:/forlinx/root        是被掛載的目錄192.168.0.232    是開發板的IP

192.168.0.201    是閘道器

IP //192.168.1.1

255.255.255.0    是子網掩碼

witech.com.cn     是名字,可以改

嵌入式linux的開發中,核心移植及根檔案系統的建立過程中,為了驗證核心移植是否成功,根檔案系統的建立是否可行,需要將它們的映像檔案燒寫到Flash中反覆試驗。如此頻繁地燒寫Flash,既浪費時間,減低了開發效率,還會對Flash造成損傷。因此在核心移植及根檔案系統的建立過程中一般採用網路引導。具體操作過程如下:一 Boot Loader環境變數及核心引數設定我的開發板的boot loader採用的是U-boot,其環境變數設定如下:Uboot> printenv

bootdelay=3baudrate=115200ethaddr=00:12:34:56:78:9aipaddr=192.168.0.9           serverip=192.168.0.1         netmask=255.255.255.0rootpath=/home/zht/rfsys       stdin=serialstdout=serialstderr=serialbootcmd=tftp 21000000 uImage;bootm 21000000     bootargs=root=/dev/nfs rw nfsroot=192.168.0.1:/home/zht/rfsys nfsaddrs=192.168.0.48: 192.168.0.1:192.168.0.1:255.255.255.0 console=ttyS0,115200 mem=32M   
① 設定目標板IP地址② 設定伺服器IP地址③ 設定根檔案系統在伺服器上的路徑,注意該路徑一定要設定為伺服器上的nfs目錄。④ bootcmdu-boot啟動後執行的命令,命令之間用分號分隔。   tftp 21000000 uImage 表示通過tftp 將核心映像下載到RAM中地址為0x21000000;   bootm 21000000 啟動linux作業系統⑤ 定義u-boot傳送給linux核心的命令列引數,該命令列指定以網路檔案系統作為根檔案系統。其中root=/dev/nfs,並非真的裝置,而是一個告訴核心經由網路取得根檔案系統的旗標。引數nfsroot這個引數告訴核心以那一臺機器,那個目錄以及那個網路檔案系統選項作為根檔案系統使用。引數的格式如下:nfsroot=[:][,]如果指令列上沒有給定 nfsroot 引數,則將使用/tftpboot/%s預設值。其它選項如下:--指定網路檔案系統服務端的網際網路地址(IP address)。如果沒有給定此欄位,則使用由 nfsaddrs 變數(見下面)所決定的值。此引數的用途之一是允許使用不同機器作為反向地址解析協議(RARP) 及網路檔案系統服務端。通常你可以不管它(設為空白)。-- 服務端上要作為根掛入的目錄名稱。如果字串中有個%s’ 符記(token),此符記將代換為客戶端網際網路地址之 ASCII 表示法。-- 標準的網路檔案系統選項。所有選項都以逗號分開。如果沒有給定此選項欄位則使用下列的預設值:        port            = as given by server portmap daemon        rsize           = 1024        wsize           = 1024        timeo           = 7        retrans         = 3        acregmin        = 3        acregmax        = 60        acdirmin        = 30        acdirmax        = 60        flags           = hard, nointr, noposix, cto, ac引數nfsaddrs設定網路通訊所需的各種網路介面地址。如果沒有給定這個引數,則核心核會試著使用反向地址解析協議以及/或是啟動協議(BOOTP)以找出這些引數。其格式如下:        nfsaddrs=::::::-- 客戶端的網際網路地址。如果沒設,此地址將由反向地址解析協議或啟動協議來決定。使用何種協議端視配置核心時開啟的選項以及  引數而定。如果設定此引數,就不會使用反向地址解析協議或啟動協議。-- 網路檔案系統服務端之網際網路地址。如果使用反向地址解析協議來決定客戶端地址並且設定此引數,則只接受從指定之服務端傳來的迴應。要使用不同的機器作為反向地址解析與網路檔案系統服務端的話,在此指定你的反向地址解析協議服務端(保持空白)並在 nfsroot 引數(見上述)中指定你的網路檔案系統服務端。如果此專案空白則使用回答反向地址解析協議或啟動協議之服務端的地址。-- 閘道器(gateway)之網際網路地址,若服務端位於不同的子網路上時。如果此專案空白則不使用任何閘道器並假設服務端在本地的(local)網路上,除非由啟動協議接收到值。-- 本地網路介面的網路掩碼。如果為空白,則網路掩碼由客戶端的網際網路地址匯出,除非由啟動協議接收到值。-- 客戶端的名稱。如果空白,則使用客戶端網際網路地址之 ASCII-標記法,或由啟動協議接收的值。-- 要使用的網路裝置名稱。如果為空白,所有裝置都會用來發出反向地址解析請求,啟動協議請求由最先找到的裝置發出。網路檔案系統使用接收到反向地址解析協議或啟動協議迴應的裝置。如果你只有一個裝置那你可以不管它。-- 用以作為自動配置的方法。如果是 `rarp\" 或是 `bootp\" 則使用所指示的協議。如果此值為 `both\" 或空白,若配置核心時有開啟這兩種協議則都使用。 `none\" 表示不使用自動配置。這種情況下你必須指定前述欄位中所有必要的值。此  引數可以作為 nfsaddrs 的引數單獨使用(前面沒有任何 `:` 字元),這種情況下會使用自動配置。然而,此種情況不能使用 `none\"作為值。

 核心配置要求新增核心對NFS的支援:選中networking options-》IP:kernel level auloconfiguralion選中file systems-》network file systems-》下的root file system on nfs nfs file system support

 NFS伺服器配置

root身份登陸Linux伺服器,編輯/etc目錄下的共享目錄配置檔案exports,指定共享目錄及許可權等。

執行如下命令編輯檔案/etc/exports# vi /etc/exports在該檔案裡新增如下內容:/home/zht/rfsys 192.168.0.*(rw,sync,no_root_squash)編輯完過後儲存退出,然後執行命令exports rav檢查輸入是否正確。新增的內容表示:允許ip地址範圍在192.168.0.*的計算機以讀寫的許可權來訪問/home/zht/rfsys目錄。/home/work也稱為伺服器輸出共享目錄。括號內的引數意義描述如下:rw:讀/寫許可權,只讀許可權的引數為rosync:資料同步寫入記憶體和硬碟,也可以使用async,此時資料會先暫存於記憶體中,而不立即寫入硬碟。no_root_squashNFS伺服器共享目錄使用者的屬性,如果使用者是 root,那麼對於這個共享目錄來說就具有 root 的許可權。接著執行如下命令,啟動埠對映:# /etc/rc.d/init.d/portmap start最後執行如下命令啟動NFS服務,此時NFS會啟用守護程序,然後就開始監聽 Client 端的請求:# /etc/rc.d/init.d/nfs startNFS伺服器啟動後,還需要檢查Linux伺服器的防火牆等設定(一般需要關閉防火牆服務,執行iptables -F),確保沒有遮蔽掉NFS使用的埠和允許通訊的主機,主要是檢查Linux伺服器iptablesipchains等選項的設定,以及/etc/hosts.deny/etc/hosts.allow檔案。我們首先在Linux伺服器上進行NFS伺服器的迴環測試,驗證共享目錄是否能夠被訪問。在Linux伺服器上執行如下命令# mount t nfs 192.168.0.20: /home/zht/rfsys  /mnt# ls /mnt命令將Linux伺服器的NFS輸出共享目錄掛載到/mnt目錄下,因此,如果NFS正常工作,應該能夠在/mnt目錄看到/home/work共享目錄中的內容。

 TFTP伺服器的配置root使用者登入,執行setup命令#setup選擇Systme services,選擇tftp開啟tftp配置檔案/etc/xinetd.d/tftpserver_args設定為核心映像檔案所在目錄,預設為/tftpboot我的核心映像在/home/zht/sources/kernel/linux-2.4.27目錄中,設定如下:service tftp{        disable = no        socket_type             = dgram        protocol                = udp        wait                    = yes        user                    = root        server                  = /usr/sbin/in.tftpd        server_args             = -s /home/zht/sources/kernel/linux-2.4.27        per_source              = 11        cps                     = 100 2        flags                   = IPv4}重新啟動PC linux作業系統或者執行service xinetd restart命令啟動tftp伺服器。執行netstat -a | grep tftp 可以檢視tftp伺服器是否配置成功。