以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。
更多详细内容,见Linux中NFS服务器的配置(/etc/export)_天糊土的博客-CSDN博客
网络文件系统(NFS,network file system),是一种网络通讯协议,由服务器和客户端构成。利用NFS协议可以做出很多直接性应用,但这里使用NFS主要是做rootfs挂载。
我们在虚拟机ubuntu中搭建NFS服务器,在开发板中运行kernel作NFS客户端(kernel要配置成支持NFS客户端),然后将文件夹形式的rootfs复制到NFS服务器的NFS共享目录(指定的共享目录由bootargs这个环境变量中的nfsroot指定),在客户端中挂载rootfs,进而启动系统。
1、在虚拟机上搭建nfs服务器
(1)搭建方法见环境搭建文档。
(2)挂载的理解。被挂载的目录,即要访问的目录,比如/root/rootfs;挂载到某目录(挂载点),该目录就是一个小窗口,通过该窗口可以访问被挂载的目录的内容,比如挂载到/opt,则可以通过opt访问/root/roots的内容。用完之后一般要卸载:umount /opt
2、配置内核以支持NFS作为rootfs
(1)在uboot控制设置环境变量bootargs并保存
在uboot控制台修改bootargs这个环境变量并保存,如下所示。
set bootargs 'root=/dev/nfs nfsroot=192.168.1.141:/home/xjh/iot/embedded_basic/rootfs/rootfs_xjh ip=192.168.1.88:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200'
(2)在uboot控制台设置环境变量bootcmd并保存
set bootcmd 'tftp 30008000 zImage;bootm 30008000'
此时如果直接挂载运行,会提示错误如下,导致重新启动,因为没有配置内核以支持NFS启动方式。
(3)在内核配置阶段,即menuconfig中配置支持nfs启动方式
(4)如果依然提示下面问题:
[ 4.548616] Root-NFS: Server returned error -13 while mounting /home/xjh/iot/embedded_basic/rootfs/rootfs_xjh [ 4.557099] VFS: Unable to mount root fs via NFS, trying floppy. [ 4.563317] VFS: Cannot open root device "nfs" or unknown-block(2,0)
则在/etc/exports文件中输入如下内容并保存:
/home/xjh/iot/embedded_basic/rootfs/rootfs_xjh *(rw,sync,no_root_squash,no_subtree_check)
然后重启NFS服务:
sudo /etc/init.d/nfs-kernel-server restart
(5)重新启动uboot,就会到tftp服务器中下载内核,然后再到nfs服务器中下载rootfs
如果rootfs是可用的,那么就会启动成功;如果rootfs是不可用的,那么会提示下面的错误。
由上可知,NFS方式启动,相当于开发板上的内核远程挂载主机上的rootfs(根文件系统、内核在主机上,而不是像以前那样先烧录在开发板上)。另外NFS方式启动不用制作rootfs镜像,但NFS不适合真正的产品,一般作为产品开发阶段调试使用。