1. 程式人生 > >使用NFS啟動Tiny4412開發板根文件系統

使用NFS啟動Tiny4412開發板根文件系統

創建 question tar 重新編譯 文件夾 mdi friendly btree ima

1Ubuntu14.04上搭建NFS服務

1.1、安裝NFS服務

$ sudo apt-get install nfs-kernel-server //安裝NFS服務

1.2 創建Tiny4412開發板根文件系統

這部分內容參考《Busybox構建根文件系統和制作Ramdisk》部分。

假設Tiny4412開發板根文件系統路徑為/home/felix/nfs

1.3. 配置NFS服務器

配置NFS主要涉及配置文件/etc/exports,它用於NFS服務器端,其中列出了NFS服務器中要導出的目錄、可以訪問這些目錄的NFS客戶機及其訪問權限。

/etc/exports

文件的格式如下:

dir_to_export NFS_client (permissions) [NFS_client (permissions)…]

例如:

/tmp 192.168.100.0/24(ro) localhost(rw) *(ro,sync)

[分享目錄] [第一個客戶端(權限)] [可用主機名] [可用通配符]

因此,需要在/etc/exports文件中添加如下內容:

/home/felix/nfs *(rw,sync,no_root_squash,no_subtree_check)

/home/felix/nfs

剛才創建的共享文件夾

*:允許所有的網段訪問,也可以使用具體的IP

rw掛接此目錄的客戶端對該共享目錄具有讀寫權限

sync資料同步寫入內存和硬盤

no_subtree_check不檢查父目錄的權限。

no_root_squashroot用戶具有對根目錄的完全管理訪問權限。

1.4、啟動NFS服務器。

在命令行終端輸入如下命令:

$ sudo exportfs –rv //使exports 文件生效

$ sudo /etc/init.d/rpcbind restart //重啟rpcbind

服務

$ sudo /etc/init.d/nfs-kernel-server restart //重啟nfs服務

Ubuntu上執行:

$ showmount -e

顯示出共享的目錄說明搭建成功。

2.配置tiny4412開發板內核,板子啟動自動掛載NFS文件系統

2.1、配置tiny4412開發板內核支持NFS

輸入 make ARCH=arm menuconfig 命令進入 linux 內核配置界面,

進入[*] Networking support --->

Networking options --->

選中[*] IP: kernel level autoconfiguration

技術分享

再進入File systems --->

[*] Network File Systems --->

選中如下選項:

<*> NFS client support

<*> NFS client support for NFS version 2

<*> NFS client support for NFS version 3

[*] NFS client support for the NFSv3 ACL protocol extension

<*> NFS client support for NFS version 4

[*] Provide swap over NFS support

[*] NFS client support for NFSv4.1

[*] NFS client support for NFSv4.2

[*] NFSv4.1 client support for migration

[*] Root file system on NFS

技術分享

再進入General setup --->

設置Initial RAM filesystem and RAM disk (initramfs/initrd) support項為

[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support

技術分享

配置完成後,保存退出並編譯內核。

2.2、配置U-boot啟動參數

2.2.1、設置U-bootbootargs參數:

# setenv bootargs ‘root=/dev/nfs rw nfsroot=192.168.1.102:/home/felix/nfs ethmac=00:00:ff:ff:00:00 ip=192.168.1.103:192.168.1.102:192.168.1.1:255.255.255.0::eth0:off console=ttySAC0,115200 init=/linuxrc‘

# saveenv

其中關鍵是對ip參數的設置:

ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>

bootargs中關於nfs的參數解釋如下:

root=/dev/nfs rw nfsroot=192.168.1.102:/home/felix/nfs 表示掛載的 nfs 服務器 ip

192.168.1.102,掛載的目錄是/home/felix/nfs(註意:/home/felix/nfs是前面搭建 nfs 服務器設置的);

ethmac=00:00:ff:ff:00:00表示網卡的地址是00:00:ff:ff:00:00,該地址在網卡驅動加載成功後會打印出來;

ip=192.168.1.103:192.168.1.102:192.168.1.1:255.255.255.0::eth0:off192.168.1.103是我們開發板的ip地址,192.168.1.102nfs服務器的ip192.168.1.1是開發板的網關,255.255.255.0 是子網掩碼,eth0是網卡設備的名稱。

bootargs的設置可以放在設備樹中或者u-boot中,並且u-bootbootargs的優先級更高,會將設備樹中的bootargs覆蓋了。具體請參考內核文檔:

Documentation/kernel-parameters.txt

Documentation/filesystems/nfs/nfsroot.txt

2.2.2、設置U-bootbootcmd參數:

如果用NFS啟動根文件系統的話,使用bootm啟動內核的時候,就不需要傳遞ramdisk的地址了(如:bootm 0x40000000 – 0x4200000 ),否則根文件系統還是ramdiskU-bootbootcmd參數設置如下:

# setenv bootcmd ‘usb start; usb reset;tftp 0x40007000 uImage; tftp 0x42000000 exynos4412-tiny4412sdk.dtb;bootm 0x40007000 - 0x42000000; boot‘

# saveenv

關於TFTP的設置參考《X-010 FriendlyARM tiny4412 uboot移植之 uboot移植之移植網卡驅動TFTP用起來》

2.3、配置Linux啟動參數

輸入 make ARCH=arm menuconfig 命令進入 linux 內核配置界面進入Boot options --->

Default kernel command 裏面輸入

root=/dev/nfs rw nfsroot=192.168.1.102:/home/felix/nfs ethmac=00:00:ff:ff:00:00 ip=192.168.1.103:192.168.1.102:192.168.1.1:255.255.255.0::eth0:off console=ttySAC0,115200 init=/linuxrc

這個參數和前面設置u-bootbootargs參數一致

技術分享

保存配置參數,重新編譯內核。

完成上面的設置,就可以使用NFS啟動Tiny4412開發板的根文件系統。

技術分享

參考

嵌入式環境搭建之NFS http://blog.csdn.net/tigerjibo/article/details/9748561

[學習嵌入式開發板]iTOP-4412實現NFS網絡文件系統http://www.oschina.net/question/2371345_2158782

Ubuntu14.04Tiny6410掛載NFS服務http://www.cnblogs.com/cxd2014/p/4178889.html

使用NFS啟動Tiny4412開發板根文件系統