使用 NFS 支持构建内核,但未获得 /dev/nfs

nan*_*rad 5 nfs linux-kernel root-filesystem

我正在尝试构建内核 3.13.9,使用 获取apt-get source,并在干净的debootstrapchroot 中构建(主机和 chroot 都是 Ubuntu Trusty 的安装)。我的目标是通过 NFS 将无盘机器引导到控制台。

我运行make menuconfig并启用了 64 位内核,禁用了调试,并确保我正在执行 64 位构建。另外,我去了文件系统->网络文件系统,并启用了以下内容:

  • 网络文件系统
  • NFS 客户端支持

主机已nfs-kernel-server安装,并为我想用作网络引导系统根目录的目录设置了导出。

PXE 启动正常,内核和 initrd 已加载,但经过长时间的停顿后,由于缺少根文件系统,我被转储到 busybox 提示符。

可能是什么原因?(或者,是否需要更多信息?)

编辑:我已经通过了nfsroot

LABEL linux
KERNEL vmlinuz-3.13.9
APPEND root=/dev/nfs initrd=initrd.img-3.13.9 nfsroot=192.168.1.39:/nfsroot,rw ip=dhcp rw
Run Code Online (Sandbox Code Playgroud)

And*_*ese 5

作为 内核文档所述,/dev/nfs它不是真正的设备,而只是提示内核将 NFS 用作rootfs. 您还必须通过nfsroot参数或正确设置的 DHCP 守护程序告诉内核在哪里可以找到此根目录 。对于后一个工作,您还必须配置您的内核以自动配置其网络接口,或者有一个initramfs来处理这个问题。

另外,请确保将 NFS 支持内置到内核二进制文件中,而不是作为模块(或有一个initramfs,它负责处理此问题)。网络驱动程序也是如此:您很可能希望将以太网 NIC 的驱动程序内置到您的内核映像中,否则您必须从initramfs.

简而言之,有几种可能:

  1. 按照上面的链接告诉你:有 root=/dev/nfs设置,提供正确的nfsroot参数并通过参数告诉您的内核您的网络配置ip(这将是确保它完全正常工作的最佳方法,即排除配置错误的 DHCP 服务器)。
  2. CONFIG_IP_PNPCONFIG_IP_PNP_DHCP启用并设置DHCP守护进程要告诉你的客户端,IP地址使用和在哪里可以找到其NFS根。
  3. 建立一个 initramfs执行正确配置和 NFS 挂载的文件。

编辑:我认为,如果您按照编辑的建议使用initrd/ initramfs,则必须在initrd(resp。您initrd必须意识到它必须这样做的事实) 中执行 NFS 挂载。通过内核自动挂载(如 IP 自动配置,IIRC)仅在没有initrd.