使用NFS啟動Tiny4412開發板根檔案系統
1、Ubuntu14.04上搭建NFS服務
1.1、安裝NFS服務
$ sudo apt-get install nfs-kernel-server //安裝NFS服務
1.2 建立共享資料夾
$ sudo mkdir /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)
[分享目錄] [第一個客戶端(許可權)] [可用主機名] [可用萬用字元]
在exports檔案中新增如下內容:
/home/felix/nfs *(rw,sync,no_root_squash,no_subtree_check)
/home/felix/nfs:剛才建立的共享資料夾
*:允許所有的網段訪問,也可以使用具體的IP
rw:掛接此目錄的客戶端對該共享目錄具有讀寫許可權
sync:資料同步寫入記憶體和硬碟
no_subtree_check:不檢查父目錄的許可權。
no_root_squash:root使用者具有對根目錄的完全管理訪問許可權。
1.4、啟動NFS伺服器。
在命令列終端輸入如下命令:
$ sudo exportfs –rv //使/etc/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
配置完成後,儲存退出並編譯核心。
2.2、配置U-boot啟動引數
2.2.1、設定U-boot的bootargs引數:
# 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'
其中關鍵是對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:off中ip192.168.1.103是我們開發板的ip地址, ip192.168.1.102是nfs伺服器的ip,ip192.168.1.1是開發板的閘道器,255.255.255.0 是子網掩碼,eth0是網絡卡裝置的名稱。
對bootargs的設定可以放在裝置樹中或者u-boot中,並且u-boot的bootargs的優先順序更高,會將裝置樹中的bootargs覆蓋了。具體請參考核心文件:
Documentation/kernel-parameters.txt
Documentation/filesystems/nfs/nfsroot.txt
2.2.2、設定U-boot的bootcmd引數:
如果用NFS啟動根檔案系統的話,使用bootm啟動核心的時候,就不需要傳遞ramdisk的地址了(如:bootm 0x40000000 – 0x4200000 ),否則根檔案系統還是ramdisk。U-boot的bootcmd引數設定如下:
# setenv bootcmd 'usb start; usb reset;tftp 0x40007000 uImage; tftp 0x42000000 exynos4412-tiny4412sdk.dtb;bootm 0x40007000 - 0x42000000; boot'
關於TFTP的設定參考《[20170320] X-010 FriendlyARM tiny4412 uboot移植之 uboot移植之移植網絡卡驅動TFTP用起來》
2.2.3、儲存U-boot的bootargs引數和bootcmd引數:
# saveenv
完成上面的設定,就可以使用NFS啟動Tiny4412開發板的根檔案系統。
參考
嵌入式環境搭建之NFS http://blog.csdn.net/tigerjibo/article/details/9748561
[學習嵌入式開發板]iTOP-4412實現NFS網路檔案系統http://www.oschina.net/question/2371345_2158782
Ubuntu14.04和Tiny6410掛載NFS服務http://www.cnblogs.com/cxd2014/p/4178889.html