|
這幾天弄了塊9200的新板,板子和PC直連,掛載NFS根文件系統(tǒng)OK,可時用路由器(D-LINK的)了之后,NFS根文件系統(tǒng)掛接總是有問題:
nfs: server 192.168.0.114 not responding nfs: server 192.168.0.114 not responding
nfs: server 192.168.0.114 OK
總是時一會連上,一會掉,這樣反反復復。
感覺時丟包引起。設置U-BOOT環(huán)境變量:
bootargs=root=/dev/nfs nfsroot=192.168.0.114:/home/rootfs/nfs,rsize=1500,wsize=1
500 ip=192.168.0.113:192.168.0.114:192.168.0.2:255.255.255.0 console=tty0 ttyS0,115200 mem=64M 增加rsize和wsize參數(shù),增加塊大小(默認為1024),我猜想可以減小丟包概率。改了之后,果然還可以了。
引用網(wǎng)上一篇文章供自己參考:
嵌入式linux的開發(fā)中,內(nèi)核移植及根文件系統(tǒng)的建立過程中,為了驗證內(nèi)核移植是否成功,根文件系統(tǒng)的建立是否可行,需要將它們的映像文件燒寫到Flash中反復試驗。如此頻繁地燒寫Flash,既浪費時間,減低了開發(fā)效率,還會對Flash造成損傷。因此在內(nèi)核移植及根文件系統(tǒng)的建立過程中一般采用網(wǎng)絡引導。具體操作過程如下: 一 Boot Loader環(huán)境變量及內(nèi)核參數(shù)設置 我的開發(fā)板的boot loader采用的是U-boot,其環(huán)境變量設置如下: Uboot> printenv bootdelay=3 baudrate=115200 ethaddr=00:12:34:56:78:9a ipaddr=192.168.0.9 ① serverip=192.168.0.1 ② netmask=255.255.255.0 rootpath=/home/zht/rfsys ③ stdin=serial stdout=serial stderr=serial bootcmd=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地址 ③ 設置根文件系統(tǒng)在服務器上的路徑,注意該路徑一定要設定為服務器上的nfs目錄。 ④ bootcmd是u-boot啟動后執(zhí)行的命令,命令之間用分號分隔。 tftp 21000000 uImage 表示通過tftp 將內(nèi)核映像下載到RAM中地址為0x21000000; bootm 21000000 啟動linux操作系統(tǒng) ⑤ 定義u-boot傳送給linux內(nèi)核的命令行參數(shù),該命令行指定以網(wǎng)絡文件系統(tǒng)作為根文件系統(tǒng)。 其中root=/dev/nfs,并非真的設備,而是一個告訴內(nèi)核經(jīng)由網(wǎng)絡取得根文件系統(tǒng)的旗標。 參數(shù)nfsroot這個參數(shù)告訴內(nèi)核以那一臺機器,那個目錄以及那個網(wǎng)絡文件系統(tǒng)選項作為根文件系統(tǒng)使用。參數(shù)的格式如下: nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] 如果指令列上沒有給定 nfsroot 參數(shù),則將使用‘/tftpboot/%s’預設值。其它選項如下: <server-ip> --指定網(wǎng)絡文件系統(tǒng)服務端的互聯(lián)網(wǎng)地址(IP address)。如果沒有給定此欄位,則使用由 nfsaddrs 變量(見下面)所決定的值。此參數(shù)的用途之一是允許使用不同機器作為反向地址解析協(xié)議(RARP) 及網(wǎng)絡文件系統(tǒng)服務端。通常你可以不管它(設為空白)。 <root-dir> -- 服務端上要作為根掛入的目錄名稱。如果字串中有個‘%s’ 符記(token),此符記將代換為客戶端互聯(lián)網(wǎng)地址之 ASCII 表示法。 <nfs-options> -- 標準的網(wǎng)絡文件系統(tǒng)選項。所有選項都以逗號分開。如果沒有給定此選項欄位則使用下列的預設值: 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 參數(shù)nfsaddrs設定網(wǎng)絡通訊所需的各種網(wǎng)絡接口地址。如果沒有給定這個參數(shù),則內(nèi)核核會試著使用反向地址解析協(xié)議以及/或是啟動協(xié)議(BOOTP)以找出這些參數(shù)。其格式如下: nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto> <my-ip> -- 客戶端的互聯(lián)網(wǎng)地址。如果沒設,此地址將由反向地址解析協(xié)議或啟動協(xié)議來決定。使用何種協(xié)議端視配置核心時打開的選項以及 <auto> 參數(shù)而定。如果設定此參數(shù),就不會使用反向地址解析協(xié)議或啟動協(xié)議。 <serv-ip> -- 網(wǎng)絡文件系統(tǒng)服務端之互聯(lián)網(wǎng)地址。如果使用反向地址解析協(xié)議來決定客戶端地址并且設定此參數(shù),則只接受從指定之服務端傳來的回應。要使用不同的機器作為反向地址解析與網(wǎng)絡文件系統(tǒng)服務端的話,在此指定你的反向地址解析協(xié)議服務端(保持空白)并在 nfsroot 參數(shù)(見上述)中指定你的網(wǎng)絡文件系統(tǒng)服務端。如果此項目空白則使用回答反向地址解析協(xié)議或啟動協(xié)議之服務端的地址。 <gw-ip> -- 網(wǎng)關(gateway)之互聯(lián)網(wǎng)地址,若服務端位於不同的子網(wǎng)絡上時。如果此項目空白則不使用任何網(wǎng)關并假設服務端在本地的(local)網(wǎng)絡上,除非由啟動協(xié)議接收到值。 <netmask> -- 本地網(wǎng)絡界面的網(wǎng)絡掩碼。如果為空白,則網(wǎng)絡掩碼由客戶端的互聯(lián)網(wǎng)地址導出,除非由啟動協(xié)議接收到值。 <name> -- 客戶端的名稱。如果空白,則使用客戶端互聯(lián)網(wǎng)地址之 ASCII-標記法,或由啟動協(xié)議接收的值。 <dev> -- 要使用的網(wǎng)絡設備名稱。如果為空白,所有設備都會用來發(fā)出反向地址解析請求,啟動協(xié)議請求由最先找到的設備發(fā)出。網(wǎng)絡文件系統(tǒng)使用接收到反向地址解析協(xié)議或啟動協(xié)議回應的設備。如果你只有一個設備那你可以不管它。 <auto> -- 用以作為自動配置的方法。如果是 `rarp' 或是 `bootp' 則使用所指示的協(xié)議。如果此值為 `both' 或空白,若配置核心時有打開這兩種協(xié)議則都使用。 `none' 表示不使用自動配置。這種情況下你必須指定前述欄位中所有必要的值。 此 <auto> 參數(shù)可以作為 nfsaddrs 的參數(shù)單獨使用(前面沒有任何 `:` 字符),這種情況下會使用自動配置。然而,此種情況不能使用 `none'作為值。 二 內(nèi)核配置要求 添加內(nèi)核對NFS的支持: 選中networking options-》IP:kernel level auloconfiguralion項 選中file systems-》network file systems-》下的root file system on nfs 和nfs file system support (必須選擇,否則網(wǎng)絡文件系統(tǒng)掛接不上) 三 TFTP服務器的配置 以root用戶登錄,運行setup命令 #setup 選擇Systme services,選擇tftp。 打開tftp配置文件/etc/xinetd.d/tftp 將server_args設定為內(nèi)核映像文件所在目錄,默認為/tftpboot 我的內(nèi)核映像在/home/zht/sources/kernel/linux-2.4.27目錄中,設定如下: cc>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操作系統(tǒng)或者運行service xinetd restart命令啟動tftp服務器。 運行netstat -a | grep tftp 可以查看tftp服務器是否配置成功。 四 NFS服務器的配置 以root身份登陸Linux服務器,編輯/etc目錄下的共享目錄配置文件exports,指定共享目錄及權限等。 執(zhí)行如下命令編輯文件/etc/exports: # vi /etc/exports 在該文件里添加如下內(nèi)容: /home/zht/rfsys 192.168.0.*(rw,sync,no_root_squash) 編輯完過后保存退出,然后運行命令exports –rav檢查輸入是否正確。 添加的內(nèi)容表示:允許ip地址范圍在192.168.0.*的計算機以讀寫的權限來訪問/home/zht/rfsys目錄。/home/work也稱為服務器輸出共享目錄。 括號內(nèi)的參數(shù)意義描述如下: rw:讀/寫權限,只讀權限的參數(shù)為ro; sync:數(shù)據(jù)同步寫入內(nèi)存和硬盤,也可以使用async,此時數(shù)據(jù)會先暫存于內(nèi)存中,而不立即寫入硬盤。 no_root_squash:NFS服務器共享目錄用戶的屬性,如果用戶是 root,那么對于這個共享目錄來說就具有 root 的權限。 接著執(zhí)行如下命令,啟動端口映射: # /etc/rc.d/init.d/portmap start 最后執(zhí)行如下命令啟動NFS服務,此時NFS會激活守護進程,然后就開始監(jiān)聽 Client 端的請求: # /etc/rc.d/init.d/nfs start 在NFS服務器啟動后,還需要檢查Linux服務器的防火墻等設置(一般需要關閉防火墻服務,執(zhí)行iptables -F),確保沒有屏蔽掉NFS使用的端口和允許通信的主機,主要是檢查Linux服務器iptables,ipchains等選項的設置,以及/etc/hosts.deny,/etc/hosts.allow文件。 我們首先在Linux服務器上進行NFS服務器的回環(huán)測試,驗證共享目錄是否能夠被訪問。在Linux服務器上運行如下命令: # mount –t nfs 192.168.0.20: /home/zht/rfsys /mnt # ls /mnt 命令將Linux服務器的NFS輸出共享目錄掛載到/mnt目錄下,因此,如果NFS正常工作,應該能夠在/mnt目錄看到/home/work共享目錄中的內(nèi)容。 五 將內(nèi)核映像文件uImage拷貝到/tftpboot目錄,建立的根文件系統(tǒng)拷貝到/home/zht/rfsys目錄中。然后重新啟動目標板。 文章出處:飛諾網(wǎng)(www.):http://dev./course/6_system/linux/Linuxjs/2008831/139066_2.html |
|
|
來自: iceberg_horn > 《ARM9200》