我正在尝试通过 NFS 挂载我的 rootfs。我启用了这些内核配置:
CONFIG_NFS_FS=y (NFS support)
CONFIG_IP_PNP=y (configure IP at boot time)
CONFIG_ROOT_NFS=y (support for NFS as rootfs)
这是我的内核命令行:
debug nfsrootdebug loglevel=8 console=ttymxc1,115200 imx-fbdev.legacyfb_depth=32 consoleblank=0 ip=10.42.102.244:10.42.102.5::255.255.255.0::eth0: root=/dev/nfs nfsroot=10.42.102.5:/srv/nfs/dc10,v3,tcp noinitrd
以下是启动消息中的相关部分:
libphy: 63fec000.etherne:01 - Link is Up - 100/Full
IP-Config: Complete:
device=eth0, hwaddr=00:d0:93:2a:6c:8e, ipaddr=10.42.102.244, mask=255.255.255.0, gw=255.255.255.255
host=10.42.102.244, domain=, nis-domain=(none)
bootserver=10.42.102.5, rootserver=10.42.102.5, rootpath=
ALSA device list:
#0: imx53-mba53-sgtl5000
Freeing init memory: 6332K
Welcome to Buildroot 2013.05!
我本来希望看到有关 RPC 通信和通过 nfs 安装 VFS 的行,但没有任何内容,也没有打印任何错误消息,因为提供了“debug”、“nfsrootdebug”和“loglevel=8”作为内核参数。
我已经在 nfs 服务器端使用 tcpdump 验证没有发送任何数据包。
开发板启动后,我可以使用 ssh 连接到运行 nfs-server 的计算机。
有谁对出了什么问题或者我如何进一步调试有任何建议吗?
答案1
我没有专门使用过 ARM,但通常对于 NFS root,命令行应该看起来像root=nfs:[Server IP]:/[Directory],[options]
(所以对你来说就是root=nfs:10.42.102.5:/srv/nfs/dc10,v3,tcp
),并且 initrd 将解析出 root 信息。 usingroot=/dev/nfs
通常已被弃用(该文件/dev/nfs
实际上并未在安装过程中使用,它只是应该使用 NFS 的提示,但并不总是存在于较新的 initrd 中。
我在你的命令行中看到你使用的noinitrd
,这是有原因的吗? initrd 的作用是提高挂载根分区的灵活性,并且非常适合这种场景(挂载不是内部 HD 的根设备)。
另外,您的内核命令行是否来自本地磁盘上的分区?或者这是一个无盘系统(PXE 引导至 NFS 根目录)?如果可能的话,在调试时删除本地磁盘以查看会发生什么会很有用,但是如果您的内核命令行来自boot
本地磁盘上的分区,则不太可行。