解决开发板不能通过nfs挂载ubuntu24.04
分享近期在使用Ubuntu 24.04调式正点原子IMX6ULL开发板时,遇到不能正常挂载根文件系统问题的解决思路。原因是u-boot仅支持nfs v2,而Ubuntu 24.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 24.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这两个版本,就需要更改内核版本,如果使用的是上面两个版本中的任意一个则跳过更改内核这个步骤。
查看当前Ubuntu版本
lsb_release -a
查看系统当前内核版本:我已经回退了
uname -r
查看已安装的内核版本
dpkg --get-selections | grep linux-image
如果有5.19版本的话可以直接切换。跳到后面如何切换即可
如果没有合适的已安装内核镜像,如下载5.19.0-41-generic内核,可以使用apt-get下载:sudo apt-get install linux-image-5.19.0-41-generic
对于ubuntu24.04如果无法通过这个命令下载的话需要去官网下载。连接:
Ubuntu Kernel Archive
ubuntu需要下载amd64架构的这四个包,可以通过下面这个命令在ubuntu直接下载
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19/amd64/linux-headers-5.19.0-051900-generic_5.19.0-051900.202207312230_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19/amd64/linux-headers-5.19.0-051900_5.19.0-051900.202207312230_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19/amd64/linux-image-unsigned-5.19.0-051900-generic_5.19.0-051900.202207312230_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.19/amd64/linux-modules-5.19.0-051900-generic_5.19.0-051900.202207312230_amd64.deb
这四个包俩俩之间有依赖,需要通过以下命令同时安装两个,
sudo dpkg -i linux-image-unsigned-5.19.0-051900-generic_5.19.0-051900.202207312230_amd64.deb linux-modules-5.19.0-051900-generic_5.19.0-051900.202207312230_amd64.deb
安装好后更新 GRUB 以加载新内核:
sudo vim /etc/default/grub
找到
GRUB_DEFAULT
这一行,将其修改为: GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.19.0-051900-generic"sudo update-grub
sudo reboot
再查看内核版本就可以支持了
最后如果你查看你的nfs版本出现-2,没有+2,需要去配置sudo vim /etc/nfs.conf文件
sudo cat /proc/fs/nfsd/versions
加上udp=y,vers2 = y