NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
对于嵌入式Linux开发,通过NFS挂载根文件系统,根文件系统无需下载到FLASH( FLASH还需要先擦除再写入),可以直接保存在Linux主机,而且在Linux开发的驱动程序也无需下载到Linux开发板的FLASH,这使得开发十分方便快捷,下面记录了我自己通过NFS挂载根文件系统的过程。
Linux主机端:
- CentOS 7.5
- RPC 主程序:rpcbind yum install NFS rpcbind
- NFS 主程序:nfs-utils yum install nfs-utils
- IP:172.215.0.224
- 网关IP:172.215.0.1
- 子网掩码:255.255.0.0
1.将制作好的根文件系统更名为NFS
注意: 根文件系统的配置文件中 vi etc/init.d/rcS 的ip地址一定要和后面设置u-boot环境变量中的一致
就是linux内核中配置的开发板ip地址一定要和u-boot一致
2.修改NFS配置文件 vi /etc/exports
/NFS *(rw,sync,no_root_squash)
我这里写了*表示任何用户都能访问主机上的NFS文件夹 实际上可改为固定IP,只允许某一IP开放,例如
/NFS 172.215.0.128(rw,sync,no_root_squash)
或者
/mnt/rootfs_make/NFS 172.215.0.*(rw,sync,no_root_squash)
表示对1网段所有IP开放
3.使配置生效 exportfs -r(没有任何提示)
4.重启RPC和NFS服务(有先后顺序,先启动RPC,再启动NFS)
service rpcbind restart
service nfs restart
5.查看NFS状态 ,确保为激活(active)状态
service nfs status
active表示已激活
6.查看映射状态 showmount -e
可以看到,NFS文件夹已经被共享出去了,我的是所有用户都可访问
showmount -a 可以看哪些用户正在访问共享文件夹
可以看到,172.215.0.194的用户正在访问 NFS文件夹
7.关闭防火墙
首先查看防火墙状态,如下图,防火墙的active激活状态
对于centos7,执行systemctl stop firewalld 关闭防火墙
再次查看防火墙,已经被关闭了,但是这只是本次生效,重启后防火墙又会被打开。
执行systemctl disable firewalld 永久禁用
8.为保险起见,在本机挂载测试下:
mount -t nfs localhost:/NFS/ /tmp
localhost:你的主机IP
我们将NFS挂载到本机/home文件夹,在/home也能看到NFS文件夹内容,挂载成功!
9.测试下服务器和开发板能否互相ping通 能互相Ping通再进行后面的步骤
====================================================================================================================================分隔线===================================================
linux开发板端:
- cpu:at91sam9260
- 根文件系统:yaffs2
- linux内核:2.6.38
- ip:172.215.0.194
1.内核配置
File systems--------
Network File Systems------------
File systems -----------
Miscellaneous filesystems------------
2.u-boot参数配置
u-boot环境变量配置
set bootargs noinitrd root=/dev/nfs nfsroot=172.215.0.224:/NFS ip=172.215.0.194:172.215.0.224:172.215.0.1:255.255.0.0::eth0:off init=/linuxrc console=ttyS0,115200
nfsroot=服务器ip:/共享文件夹 ip=开发板ip:linux服务器ip:网关ip:子网掩码:主机名:网卡:off
root 表示使用/dev/nfs这个设备作为根文件系统。
rw 表示可读可写的。
nfsroot 表示服务器中rootfs所在路径,注意需要跟上服务器的ip地址。
192.168.1.110 是板子启动之后的ip地址。
192.168.1.100 是nfs服务器的ip地址。
192.168.1.1 是板子网关地址。
255.255.255.0 是板子子网掩码。
eth0 表示板子上的网络设备。
off 表示关闭动态获取ip地址
---------------------
注意:eh0前面有两个冒号,那是因为这里还可以填写一个板子的主机名,这里没有设置,所以为空。
3.启动Linux开发板
可以看到挂载成功