我目前正在尝试从 NFS 服务器启动 Atmel Sama5d2 Xplained 评估板。我运行的是 Debian 9,内核版本为 4.9.0,nfs 服务器是 nfs-kernel-server。
这是 NFS 服务器配置
/srv/tftp/xplained/rootfs *(rw,nohide,no_subtree_check,async,no_root_squash)
我的 NFS 服务器成功导出我的文件夹,因为我可以通过网络将它们安装到另一个 Linux 上。
我还可以从我的 tftp 服务器检索内核映像和 dtb 文件。
但是当内核启动时,它无法从导出的 rootfs 启动并返回以下错误
VFS: Unable to mount root fs via NFS, trying floppy.
List of all partitions:
0100 8192 ram0 (driver?)
0101 8192 ram1 (driver?)
0102 8192 ram2 (driver?)
0103 8192 ram3 (driver?)
b300 3833856 mmcblk0 driver: mmcblk
b301 112172 mmcblk0p1 00000000-01
b302 3721550 mmcblk0p2 00000000-02
b318 128 mmcblk0rpmb (driver?)
b310 1024 mmcblk0boot1 (driver?)
b308 1024 mmcblk0boot0 (driver?)
No filesystem could mount root, tried: nfs
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
这是我的内核参数
ip=dhcp console=ttyS0,115200 earlyprintk root=/dev/nfs rootfstype=nfs rw nfsroot=<server_ip>:/srv/tftp/xplained/rootfs
以及有关 nfs-moutd 服务的 dmesg
oct. 09 18:10:13 PC325 rpc.mountd[566]: authenticated mount request from 192.168.128.158:788 for /srv/tftp/xplained/rootfs (/srv/tftp/xplained/rootfs)
oct. 09 18:10:18 PC325 rpc.mountd[566]: authenticated mount request from 192.168.128.158:704 for /srv/tftp/xplained/rootfs (/srv/tftp/xplained/rootfs)
oct. 09 18:10:28 PC325 rpc.mountd[566]: authenticated mount request from 192.168.128.158:796 for /srv/tftp/xplained/rootfs (/srv/tftp/xplained/rootfs)
oct. 09 18:10:48 PC325 rpc.mountd[566]: authenticated mount request from 192.168.128.158:762 for /srv/tftp/xplained/rootfs (/srv/tftp/xplained/rootfs)
我尝试了在互联网上找到的许多东西,例如检查防火墙规则、锁定端口等......但它仍然不起作用。最奇怪的是,我在 Ubuntu 机器上尝试使用相同的数据包,结果成功了。
我还尝试了全新的 Debian 安装,它也有效。
我想了解为什么它不能在我的开发计算机上运行。可能如何修复它
答案1
我在运行 Manjaro Linux(基于 arch)时遇到了同样的问题。在 ubuntu 14.04 上它可以工作,但在 manjaro 上不行。进行wireshark捕获后,问题就暴露出来了。 nfs 服务器响应“接受状态:远程无法支持版本 # (2)”。我在 nfs 服务器上的 /etc/nfs.conf 中启用了版本 2,如下所示:
[nfsd]
# debug=0
# threads=8
# host=
# port=0
# grace-time=90
# lease-time=90
# udp=y
# tcp=y
vers2=y
vers3=y
vers4=y
vers4.0=y
vers4.1=y
vers4.2=y
# rdma=n
#
这对我有用。
答案2
感谢@alanSchmitz,经过一番调查,我终于找到了问题所在。
显然我必须通过在内核启动参数上指定 NFS v3 来强制在 uboot 中使用 NFS v3,如下所示root=/dev/nfs rootfstype=nfs rw nfsroot=<server_ip>:/srv/tftp/xplained/rootfs,vers=3
我尝试在服务器端修复此问题,但找不到如何强制使用 NFS v3。
如果我发现如何在服务器端强制使用 NFS v3 来安装共享,我将更新我的答案。