系统为CentOS 6.3。
我已经编译了一个新内核并将生成的 rpm 安装在目标机器上。从内核启动时,我收到问题标题中的错误。
我提取了相应的 initramfs 并比较了以下输出:
modprobe --dump-modversions /path/to/scsi_wait_scan.ko
在相应的 /boot/ symvers -* 中包含条目。所有符号校验和都适合,包括module_layout。
有没有办法从内核本身中提取符号?
系统为CentOS 6.3。
我已经编译了一个新内核并将生成的 rpm 安装在目标机器上。从内核启动时,我收到问题标题中的错误。
我提取了相应的 initramfs 并比较了以下输出:
modprobe --dump-modversions /path/to/scsi_wait_scan.ko
在相应的 /boot/ symvers -* 中包含条目。所有符号校验和都适合,包括module_layout。
有没有办法从内核本身中提取符号?
我发现了问题。
简短的回答
问题是我在已经安装的内核 rpm (A) 上安装了内核 rpm (B),而没有先将其删除。
详细解答
scsi_mod.ko
仅由 (A) 拥有。安装 (B) 时,scsi_mod.ko
位于 /lib/modules/ 中。在 (B) 的安装后脚本中创建 inramfs 时。depmod 决定scsi_wait_scan.ko
取决于scsi_mod.ko
,而两者都针对不同的配置进行构建。
稍后在启动机器时,内核开始运行 initramfs。这反过来 modprob'ed scsi_wait_scan.ko
。modprobe 尝试作为结果加载scsi_mod.ko
,这不适合当前内核,从而导致我看到的错误。