(注:本文参考资料:朱有鹏嵌入式课程。本文为个人学习记录,如有错误,欢迎指正。)
0. NFS的作用
NFS(Network File System),网络文件系统。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
本文的目的是实现开发板远程挂载NFS服务器中的根文件系统(文件夹形式)。具体实现步骤如下:
1)设置开发板与Ubuntu主机的网络通信;
2)配置开发板(客户端)的NFS功能;
3)在Ubuntu主机下,搭建NFS服务器。
1. 网络设置
搭建NFS服务器之前,必须确保开发板与Ubuntu主机可以实现网络通信。具体步骤详见:《嵌入式开发环境搭建:开发板tftp下载环境搭建》->网络设置。
2. NFS客户端的配置
(1)配置uboot的环境变量bootargs,指定需要挂载的网络文件系统的路径。配置bootargs的值为:
bootargs root=/dev/nfs nfsroot=192.168.1.100:/home/sai/rootfs-test/rootfs ip=192.168.1.200:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200 |
配置分析:
- root=/dev/nfs,表示内核通过NFS服务器挂载根文件系统;
- nfsroot=<server-ip>:<root-dir>,描述NFS服务器的路径。<server-ip>,指定网络文件系统服务端的IP地址;<root-dir>,指定网络文件系统的路径。
- nfsaddrs=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto>,设定网络通信所需的各种网络接口地址。
<my-ip>,指定客户端的IP地址
<serv-ip>,网络文件系统服务端的IP地址
<gw-ip>,网关(gateway)的IP地址
<netmask>,本地网络的网络掩码
<name>,客户端的名称。如果空白,则使用客户端IP地址的ASCII标记值
<dev>,网络设备名称
<off>,关闭DHCP服务
- init=/linuxrc,指定init进程的路径。
- console=ttySAC2,115200,指定控制台串口设备号及其波特率参数。
(2)配置内核的NFS功能
进入内核图形配置界面menuconfig界面下,配置内核的NFS功能。
1)配置网络部分。
Networking support ---> Networking options ---> [*]TCP/IP networking [*]IP: kernel level autoconfiguration [*] IP: DHCP support [*] IP: BOOTP support |
2)配置开启NFS服务
File systems ---> [*]Network File Systems ---> <*> NFS client support [*] NFS client support for NFS version 3 [*] NFS client support for the NFSv3 ACL protocol extension [*] NFS client support for NFS version 4 (EXPERIMENTAL) [*] NFS client support for NFSv4.1 (DEVELOPER ONLY) [*] Root file system on NFS |
配置完成后,重新编译内核。
3. 搭建NFS服务器
(1)安装NFS相关软件
sudo apt-get install nfs-kernel-server sudo apt-get install nfs-common |
(2)配置/etc/exports
- sudo vi /etc/exports,在etc/exports末尾添加如下内容:
#“/home/sai/rootfs-test/rootfs”指定NFS服务器所在路径,可以根据需要修改。 /home/sai/rootfs-test/rootfs *(rw,sync,no_root_squash,no_subtree_check) |
- chmod 777 -R /root/rootfs,更改文件夹权限。
- sudo showmount -e,执行成功后显示“clnt-create : RPC : Program not registered”。
- sudo exportfs -r
- sudo showmount localhost -e,执行成功显示“Export list for 192.168.1.116 /home/sai/rootfs-test/rootfs *”
(3)重启NFS服务
重启NFS服务,上述配置即可生效。
sudo /etc/init.d/nfs-kernel-server restart ,重启 nfs 服务。
配置成功,显示如下信息:
* Stopping NFS kernel daemon [ OK ] * Unexporting directories for NFS kernel daemon... [ OK ] * Exporting directories for NFS kernel daemon... [ OK ] * Starting NFS kernel daemon |
4. 挂载测试
(1)本地测试NFS
在Ubuntu主机下,将配置的/home/sai/rootfs-test/rootfs文件夹挂载至Ubuntu下的某一目录,若在该目录下可以看到该文件夹中的内容,则说明NFS服务器搭建成功。
挂载命令:
mount -t nfs -o nolock localhost:/root/rootfs /opt
(2)开发板挂载测试
完成上述配置后,启动内核。若在控制台中打印出如下信息,则说明开发板远程挂载NFS服务器中的根文件系统成功。
VFS: Mounted root (nfs filesystem) on device 0:12. |