Linux内核:“找不到映射文件”

Time4Tea

我一直在尝试让自己配置和编译的Linux内核运行,但到目前为止没有成功。该计算机是一台Apple Macbook(Intel Core 2 Duo,64位),已安装免费的Libreboot固件,其中GRUB2作为有效负载。我正在尝试使用此自定义内核来启动我已构建的Linux From Scratch安装。我在机器的另一个分区上安装了Trisquel GNU / Linux(版本7),它工作正常,因此我知道可以在此硬件/固件配置上启动GNU / Linux。

内核版本是4.13.1(linux-libre),这是我第一次尝试编译自己的内核。当我尝试从GRUB命令提示符启动它时,屏幕变黑并且没有任何输出显示。但是,它确实写入了/var/log/kern.log文件。特别是,我对日志文件开头的以下消息感到困惑:

Oct 9 17:24:17 <lee_lfs> kernel: klogd 1.5.1, log source = /proc/kmsg started.
Oct 9 17:24:17 <lee_lfs> kernel: Inspecting /boot/System.map
Oct 9 17:24:17 <lee_lfs> kernel: Cannot find map file.
Oct 9 17:24:17 <lee_lfs> kernel: Loaded 100800 symbols from 32 modules.
Oct 9 17:24:17 <lee_lfs> kernel: [ 0.000000] random: get_random_bytes called from start_kernel+0x30/0x3bc with crng_init=0
Oct 9 17:24:17 <lee_lfs> kernel: [ 0.000000] Linux version 4.13.1-gnu (nobody@lee-LibreBook) (gcc version 7.2.0 (GCC)) #1 SMP PREEMPT Mon Oct 9 13:39:53 EDT 2017 

那里的第二行似乎表明它已经找到了/boot/System.map文件。但是,以下行表明该文件被拒绝(我怀疑这可能至少部分负责内核无法完全启动)。

有谁知道这可能是什么原因?我之前在Linux Questions网站(这里的链接上问过这个问题但是,没有人能够弄清楚这一点。(该链接包含问题的更多背景信息以及之前建议的内容)。

编辑-回答评论中提出的建议:

一位用户建议,“ Inspecting ...”行可能并不意味着klogd正在访问该文件,而可能仅意味着它已开始寻找该文件。但是,我最初忘记在/ etc / fstab中为/ boot分区添加一行(在这种情况下,显然无法找到该文件),并且没有在'Inspecting ...'行打印。只有在我修复了/ etc / fstab之后,该行才开始出现在日志中,并且具有正确的映射文件路径。这就是为什么我怀疑klogd正在查找地图文件,但由于某种原因似乎并未接受它。

Time4Tea

因此,我一直在研究klogd的源代码,我想我知道答案是什么:

首先,该Inspecting ...行确实意味着klogd在该位置找到了地图文件并成功打开了该文件。

但是,打印Cannot find map file.的原因是因为它正在以下形式的地图文件中寻找行:

[address] [type] _Version_XXXXX

其中“ XXXXX”是内核版本,以256为基数编码。

但是,在我的内核构建过程中生成的任何映射文件中都没有此版本行(预包装的Trisquel安装随附的映射文件中也没有)。因此,由于找不到此版本行,因此klogd拒绝了地图文件。

显然,这导致了进一步的问题,尽管...

编辑:我创建了这些后续问题:

“找不到地图文件”有多大的问题。启动消息?

为什么我的System.map文件不包含'Version_XXXXX'行?

编辑:我在System.map文件的开头添加了“虚拟”版本行:

0FFFFFFFFFFFFFFF d Version_265223

该地址是虚拟内存映射中不应该存在的地址(因此希望该地址不会与文件中的任何其他符号发生冲突或冲突)。'265223'是我的内核版本(4.12.7),以base 256编码。启动时,我现在在kern.log文件中得到以下内容:

Nov  3 19:12:02 <lee_lfs> kernel: klogd 1.5.1, log source = /proc/kmsg started.
Nov  3 19:12:02 <lee_lfs> kernel: Inspecting /boot/System.map-4.12.7
Nov  3 19:12:02 <lee_lfs> kernel: Loaded 86148 symbols from /boot/System.map-4.12.7.
Nov  3 19:12:02 <lee_lfs> kernel: Symbols match kernel version 4.12.7.
Nov  3 19:12:02 <lee_lfs> kernel: Loaded 11257 symbols from 31 modules.

看来似乎已经奏效了-klogd终于认出了地图文件!内核仍然没有启动,尽管那可能是由于另一个问题引起的,接下来我将要研究它。目前,这似乎是一个临时解决方案。但是,我将联系内核开发团队以了解发生了什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章