從nfs啓動的話,要具有的條件是:html
a. 你的uboot支持網絡;linux
b. 你的宿主機的nfs已經啓動,並能夠被正常掛載;ubuntu
c. 你的宿主機的tftp已經啓動,並能夠從上面下載(也能夠直接把你編譯的支持nfs啓動的內核燒進開發板去,這樣就直接啓動開發板就能夠了)小程序
要作的事有:服務器
這裏只講從nfs啓動須要的選項,其餘的選項請參考其餘博客上的內核配置的文章;網絡
要用nfs文件系統的話配置內核的時候,必須選上:app
File Systems -->測試
Network File Systems -->spa
Root file system on NFS; (這個必須選上).net
以上是完整的選項路徑
而後編輯.config,找到CONFIG_CMDLINE="",而後設置成
CONFIG_CMDLINE="root=/dev/nfs nfsroot=宿主機ip:nfs目錄 ip=開發板ip rw console=ttySAC0 mem=256M"
我設置參考:
CONFIG_CMDLINE="root=/dev/nfs nfsroot=192.1.1.231:/nfs ip=192.1.1.119 rw console=ttySAC0 mem=256M"
配置好了以後編譯內核,而後把內核放到tftp目錄下,以供啓動時下載內核;
設置ip,這裏的ip要和你配置內核時設置的一致,設置子網掩碼,網關;
而後還要設置一個bootargs;設置爲:
setenv bootargs "root=/dev/nfs nfsroot=宿主機ip:/nfs目錄 開發板ip:子網掩碼:eth0:off console=ttySAC0,115200"
個人配置參考:
setenv bootargs "root=/dev/nfs nfsroot=192.1.1.231:/nfs ip=192.1.1.119:255.255.255.0:eth0:off console=ttySAC0,115200"
saveenv,而後reset,在uboot處停住,printenv 看一下有沒有保存配置;若已保存則下一步。
停在uboot的時候,先從tftp服務器下載uImage,把它下載到內存:
tftp c0800000 uImage
而後從內存啓動內核:
bootm c0800000
啓動完畢就能夠在串口超級終端操做你的開發板了。
以上來源與: <http://blog.sina.com.cn/s/blog_77c2e1cb0101hs29.html>
我在掛載的時候出現了以下的錯誤:
s3c6400_setup_sdhci_cfg_card: CTRL 2=c0004120, 3=80808080
rpcbind: server 192.1.1.108 not responding, timed out
Root-NFS: Unable to get nfsd port number from server, using default
Looking up port of RPC 100005/1 on 192.1.1.108
rpcbind: server 192.1.1.108 not responding, timed out
Root-NFS: Unable to get mountd port number from server, using default
Root-NFS: Server returned error -101 while mounting /ok6410/FileSystem/rootfs
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0)
Please append a correct "root=" boot option; here are the available partitions:
b300 3813376 mmcblk0 driver: mmcblk
b301 3710976 mmcblk0p1
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[<c002c694>] (unwind_backtrace+0x0/0xec) from [<c033a3d8>] (panic+0x54/0x174)
[<c033a3d8>] (panic+0x54/0x174) from [<c0009040>] (mount_block_root+0x1d0/0x210)
[<c0009040>] (mount_block_root+0x1d0/0x210) from [<c00092d8>] (prepare_namespace+0x164/0x1bc)
[<c00092d8>] (prepare_namespace+0x164/0x1bc) from [<c00085f4>] (kernel_init+0x10c/0x14c)
[<c00085f4>] (kernel_init+0x10c/0x14c) from [<c0027e2c>] (kernel_thread_exit+0x0/0x8)
開發板能夠加載內核,可是不可以掛載NFS文件系統,可能出現的問題是:
1. 本身製做的內核有問題
2. 本身虛擬機上linux的nfs配置的有問題
首先檢測下linux的NFS是否正常,個人虛擬機軟件裏面有兩個linux,一個是ubuntu(ip = 192.1.1.108),一個是RedHat(ip = 192.1.1.231),兩個處於同一個網段,並且能夠相互ping通,ubuntu上的nfs能夠用命令:mount -t nfs 192.1.1.108:/ok6410/FileSystem/rootfs /mnt
它的/etc/exports的內容以下:
ubuntu本身將nfs目錄掛載到/mnt下面成功:
用RedHat掛載ubuntu上的nfs也成功了:
這就是說ubuntu的NFS是成功安裝了,外部的終端能夠掛載nfs根目錄。(能夠用別人跑着linux的開發板來遠程mount一下ubuntu的nfs,應該是能夠的),因此問題應該是處在了內核的編譯上面。
我在網上下載了一個能夠引導NFS的內核,在開發板上試驗:
先設置開發板參數:
setenv bootargs "root=/dev/nfs rw nfsroot=192.1.1.231:/nfs ip=192.1.1.119:255.255.255.0:eth0:off console=ttySAC0,115200"
保存參數:
saveenv
(下載並啓動內核:nfs c0800000 192.1.1.231:/nfs/uImage3.0;bootm c0800000)
下載內核:
tftp c0800000 uImage3.0
啓動內核:
bootm c0800000
其中服務器linux中/etc/exports內容以下:
nfs目錄內容:
開發板啓動的界面:
測試一個小程序:
在/nfs下新建hello.c
編譯:arm-linux-gcc -static hello.c -o hello
開發板上執行:
./hello
===========================================================================
開發板的參數:
下載內核:
nfs c0800000 192.1.1.108:/ok6410/FileSystem/rootfs/uImage3.0;bootm c0800000
可是仍是出錯了:
這就是ubuntu的NFS有問題了,查看/etc/exports的內容:
修改爲:
而後重啓nfs服務:
/etc/init.d/nfs-kernel-server restart
在下載測試:
仍是有問題:
不知道什麼緣由。。。。。。。。。。。。得再查查錯誤