开发环境:
NFS方式挂载根文件系统失败,提示:
[ 101.168510] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[ 101.176792] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0) ]---
错误码说明:
而我的错误码是unknown-block(2,0)
,错误码为2,说明错误因为大概率是linux主机的nfs安装问题,检查nfs后并没有发现问题,遂又去查看NXP官方EVK开发板里的imx6ullevk.h
里的运行脚本:
发现他是使用dhcp自动获取的ip,这个不用管,但是后面添加了v3,tcp
这两个参数,不知道什么意思,遂去查看linux内核源码目录下Documentation\filesystems\nfs\nfsroot.txt
文件,这个文件是介绍从网络挂载文件系统时候设置bootargs变量的方法,从该文件中了解到v3
表示指示NFS使用v3版本协议,tcp
表示使用的是tcp协议。
后又从网上了解到,uboot中默认是使用NFS-V2协议,而ubuntu1804默认使用的是NFS-V3协议,这就造成了挂载时候的不兼容,造成挂载不上。
那么将原本的参数:
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.28.254:/rootfs ip=192.168.28.234:192.168.28.254:192.168.28.1:255.255.255.0::eth0:off'
改为:
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.28.254:/rootfs,v3,tcp ip=192.168.28.234:192.168.28.254:192.168.28.1:255.255.255.0::eth0:off'
即可挂载成功!
上面那种方式是指定bootargs变量,但是如果你移植的uboot和linux内核版本不是很新的话,uboot和内核还不支持NFS-V3版本协议,那么就只能修改ubuntu的NFS配置了。
问题解决:
vim /etc/default/nfs-kernel-server
在文件末尾加入:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
重启NFS:
/etc/init.d/nfs-kernel-server restart
这样就能开发板就能挂载上了!
ends…