将内核模块添加到 initrd 时,mkinitrd 会发生什么变化?

Lar*_*ars 6 linux initrd kernel-modules

使用 mkinitrd (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 包含内核模块时会发生什么 - 它是否链接到依赖项,或者是什么使模块发生变化?

Mik*_*kel 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