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

使用NFS啟動Tiny4412開發板根檔案系統

轉載地址: https://www.cnblogs.com/AP0904225/p/6701442.html

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

clip_image002

再進入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

clip_image004

配置完成後,儲存退出並編譯核心。

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開發板的根檔案系統。

clip_image006

參考

嵌入式環境搭建之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