2010年10月21日 星期四

如何使用NFS做為開機時的root file system

我們都知道Linux在開機時必須要mount一個檔案系統做為根目錄系統, 而這個根目錄通常會指定定在kernel bootup command line的root及rootfstype選項中指定, 但是初期我們在開發embedded系統時通常會有問題, 或者embedded flash的空間不大, 所以若可以使用NFS做為root file system, 將會對開發embedded系統來說會是一項非常方便的事情, 以下即是說明如何設定來使用NFS做為開機時的root file system。
若要使用NFS做為開機時的根目錄, 在kernel的選項中有幾個是必須被打開, 如NFS client (CONFIG_ROOT_NFS), 以及可以自動設定IP的選項, 如DHCP或者BOOTP或RARP, 這是讓kernel開機時即可取得IP address (CONFIG_IP_PNP), 因為NFS是架構在網路上。
而其中的boot command line的設定如下 :

root=/dev/nfs

而其中的/dev/nfs為一個虛擬的device node, 並不是真實存在, 所以也並不需要真的在檔案系統中建立這個device node

nfsroot=[{server-ip}:]{root-dir}[,{nfs-options}]

nfsroot是指定NFS server的資料, 若沒有指定nfsroot則會default使用/tftpboot/%s, 做為mount的點,其各個選項說明如下:
{server-ip} 是指定NFS server的IP address
{root-dir} 是指定NFS server export出來的目錄, 也是會被mount為根目錄的目錄
{nfs-options} 為選項如下:
  • port = portmap所使用的port number
  • rsize = 4096
  • wsize = 4096
  • timeo = 7
  • retrans = 3
  • acregmin = 3
  • acregmax = 60
  • acdirmin = 30
  • acdirmax = 60
  • flags = hard, nointr, noposix, cto, ac
ip={client-ip}:{server-ip}:{gw-ip}:{netmask}:{hostname}:{device}:{autoconf}

這是在設定embedded自已的IP address, 若沒有這個設定, 將會依照kernel中所設定的autoconf方法取得IP address, 這個設定可以如下各個情形:
  • ip="off"
  • ip="none"
  • ip=dhcp"
  • ip="autoconf"
其各選項說明如下 :
{client-ip} embedded自已本身的IP address
{server-ip} NFS server的IP address
{gw-ip} gateway IP address
{netmask} netmask
{hostname} embedded自已本身的名字
{device} embedded自已本身所使用的網路介面名字
{autoconf} 其可用的選項如下 :
  • off or none
  • on or any
  • dhcp
  • bootp
  • rarp
  • both (使用bootp & rarp)
  • default is any
以上若是使用正確將可以使用NFS來做為開機時的root file system,以下是一個範例:

root=/dev/nfs console=ttySAC0,115200 nfsroot=192.168.2.144:/home/work/embedded/filesystem/rootfs ip=dhcp

以上範例測試板是dhcp取得IP address,以下是另一個範例!為設定固定IP address :

root=/dev/nfs console=ttySAC0,115200 nfsroot=192.168.2.144:/home/work/embedded/filesystem/rootfs ip=192.168.2.90

沒有留言:

張貼留言