当 mkinitrd 将内核模块添加到 initrd 时,它会改变什么?

当 mkinitrd 将内核模块添加到 initrd 时,它会改变什么?

当使用 mkiinitrd (CentOS 5.5) 创建 initrd 时,它添加到 initrd 的内核模块会在此过程中被修改。例如,initrd 的 /lib/sata_via.ko 与 /lib/modules/2.6.18-194.32.1.el5/kernel/drivers/ata/sata_via.ko 的二进制文件不同。

我只是好奇当 mkinitrd 包含内核模块时会发生什么 - 它是否链接到依赖项,或者是什么使模块发生变化?

答案1

/lib/sata_vio.ko你的 initrd 中有一个吗?您的文件系统之一(例如/=“root”)现在(或曾经)位于需要该驱动程序的SATA 驱动器上吗?它的条目是否出现在/etc/modules或中/etc/mkinitrd/modules

在我的 Ubuntu 系统上,该模块位于 initrd 映像内的同一位置,例如<extracted initrd>/lib/modules/<uname -r>/drivers/ata/sata_vio.ko

说什么file?说什么strings | grep '\<ver'?也许它来自不同的驱动程序或不同的内核版本?

显然,您可以使用ls -ldu来了解是否/lib/sata_vio.ko较大,然后nm -D对两个文件运行以查看符号是否有任何差异(例如使用diff)。

整个过程应该记录在 中man mkinitrd,特别是,它应该说明您的系统运行哪些脚本,也许是/usr/share/initrd-tools/scripts或中的某些脚本/etc/mkinitrd/scripts

答案2

initrd(或 initramfs)是一个基于 RAM 的小型文件系统的内容,引导加载程序可供内核在引导时加载。它包含加载模块的最少工具,以及访问所需硬件(例如,硬盘和文件系统)所需的模块。其中包含的最小 init(第一个进程)然后切换到真正的 /。 initrd 映像是所需文件的 gzip(1)ed cpio(1) 存档,不对它们进行链接或其他操作。

相关内容