【问题标题】:problems during linux kernel initlinux内核初始化过程中的问题
【发布时间】:2010-01-16 10:59:55
【问题描述】:

内核初始化期间崩溃的可能罪魁祸首是什么?

我正在运行一个具有 initramfs 的内核,inittab 是非常基本的 rcS(作为 sysinit)和 getty(respawn)。启动时我没有收到任何错误消息,但是 init 给了我这个消息: S0 重生太快:禁用 5 分钟,其中 S0 实际上是 respawn::getty 行(似乎 getty 不断崩溃),在控制台上也看不到 rcS 生成的任何消息(我假设 rcS 命令也崩溃)。

如果我强制内核转到 /bin/sh(而不是 /init),我可以手动调用 rcS 并且不会出错,getty 也会发生同样的情况(如果我使用 inittab 中的相同参数调用 getty,它工作正常)。

我想知道 init 产生进程的方式和 /bin/sh 的方式有什么区别。

【问题讨论】:

  • 您需要提供 /etc/inittab 的内容。省略任何 cmets 和空行 - 只是胆量。

标签: linux kernel


【解决方案1】:

某些操作系统的 log init 会重新生成到 wtmp,您可能需要检查那里。打开您的系统日志也可能会有所帮助。

当您通过 /bin/sh 启动 getty 时,它会继续运行吗? AFAIK,init respawn 的诀窍是它生成的 PID 被监控,如果它出现故障,它会启动另一个。

【讨论】:

  • 不,如果我将重生更改为 /bin/sh,我会收到相同的消息“重生太快:禁用 5 分钟”我可以避免这种情况的唯一方法是执行 /bin/sh的 /init,也是因为系统日志已安装到 ramdisk 我没有看到任何消息。
【解决方案2】:

stock /bin/sh 不是静态构建的,getty 也不是。你需要看看 /bin/sh 和 getty 的共享库依赖关系,所有库都存在。

您可以使用 ldd 或 'readelf -a' 查看共享库的依赖关系。

【讨论】:

  • 我试过了,我在尝试使用 ldd 时收到非法指令。我认为我的发行版存在根本性的问题,我想知道我是否需要在 linux 内核中为 64 位 DDR2 做任何特别的事情,这是对当前评估板的唯一更改。
  • 如果你怀疑你的记忆力,你应该从安装光盘尝试 memtest,大多数发行版在启动/安装菜单中提供它。
【解决方案3】:

也许没有设置 /dev/tty1/dev/tty2 等,但在 /dev/console 上运行正常(这与 /dev/tty1 不同)。如果您依赖 /dev 目录位于您的 initramfs 或根文件系统中,请检查这些。

可能 init=/bin/sh 和让 init 产生东西的主要区别是 /dev/console/dev/ttyx。我想不出任何其他相关的东西。请记住,我认为 initramfs 确实首先运行。

顺便说一句,如果 init(8) 或 /bin/sh 可以运行,您显然已经过了内核初始化阶段。

【讨论】:

    猜你喜欢
    • 2017-04-18
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2016-12-25
    • 2013-10-20
    • 2011-09-07
    相关资源
    最近更新 更多