檔案系統 | 如何使用網路根檔案系統啟動開發板?
1.1 開發板通過串列埠連線至Windows主機
1.2 在Windows主機上開啟虛擬機器Ubuntu主機
1.3 已製作好的網路根檔案系統為:Ubuntu主機的 /work/nfs_root/ 這個目錄
1.4 通過 $ ifconfig 命令確定Ubuntu主機IP為192.168.0.7
2.Ubuntu主機上的操作
2.1 檢視是否安裝nfs伺服器
$ sudo apt-get install nfs-kernel-server
我們看到“nfs-kernel-server is already the newest version. ”,說明已安裝
2.2 修改伺服器的配置檔案
伺服器的配置是放在/etc/exports這個檔案下的,編輯它即可
$ sudo vi /etc/exports
加上如下一行,把我們想作為根檔案系統的目錄/work/nfs_root/放進去,並作配置,然後儲存退出:
/work/nfs_root *(rw,sync,no_root_squash)
2.3 重啟nfs伺服器
$ sudo /etc/init.d/nfs-kernel-server restart
可以看到,exportfs: /etc/exports……/work/nfs_root,說明/work/nfs_root/這個目錄已經作為exportfs(輸出檔案系統)了,當然我們也可以通過這個命令來檢視
$ showmount -e
可以看到一個export list,下面就有“/work/nfs_root”這個目錄
3.開發板上的操作
3.1 啟動開發板進入Uboot
3.2 檢視配置資訊
(這一步是為了後面能重新通過設定uboot引數來重新實現從flash啟動)
OpenJTAG> print
記錄下bootargs
“bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0”
3.3 設定bootargs,並儲存
OpenJTAG> set bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.7:/work/nfs_root
ip=192.168.0.17:192.168.0.7:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
OpenJTAG> save
3.4 重啟開發板
這時候開發板就以網路根檔案系統來啟動了,也就是說,在Ubuntu主機上的/work/nfs_root/這個目錄現在成了開發板的根目錄。
讓我們來驗證一下:
在Ubuntu主機的/work/nfs_root/,建立一個名為“666haha”的檔案
$ cd /work/nfs_root/
$ touch 666haha
然後我們在串列埠介面下檢視開發板的根目錄,看一下這個檔案是否存在
# ls 666haha -l
可見它在開發板的根目錄下也是存在的
現在,通過串列埠我們在根目錄下把它刪除
# rm 666haha
然後,回到Ubuntu主機上的/work/nfs_root/目錄檢視一下是否也是刪除掉了
$ ls /work/nfs_root/666haha -l
我們可以看到如下資訊:
ls: cannot access 666haha: No such file or directory
即這個檔案已經不見了
由此可見,我們在開發板的根目錄下的操作,和我們在Ubuntu主機的/work/nfs_root/目錄下的操作是同步的
說明1. bootargs
說明2. 開發板的Linux IP和Uboot IP
我們在設定bootargs的時候用的是Linux系統下的IP,而非Uboot下的"ipaddr"!兩者有何區別?
在3.2裡,我們在Uboot輸入print命令後可看到如下一行:
ipaddr=192.168.0.16
這個就是Uboot IP
而Linux IP和Uboot IP是兩個獨立的IP,可以不一樣(當然也可以一樣)。那麼它是怎麼來的?
其實是我們在構建根檔案系統的時候設定好的,它放在Ubuntu主機的/work/nfs_root/etc/init.d/rcS這個檔案裡
$ cd work/nfs_root/etc/init.d
$ vi rcS
檢視這個檔案(它其實就是一個shell指令碼),有如下一行:
ifconfig eth0 192.168.0.17
當開發板從uboot跳入kernel,開始進行初始化的時候,就會呼叫這個指令碼,這時候開發板的Linux IP就被設定好了
問題:如何改為重新由NandFlash啟動根目錄?
還記得在3.2裡面記錄的資訊嗎?
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
稍微修改一下:
set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
然後,啟動開發板進入Uboot,輸入上面這條命令,重新設定bootargs即可:
OpenJTAG> set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
OpenJTAG> save
再啟動開發板,這時候開發板使用的就是NandFlash上面的根檔案系統了
如果我們想再次使用NFS啟動根檔案系統,就再改一下bootargs就可以了
OpenJTAG> set bootargs noinitrd root=/dev/nfs nfsroot=192.168.0.7:/work/nfs_root/first_fs ip=192.168.0.17:192.168.0.7:192.168.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
OpenJTAG> save