0


解决Ubuntu 22.04不支持nfs 2服务导致开发板挂载失败的问题

解决Ubuntu 22.04不支持nfs v2服务导致开发板挂载失败的问题

一、前言
​ 分享近期在使用Ubuntu 22.04调式正点原子IMX6ULL开发板时,遇到不能正常挂载根文件系统问题的解决思路。原因是u-boot仅支持nfs v2,而Ubuntu 22.04默认把nfs v2服务和udp端口关闭了,导致文件系统挂载失败。

VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device “nfs” or unknown-block(2,0): error -6
Please append a correct “root=” boot option; here are the available partitions:
0100 65536 ram0 (driver?)
0101 65536 ram1 (driver?)
0102 65536 ram2 (driver?)
0103 65536 ram3 (driver?)
0104 65536 ram4 (driver?)
0105 65536 ram5 (driver?)
0106 65536 ram6 (driver?)
0107 65536 ram7 (driver?)
0108 65536 ram8 (driver?)
0109 65536 ram9 (driver?)
010a 65536 ram10 (driver?)
010b 65536 ram11 (driver?)
010c 65536 ram12 (driver?)
010d 65536 ram13 (driver?)
010e 65536 ram14 (driver?)
010f 65536 ram15 (driver?)
b300 7865344 mmcblk0 driver: mmcblk
b301 7861248 mmcblk0p1 00000000-01
b310 7634944 mmcblk1 driver: mmcblk
b311 512000 mmcblk1p1 275cbf30-01
b312 7020544 mmcblk1p2 275cbf30-02
b340 512 mmcblk1rpmb (driver?)
b330 4096 mmcblk1boot1 (driver?)
b320 4096 mmcblk1boot0 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
—[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
random: nonblocking pool is initialized

二、解决思路
在解决nfs v2服务之前需要确认Ubuntu 22.04当前的Linux kernel版本。经过验证,可以确认Linux kernel 6.2及以上版本是不支持nfs v2的,这个问题可以通过降低内核版本解决。
​通过降低版本,对 5.15.0-33-generic 和 5.19.0-41-generic 这两个Linux kernel 版本进行验证,能够成功支持nfs v2,目前验证了这两个版本。如果当前内核不是5.15、5.19这两个版本,就需要更改内核版本,如果使用的是上面两个版本中的任意一个则跳过更改内核这个步骤。
1、查看Ubuntu当前的内核版本
uname -a
在这里插入图片描述
可以看到在6.2.0-34-generic这个版本上不支持nfs 2。
2、查看已安装的内核版本
dpkg --get-selections | grep linux-image
在这里插入图片描述
如果有已安装的合适的版本,可以直接切换。
如果没有合适的已安装内核镜像,如下载5.19.0-41-generic内核,可以使用apt-get下载:sudo apt-get install linux-image-5.19.0-41-generic
3、更改启动的内核
sudo vim /etc/default/grub
修改grub文件的GRUB_DEFAULT参数,内核版本号改成已安装的版本,如果不知道怎么选择的话可以参考 Kernel 5.19.0 :
GRUB_DEFAULT=“Advanced options for Ubuntu>Ubuntu, with Linux 5.19.0-41-generic”
在这里插入图片描述
修改完成后保存退出,然后更新grub文件:sudo update-grub
在这里插入图片描述
4、重启 Ubuntu
reboot
重启后使用 uname -a 查看内核版本,看是否切换内核成功。
在这里插入图片描述
5、配置 nfs.conf 文件
sudo vim /etc/nfs.conf
使能udp和nfs v2:

udp=n    -->    udp=y    使能 udp
vers2=n    -->    vers2=y    使能 nfs v2

然后保存退出。
在这里插入图片描述
6、重启nfs服务后查看 nfs 的版本和是否开启udp端口
/etc/init.d/nfs-kernel-server restart
sudu cat /proc/fs/nfsd/versions
rpcinfo -p | fgrep nfs
在这里插入图片描述
出现+2说明已经支持nfs v2了,并且udp端口也开启成功。如果udp端口不开启也是挂载不了开发板的。
7、测试开发板挂载
在这里插入图片描述
8、参考博客
Ubuntu 22.04版本无法挂载NFS V2的解决方法-OpenEdv-开源电子网

标签: ubuntu 单片机 linux

本文转载自: https://blog.csdn.net/weixin_43501534/article/details/133935539
版权归原作者 QHDN 所有, 如有侵权,请联系我们删除。

“解决Ubuntu 22.04不支持nfs 2服务导致开发板挂载失败的问题”的评论:

还没有评论