近期在调试IMX6ULL开发板,为了方便,准备以nfs的方式通过网络挂载根文件系统。挂载方法如下:
使用busybox构建根文件系统,这个过程不谈,网上有很多教程。
一,server配置(Ubuntu 22.04 LTS)
1.1.安装NFS
sudo apt-get install nfs-kernel-server
1.2.server创建共享目录,并给予可执行权限
sudo mkdir ~/linux/nfs
sudo chmod 777 ~/linux/nfs
1.3.配置NFS服务
sudo vim /etc/exports
在最后添加
/home/zzzz/linux/nfs *(rw,sync,no_root_squash)
1.4.重启NFS服务
sudo service nfs-kernel-server restart
二、板端配置
2.1.设置bootargs参数
确保板端与server处于同一网段且能ping通server,这部分网上也有很多教程,大家可以自行去查。
设置u-boot bootargs,参数信息需要根据自己的环境配置,具体怎么写可以参考linux源码目录下的Documentation/filesystems/nfs/
nfsroot.txt,也可以直接度娘,在此不赘述,只是给大家参考。
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.31.47:/home/zhangyuchi/linux/nfs/rootfs,proto=tcp rw ip=192.168.31.55:192.168.31.47:192.168.31.1:255.255.255.0::eth0:off'
saveenv
设置完之后print bootargs检查确认一下,这里的信息很重要,如果有错误后面肯定是挂载不上的。
2.2.进入系统
输入boot命令后回车即可
问题及解决
如果u-boot版本比较低时,而使用的server版本较高时,这时候就可能会挂载不成功。这是因为u-boot仅支持nfs v2,不支持nfs v3,而ubuntu 18之后则不再支持nfs v2。
解决办法
1.server端使能nfs v2
1.1-1.ubuntu18之后的版本
sudo vi /etc/default/nfs-kernel-server
将RPCNFSDCOUNT=8修改为RPCNFSDCOUNT="8 -V 2"
1.2-2.ubuntu22.04 LTS(这是本文最重要的地方,因为ubuntu 18版本解决方法网上很容易搜到,而ubuntu 22.04并不能使用相同的修改办法)
sudo vim /etc/nfs.conf
将vers2=n改为vers2=y,并把前面的#去掉
Ps.Ubuntu不同版本修改nfs配置的方法在ubuntu官网上有介绍,本文便是参考的官网描述:
1. 2.修改完后重启nfs服务
sudo service nfs-kernel-server restart
1.3.确认nfs v2已成功开启
sudo cat /proc/fs/nfsd/versions
下面有+2就是成功了!、
开发板重新boot就可以挂载上根目录了:
2.板端使能nfs v3
板端需要支持nfs v3,这样的话只要在bootargs中加上‘nfsvers=3’即可。