这是我问过的另一个问题的后续问题这里。
总结一下:我正在尝试启动我自己配置和构建的 Linux 内核,作为 Linux From Scratch (LFS) 安装的一部分。但是,我在中看到以下行/var/log/kern.log
:
Oct 9 17:24:17 <lee_lfs> kernel: Cannot find map file.
我一直在阅读 klogd 的源代码(这是使用 SysVinit),问题似乎是映射文件不包含 klogd 正在寻找的“版本”行。
无论如何,我的问题是:这个问题有多大?这可能会导致什么类型的问题?这是我可以忽略的事情,系统仍然应该启动并运行正常,还是这是一个需要解决的问题?
答案1
这是多大的问题啊。
相当重要。例如:你的发行版可能无法使用。
这可能会导致什么类型的问题?
这有点难以判断,但如果您观察内核日志,您应该能够相当快地判断出来。
这是我可以忽略的事情,系统仍然应该启动并运行正常,还是这是一个需要解决的问题?
如果你重视稳定性,我认为这是一个不能忽视的问题。我这样说是因为没有它就很难调试系统。
嗯,我可以看到发生了一些事情。
内核未构建 system.map、未创建符号链接或某些权限导致了问题。
如果有帮助的话,system.map 也称为符号表。我之前提到过它会影响稳定性,但更多的是使系统调试变得更加困难。
以下是 Makefile 中的条目,以便您可以看到发生了什么:
nm /boot/vmlinux-2.4.18-19.8.0 > System.map
# Below is the line from /usr/src/linux/Makefile
nm vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map
cp /usr/src/linux/System.map /boot/System.map-2.4.18-14 # For v2.4.18
所以首先要确保这个副本正在发生。
让事情变得更复杂的是,如果 klogd 没有被告知 system.map 位于哪里,它会在这里查找:
- /boot/系统.map
- /系统.map
- /usr/src/linux/System.map
有可能你的 Linux 内核编译输出到 /usr/src/linux-version/System.map ,而 klogd 根本看不到那里。该文件的副本会立即告诉您是否存在问题。
答案2
为了回答我自己的问题:我可以确认我构建的自定义内核确实可以启动并且似乎运行良好,即使映射文件被完全删除也是如此。因此,从启动系统的角度来看,这似乎不是一个关键要求。然而,正如 Matt O. 在他的回答中所说,如果内存位置无法与 System.map 文件包含的符号匹配,似乎可能会使调试变得更加困难。