提前说明:
1、我使用的虚拟机是Ubuntu20.04
2、阿尔法开发板必须使用靠近BD9的那个网口
3、网段根据自己实际情况去设置
板子的uboot下:
==> setenv ipaddr 192.168.1.100
==> setenv ethaddr 0:0c:29:c6:ff:c9(同网段要唯一)
==> setenv gatewayip 192.168.1.1
==> setenv netmask 255.255.255.0
==> setenv serverip 192.168.1.106(nfs服务器地址,用于下载zImage)
ipaddr 是开发板要设置的IP,注意不要与局域网的IP冲突
ethaddr 0:0c:29:c6:ff:c9 据说是网卡的MAC地址,咋来的不知道,反正在同网段要唯一,可以根据自己Ubuntu的MAC修改一下得到
gatewayip 网关
netmask 255.255.255.0 子网掩码
serverip nfs服务器地址IP,就是Ubuntu的IP
Ubuntu20设置NFS服务:
$ sudo apt-get install nfs-kernel-server rpcbind
$ mkdir -p /home/ckl/my_board/nfs
$ sudo vi /etc/exports
/etc/exports 内容:
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/home/ckl/my_board/nfs *(rw,sync,no_root_squash)
重启nfs服务:
$ sudo /etc/init.d/nfs-kernel-server restart
从服务器下载镜像:
先将编译好的zImage 和 dtb 拷贝到:/home/ckl/my_board/nfs
使用板子下载: (下载地址:zImage:0x80800000 dtb:0x83000000)
==> nfs 0x80800000 192.168.1.106:/home/ckl/my_board/nfs/zImage
然后会遇到报错:
报错:Loading: *** ERROR: File lookup fail
百度上说,是nfs版本不一致导致的,然后给出的方法是:
$ sudo vi /etc/default/nfs-kernel-server
将:RPCNFSDCOUNT=8
替换为:$ RPCNFSDCOUNT="-V 2 8"
确实是解决了,但是又遇到一个问题:
uboot使用nfs命令下载zImage下载到一半,卡住了
继续百度,又找到了解决方法:
之前说过:我用的是Ubuntu20,据说还是版本不一致问题)
解决:$ sudo vi /etc/hosts
最后一行增加:192.168.1.106 /home/ckl/my_board/nfs/
问题解决。但是我的问题又来了:如此以来,我以后如果经常使用Ubuntu20的nfs,岂不是要经常配置这个文件?或者需要将我的Ubuntu设置为静态IP?(嗯。。还应该再做一个Ubuntu设置静态IP的笔记)
后来咨询了大哥,原因是:ubuntu18.04及其以上只支持nfs 3和nfs 4,而uboot默认使用nfs 2
给的解决方法,可以同时解决上面的两个问题:(最优解)
$ sudo vi /etc/default/nfs-kernel-server
最后一行加上: RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"