问题
在学习正点原子的《Linux之系统移植和根文件系统构建篇》的3.2讲时,视频教程使用nfs在uboot环节下载zImage镜像,我下载时一直显示T T T,下载超时。
通过查阅资料,在这篇文章中发现了可能是nfs的版本不匹配问题。
嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)
问题定位
上面的解决方法是直接开启nfs2,但是我发现我使用的ubuntu24.04版本根本就不支持nfs2功能。查看命令:grep CONFIG_NFSD_V2 /boot/config-$(uname -r)

如图显示为not set,则表明内核层面就不支持 NFSv2,所以也就不可能开启NFSv2。在这种情况下,可以选择降低ubuntu的版本,但是太麻烦了,在github上找到了一个nfsv2的程序,可以解决这个问题。

NFSv2下载地址
NFSv2安装使用流程
- 下载源代码,并在ubuntu中解压;
- 在源代码目录下创建一个build文件夹
mkdir build - 进入build目录,执行命令
cmake .. - 执行命令
make,获得最终的nfsv可执行文件 - 关闭系统nfs,
sudo apt remove nfs-kernel-server - 彻底禁用rpcbind,
sudo systemctl stop rpcbind rpcbind.socket,`sudo systemctl disable rpcbind rpcbind.socket`` - 重启系统
在需要使用nfsv2的使用,进入build文件夹执行命令
# 格式:./nfsv2 [你要共享的文件夹路径]
# 例如:你要下载 /home/user/linux/zImage,那就指定该目录
sudo ./nfsv2 /home/user/linux

如上图所示,成功下载
缺点
每次使用需要重新启动
卸载了系统nfs,后续想使用系统nfs,需要重新下载配置
更新
在后续的根文件移植中,需要使用nfs来进行根文件的挂载,使用的命令为:
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.250:
/home/zuozhongkai/linux/nfs/rootfs,proto=tcp rw ip=192.168.1.251:192.168.1.250:192.168.1.1:
255.255.255.0::eth0:off' //设置 bootargs
在这里可以直接使用ubuntu支持的nfs版本,例如version3
指定使用的版本命令
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.250:
/home/zuozhongkai/linux/nfs/rootfs,proto=tcp,nfsvers=3 rw ip=192.168.1.251:192.168.1.250:192.168.1.1:
255.255.255.0::eth0:off' //设置 bootargs
其实这样在前面的uboot阶段,可以放弃使用nfs进行网络下载,使用tftp。在根文件挂载的时候,nfs就可以支持version3了。

1064

被折叠的 条评论
为什么被折叠?



