1.检查内核是否开启NFS
1)进入内核源码目录make menuconfig,进入菜单Networking support->Networking options-> TCP/IP networking。确保nfs的功能已经被打开
IP:BOOTP support
2)进入File systems->Network File Systems 确保nfs加载可以被使用
Root file system on NFS
2.搭建NFS服务器
1)安装NFS
apt-get install nfs-kernel-server
apt-get install nfs-common
2) 创建共享目录,我在home/lz下创建了一个/nfs/rootfs,将其作为共享目录。并修改权限
chmod 777 -R /home/lz/nfs/rootfs
3) 配置NFS,打开配置文件并在最后一行添加
sudo gedit etc/exports
在最后一行添加
/home/lz/nfs/rootfs *(rw,sync,no_root_squash,no_subtree_check)
其中
/home/lz/nfs/rootfs:与nfs服务客户端共享的目录,这个路径必须和你前面设置的文件的路径一致!
*:允许所有的网段访问,也可以使用具体的IP
rw:挂接此目录的客户端对该共享目录具有读写权限
sync:资料同步写入内存和硬盘
no_root_squash:root用户具有对根目录的完全管理访问权限。
no_subtree_check:不检查父目录的权限
4)重启NFS服务
执行命令:sudo /etc/init.d/portmap restart
sudo /etc/init.d/portmap restart
重启portmap服务。nfs是一个RPC程序,使用它前,需要映射好端口,通过portmap设定。
注意:Ubuntu 14.04以后,要使用sudo /etc/init.d/rpcbind restart 重启rpcbind 服务。所以执行
sudo /etc/init.d/rpcbind restart
然后执行命令:
sudo /etc/init.d/nfs-kernel-server restart
重启nfs服务。并执行
showmount localhost -e
查询是否成功。
3.nfs用作嵌入式linux的文件系统
1) 设置u-boot启动参数
在U-Boot中设置启动参数
U-Boot>setenv bootargs root=/dev/nfs nfsroot=192.168.1.2:/home/lz/nfs/rootfs ip=192.168.1.3:192.168.1.2:192.168.1.10:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
其中:
root=/dev/nfs 并非真的设备,而是一个告诉内核要通过网络取得根文件系统。
nfsroot=你的主机IP:根文件系统路径
ip=你的开发板ip地址,注意开发板的ip地址只要和主机ip地址在一个网段内就可。
/home/lz/nfs/rootfs是主机的共享目录(即rootfs),192.168.1.2代表的是主机ip,192.168.1.3代表开发板ip,192.168.1.10是网关,eth0是主机和开发板相接的网卡。注意这是一整行没有换行,改完save一下。
U-Boot>sa
保存后,用boot启动linux
U-Boot>boot
2)挂载nfs文件系统
在linux系统里也可以挂载nfs文件
sudo mount -t nfs 192.168.1.2:/home/lz/nfs/rootfs /nfs/test