我在 pxe 部署方面遇到问题。我已安装 ubuntu-20.04.5-live-server 并将其 initrd 和 vmlinuz 用于 pxe。
我在 pxe 部署中已经下载了 initrd 和 vmlinuz,笔记本电脑正在 initrd 上启动,但它无法检测到我的网络设备,即缺少 lan-usb-c 加密狗(r8152 模块)
我已经提取了 initrd 的内容,并首先注意到 main/lib/modules/5.4.0-125-generic/kernel/drivers/net/ 下的 usb 文件夹丢失了。(Ubuntu 22.04 initrd 有该文件夹)
所以我创建了 /usb/ 文件夹,然后我 chroot 到主文件夹,但我遇到困难,我没有 main/lib/modules/5.4.0-125-generic/build/ 文件夹,只有少量工具...也没有 make。
如何将模块安装到 ubuntu-20.04.5-live-server initrd 文件中?相关模块是 r8152
答案1
我在 20.04 服务器上使用/casper/initrd
来自 的文件所采取的步骤ubuntu-20.04.5-live-server-amd64.iso
。
展开initrd
从 ISO 复制的 initramfs 文件。
mkdir expand
unmkinitramfs initrd expand/
确保特定内核的驱动程序在本地可用。linux-modules-extra-...
软件包中包含net/usb
驱动程序。
apt-get -y install linux-modules-extra-5.4.0-125-generic
从本地包复制驱动程序。这将复制整个net/usb
目录,但您可以更有选择性。
cp -r /usr/lib/modules/5.4.0-125-generic/kernel/drivers/net/usb/ expand/main/usr/lib/modules/5.4.0-125-generic/kernel/drivers/net/
创建一个新的 initramfs 文件。
cd expand/
pushd early && find . | cpio -o -H newc > ../myinitrd && popd
pushd early2 && find . | cpio -o -H newc >> ../myinitrd && popd
pushd main && find . | cpio -o -H newc | gzip >> ../myinitrd && popd
现在您将拥有一个myinitrd
可以与 PXE 设置一起使用的 initramfs 文件。
下载驱动程序的替代方法
可以下载并解压该deb
软件包。这可能更容易,特别是如果您没有可用的 20.04 安装。
wget http://mirrors.kernel.org/ubuntu/pool/main/l/linux/linux-modules-extra-5.4.0-125-generic_5.4.0-125.141_amd64.deb
mkdir extract
dpkg --extract linux-modules-extra-5.4.0-125-generic_5.4.0-125.141_amd64.deb extract/
cp -r extract/lib/modules/5.4.0-125-generic/kernel/drivers/net/usb/ expand/main/usr/lib/modules/5.4.0-125-generic/kernel/drivers/net/
注释/链接
- 我能够使用
myinitrd
initramfs 文件进行启动并确认驱动程序已包含在内。 - 22.04 的
initrd
initramfs 文件包含该net/usb
目录的原因是initramfs-tools
目录的支持通过 USB 以太网适配器进行网络启动。 这错误报告和合并请求这导致补丁中包含更多讨论。 - StackExchange 答案如何打包提取的 initrd
- 内核文档Ramfs、rootfs 和 initramfs