Linux系統中的NFS掛載網絡文件系統

對於嵌入式Linux開發,通過NFS掛載根文件系統,根文件系統無需下載到FLASH( FLASH還需要先擦除再寫入),可以直接保存在Linux主機,而且在Linux開發的驅動程序也無需下載到Linux開發板的FLASH,這使得開發十分方便快捷,下面記錄一下我在學習過程中的過程。

準備好可啓動的文件系統

首先將準備好的文件系統解壓拷貝到你服務器主機上nfs共享出去的文件夾下面,以便後面進行nfs掛載

Linux內核的配置與編譯

準備好Linux內核,我這裏用的是arm平臺的Linux2.6.29內核

解壓後進入Linux2.6.29清理內核中間文件,配置文件

#cd Linux2.6.29
#make distclean

選擇參考配置文件,然後修改配置文件CMDLINE,我這裏選擇config-mini2440作爲配置文件

#vim config-mini2440

CMDLINE:       命令行啓動參數定義了內核掛載根文件系統的方式

root=/dev/nfs      表示內核採用nfs方式起根文件系統

nfsroot=192.168.1.107:     服務器的IP地址,後面是nfs啓動的根文件系統位於nfs服務器下面nfs共享出去的目錄

ip=192.168.1.148               開發板的IP地址 ,要求與服務器IP地址同一網段

console=ttySAC0  mem=64M        ttySAC0作爲控制檯,內存爲64M

修改好後拷貝config-mini2440 到 .config

#cp config-mini2440 .config

配置內核

配置命令:

#make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-

要使內核支持nfs起根文件系統,內核必須選上配置選項:

File systems-->Network File Systems-->

<*> NFS client support

[*] NFS client support for NFS version 3

[*] Root file system on NFS

選上後保存配置,退出

編譯內核

編譯命令:

#make uImage ARCH=arm CROSS_COMPILE=arm-linux-

便已完成後生成的內核映像uImage位於arch/arm/boot/ 目錄下

如果在編譯過程中出現如下情況:

提示mkimage命令沒有出現,在u-boot中的mkimage用來產生u-boot格式映像文件的,所以可以把u-boot編譯之後的源代碼中把mkimage拷貝到/bin文件目錄下,再次編譯

編譯後將uImage文件拷貝到tftp服務目錄/tftpboot

#cp arch/arm/boot/uImage /tftpboot

開發板配置

接下來就是開發板這邊的操作,打開超級終端,啓動開發板,在超級終端中進入U-Boot:

  • 設置IP地址:

setenv ipaddr 192.168.1.148    // 開發板IP
setenv serverip 192.168.1.107   //服務器 IP
setenv gatewayip 192.168.1.254    // 網關
saveenv

  • 修改引導參數:

setenv bootargs console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.107:/home/student/share/rootfs ip=192.168.1.148:192.168.1.107:192.168.1.254:255.255.255.0:sbc2440.arm9.net:eth0:off

nfsroot=服務器ip:/共享文件夾    ip=開發板ip:linux服務器ip:網關ip:子網掩碼:主機名:網卡:off

root        表示使用/dev/nfs這個設備作爲根文件系統。

rw        表示可讀可寫的。

nfsroot        表示服務器中rootfs所在路徑,注意需要跟上服務器的ip地址。

192.168.1.148    是板子啓動之後的ip地址。

192.168.1.107    是nfs服務器的ip地址。

192.168.1.254    是板子網關地址。

255.255.255.0    是板子子網掩碼。

eth0        表示板子上的網絡設備。

off        表示關閉動態獲取ip地址

saveenv        保存配置

printenv        查看配置信息

  • 通過tftp下載內核

#tftp 0x31000000 uImage    //把服務器中的tftpboot目錄下的uImage通過TFTP讀入到開發板的內存地址0x31000000處

#bootm 0x31000000          //啓動內核

通過上面的步驟基本上就完成了nfs掛載網絡文件系統,啓動過程中如果沒有成功

  • 可查看nfs服務配置是否正確,檢查/etc/exports

#vim /etc/exports

然後重啓nfs服務

#/etc/init.d/nfs restart

  • VFS: Cannot open root device “nfs” or unknown-block(2,0)

報這個錯誤,網上很多說是NFS服務器配置有問題,但實際上我試驗的時候還是因爲uboot參數配置沒有寫好。

參考博客:

Linux學習之路——NFS掛載根文件系統

從NFS啓動Linux並掛載根文件系統可能出現的錯誤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章