嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)

前言:

最近在学习正点原子嵌入式Linux开发板uboot的移植实验,移植完之后想测试网络部分的驱动能否工作正常。最后经过测试发现tftp可以正常下载,nfs却一直报错无法下载文件,最后也是折磨了两天才解决了问题,特写下此博客进行记录、总结。

项目场景:

我的轻薄本没有网口,事先买了一个刷过固件可以连校园网的路由器。准备好路由器之后,校园网通过一根网线接路由器的wan口,剩余两个lan口,一个接到正点原子alpha开发板的ENET2、笔记本电脑连路由器的WiFi、ubuntu改为桥接静态ip,使得三者在同一网段内(windows、ubuntu、uboot(不是linux内核))

ubuntu 192.168.10.218
uboot 192.168.10.220
windows 192.168.10.46

具体实物图:

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第1张图片

然后测试了一下测试三者是否能互相ping通(只有windows和ubuntu无法ping通uboot,其余四种情况都可以正常ping通),ubuntu和windows无法ping通uboot好像是uboot没有解析ping命令,但是这个不影响后面的实验。下面是三者互相ping的截图

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第2张图片 uboot ping ubuntu和windows 嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第3张图片 ubuntu ping windows 嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第4张图片 windows ping ubuntu

根据教程,一开始想使用nfs服务但行不通,但使用tftp服务可以正常下载、nfs没调通这个问题就没有过多理会。直到学习根文件系统测试时,根文件系统都是通过nfs进行挂载,我一开始还是想取巧避开nfs用tftp进行挂载,但是我看了看linux内核文件好像只支持nfs、没有看到tftp的字眼,而且后面的教程都是用nfs,所以就躲不掉了,只能先调通nfs才能继续往下走。

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第5张图片 nfs服务下载失败

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第6张图片 nfs cannot mount错误

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第7张图片 tftp服务可以正常下载

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第8张图片

 

解决方案:

因为我能通过tftp服务进行下载,说明我的网络拓扑应该是没有什么问题的,问题应该就在nfs服务这部分。这期间我看了正点原子常见错误的总结、还有一些大佬们的博客、咨询某宝技术客服最后才得以解决,大家可以按顺序针对下面的情况进行设置和排查。

1、关闭杀毒软件(火绒等)、关闭windows的防火墙、ubuntu的也关闭。(嫌麻烦ubuntu的我就直接卸载了)

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第9张图片

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第10张图片

2、uboot使用的nfs版本是version2,而ubuntu16以上默认是version3或者version4,通过sudo cat /proc/fs/nfsd/versions可以查看当前ubuntu支持的nfs版本。我用的ubuntu版本是20.04,为了兼容要修改 /etc/default/nfs-kernel-server配置文件,通过sudo vim /etc/default/nfs-kernel-server进入文件进行修改。

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第11张图片 nfs 不支持version2

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第12张图片

修改之后重启nfs服务(sudo service nfs-kernel-server restart)看是否能成功下载,如果还是不行继续往下看。

3、出现cannot mount或者编译一段时间后出现TTT错误,可以查看一下/etc/hosts、/etc/exports这两个配置文件

sudo vim /etc/exports                sudo vim /etc/hosts

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第13张图片 /etc/hosts 要添加的内容

/etc/exports添加的内容分为三部分

1:nfs服务共享目录绝对路径

2:*代表所有的ip都可访问

       如果只限定一个ip只需将*改为192.168.10.220(要和ubuntu在同一网段)

       如果要使用同一网段只需将*改为192.168.10.*

3:(rw,sync,no_root_squash)为nfs服务的一些命令参数

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第14张图片

 嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第15张图片

修改完exports后记得重新声明一下 sudo exportfs  -ar、重启一下nfs服务。

我看完很多人的博客到这步基本上都弄好了,nfs可以成功下载文件了,但是我的还是不行。

4:设置完上述内容后打印nfs的version还是出现-2,我用netstat看一下nfs对应端口,发现没有udp只有tcp

netstat -a | grep "nfs"

设置一下这个文件/etc/nfs.conf

sudo vim /etc/nfs.conf

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第16张图片

注意重新启动nfs服务 sudo service nfs-kernel-server restart 重新执行netstat,出现了udp

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第17张图片

sudo cat /proc/fs/nfsd/versions可以发现出现了+2,即支持nfs服务的version2,接下来要做的就是验证一下

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第18张图片

在uboot中执行命令nfs 80800000 192.168.10.218:/home/lpme/linux/nfs/zImage发现可以成功下载

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第19张图片

其中一些T可能是网络问题,我们看一下dram里面的内容和zImage(用winhex打开)里的内容是否相同

md.b 80800000 2000

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第20张图片

 嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)_第21张图片

 进行比较两者是相同的,即nfs服务可以正常使用了。

总结:

非常感谢你能看到这里,希望这篇文章能帮你解决问题。

你可能感兴趣的:(linux,经验分享,ubuntu,arm开发,网络)