補充:OK6410從nfs啓動

從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的內容以下:

21684778

ubuntu本身將nfs目錄掛載到/mnt下面成功:

21818050

用RedHat掛載ubuntu上的nfs也成功了:

21880466

這就是說ubuntu的NFS是成功安裝了,外部的終端能夠掛載nfs根目錄。(能夠用別人跑着linux的開發板來遠程mount一下ubuntu的nfs,應該是能夠的),因此問題應該是處在了內核的編譯上面。

我在網上下載了一個能夠引導NFS的內核,在開發板上試驗:

RedHat上試驗(成功):

先設置開發板參數:

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

40912557

啓動內核:

bootm c0800000

40985362

其中服務器linux中/etc/exports內容以下:

24233398

nfs目錄內容:

24246080

開發板啓動的界面:

24079191

測試一個小程序:

在/nfs下新建hello.c

編譯:arm-linux-gcc -static hello.c -o hello

24800102

開發板上執行:

./hello

24833112

===========================================================================

在ubuntu上測試(作不出來):

25131917

開發板的參數:

25160137

下載內核:

nfs c0800000 192.1.1.108:/ok6410/FileSystem/rootfs/uImage3.0;bootm c0800000

25209090

可是仍是出錯了:

25441454

這就是ubuntu的NFS有問題了,查看/etc/exports的內容:

25509299

修改爲:

25593399

而後重啓nfs服務:

/etc/init.d/nfs-kernel-server restart

在下載測試:

仍是有問題:

25727560

不知道什麼緣由。。。。。。。。。。。。得再查查錯誤

相關文章
相關標籤/搜索