imx6ull uboot nfs Loading* done异常
uboot nfs加载内核zImage 失败,直接done,我使用的开发板是正点原子的阿尔法。
找了很多文章,基本都试过,反而还出现新的问题,nfs出现的问题,都被我碰见了。
加载失败:
一直等待TTT……
据网上说是防火墙的问题,于是 sudo uwd disable 操作一遍,还是不行,最后 卸载 防火墙 sudo apt-get remove iptables。倒腾了一天。
然后就成功了,文件大小和文件内容比对没错,皆大欢喜,但是加载在最后。有一点瑕疵(出现后面TTT等待一段时间才结束,正常来看在T之前是应该传输完成了,可以尝试ctrl+c结束)
加载设备树 ,一样也会出现上面的问题。
bootz 80800000 - 83000000 运行没问题(这个是在 ubuntu18 上面是ubuntu16 经过测试都没问题)
成功挂载根文件系统(nfs挂载)
后面是实际操作步骤:
一、搭建nfs环境(ubuntu16 )
1、安装nfs
sudo apt-get install nfs-kernel-server
2、设置共享目录
sudo vi /etc/exports
/*验证共享目录是否正确*/
showmount -e
3、修改nfs版本
因为uboot的nfs版本较低,ubuntu要指定下版本,兼容uboot的nfs。
sudo vim /etc/default/nfs-kernel-server
/etc/default/nfs-kernel-server 内容:
# Number of servers to start up
#RPCNFSDCOUNT=8
RPCNFSDCOUNT="-V 2 8"
# Runtime priority of server (see nice(1))
RPCNFSDPRIORITY=0
# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information,
# see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
#RPCMOUNTDOPTS="--manage-gids"
RPCMOUNTDOPTS="-V 2 --manage-gids"
# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD=""
# Options for rpc.svcgssd.
#RPCSVCGSSDOPTS=""
RPCSVCGSSDOPTS="--nfs-version 2,3,4 --debug --syslog"
4、重启nfs server
sudo /etc/init.d/nfs-kernel-server restart
5、关闭防火墙
sudo ufw disable
开始尝试在开发板加载内核,确保可以ping通服务器。
一定要注意在nfs加载内核时,先ping下服务器(虚拟机ubuntu),再记载内核。(我在前面都是先ping后,再加载内核,成功率较高)。如果还不行就走第六步卸载防火墙,然后ping完再加载内核。还不行开发板重启,再来一遍。
6、卸载防火墙(可做可不做 后面会解释)
sudo apt-get remove iptables
一开始,我是再ubuntu18 nfs环境,搭好,但是一直loading * 直接done,内存上的数据是有问题的。然后我跑到ubuntu16,一样的操作,也不行,后面卸载了防火墙就行了(感觉可以不用卸载,估计是巧合),为什么这么说?因为我换成ubuntu18环境,也可以加载。我猜是底层网络的bug,后面发现先ping之后,再加载的成功率很高。
因为nfs涉及到后面的跟文件挂载,所以倒腾了一些时间。分享一点。如果跟文件挂载失败,很可能bootargs 没写对。一定要手写,不要粘贴,容易出错。