nan*_*rad 5 nfs linux-kernel root-filesystem
我正在尝试构建内核 3.13.9,使用 获取apt-get source
,并在干净的debootstrap
chroot 中构建(主机和 chroot 都是 Ubuntu Trusty 的安装)。我的目标是通过 NFS 将无盘机器引导到控制台。
我运行make menuconfig
并启用了 64 位内核,禁用了调试,并确保我正在执行 64 位构建。另外,我去了文件系统->网络文件系统,并启用了以下内容:
主机已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)
作为 内核文档所述,/dev/nfs
它不是真正的设备,而只是提示内核将 NFS 用作rootfs
. 您还必须通过nfsroot
参数或正确设置的 DHCP 守护程序告诉内核在哪里可以找到此根目录 。对于后一个工作,您还必须配置您的内核以自动配置其网络接口,或者有一个initramfs
来处理这个问题。
另外,请确保将 NFS 支持内置到内核二进制文件中,而不是作为模块(或有一个initramfs
,它负责处理此问题)。网络驱动程序也是如此:您很可能希望将以太网 NIC 的驱动程序内置到您的内核映像中,否则您必须从initramfs
.
简而言之,有几种可能:
root=/dev/nfs
设置,提供正确的nfsroot
参数并通过参数告诉您的内核您的网络配置ip
(这将是确保它完全正常工作的最佳方法,即排除配置错误的 DHCP 服务器)。CONFIG_IP_PNP
和CONFIG_IP_PNP_DHCP
启用并设置DHCP守护进程要告诉你的客户端,IP地址使用和在哪里可以找到其NFS根。initramfs
执行正确配置和 NFS 挂载的文件。编辑:我认为,如果您按照编辑的建议使用initrd
/ initramfs
,则必须在initrd
(resp。您initrd
必须意识到它必须这样做的事实) 中执行 NFS 挂载。通过内核自动挂载(如 IP 自动配置,IIRC)仅在没有initrd
.