在调试开发板的过程中用nfs文件系统作为根文件系统启动,可以随时更新文件系统内的文件,非常的方便。这段时间工作用到了nfs根文件系统,这里做一下总结。

安装 配置:

aptitude install nfs-kernel-server
vim /etc/exports
这里面就是nfs的默认目录和相关属性
 
• ro                      只读访问
• rw                      读写访问
• sync                    所有数据在请求时写入共享
• async                   NFS在写入数据前可以相应请求
• secure                  NFS通过1024以下的安全TCP/IP端口发送
• insecure                NFS通过1024以上的端口发送
• wdelay                  如果多个用户要写入NFS目录,则归组写入(默认)
• no_wdelay               如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
• hide                    在NFS共享目录中不共享其子目录
• no_hide                 共享NFS目录的子目录
• subtree_check           如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
• no_subtree_check        和上面相对,不检查父目录权限
• all_squash              共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
• no_all_squash           保留共享文件的UID和GID(默认)
• root_squash             root用户的所有请求映射成如anonymous用户一样的权限(默认)
• no_root_squash           root用户具有根目录的完全管理访问权限
• anonuid=xxx             指定NFS服务器/etc/passwd文件中匿名用户的UID
• anongid=xxx             指定NFS服务器/etc/passwd文件中匿名用户的GID
• no_root_squash:登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限,此参数很不安全,建议不要使用。我在使用nfs的时候发现即使rw权限仍然不能在nfs根目录下创建文件,这个就需要这个参数
• 
•  
 root_squash:在登入NFS主機使用分享之目录的使用者如果是root时,那么这个使用者的权限將被压缩成为匿名使用者,通常他的UID与GID都会变成nobody那个身份; 
 all_squash:不管登陆NFS主机的用户是什么都会被重新设定为nobody。 
 anonuid:将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中。 
 anongid:同anonuid ,但是变成group ID就是了! 
 sync:资料同步写入存储器中。 
 async:资料会先暂时存放在内存中,不会直接写入硬盘。 
 insecure 允许从这台机器过来的非授权访问。 

我添加了如下一句:
/home/work/nfsroot  *(rw,sync,no_root_squash)
说明我的nfs文件系统可读可写,并且数据是同步写入的。

然后重新启动一下nfs服务器。
service nfs-kernel-server restart

接下来就是要在开发板上启动挂载nfs了,首先要配置一下内核。
make menuconfig
File Systerm ---> Network File Systerm 下选中NFS file systerm support 更重要的是要选中 Root file systerm support。
这样内核就支持nfs启动了。
接下来最重要的就是内核参数了。
关于nfs的内核启动参数如下
root=/dev/nfs nfsroot=PC-ip:nfspath ip=local-ip:PC-ip:gateway:netmask:alias:net-port:off
gateway写成和PC-ip一样就可以。
比如我的参数如下:
root=/dev/nfs rw nfsroot=172.17.101.18:/home/work/nfsroot ip=172.17.101.190:172.17.101.18:172.17.101.18:255.255.255.0:ubuntu:eth0:off

这样启动nfs就自动挂载为根文件系统了。


这里有一个参数是rw,我发现不写这个参数nfs文件系统挂载默认为只读的,只能加rw。