我将我的 Ubuntu 18.04 系统配置为使用早期启动控制台,并将内核命令行参数更改为:
console=uart,mmio32,0xd091c000 console=tty0
这会给我一个通过串行端口进行的早期启动控制台,直到启动过程中的某个点,然后切换到将内核日志发送到/dev/tty0
,然后系统就可以正常启动了。
因为我想要全部内核日志遇到我的串行端口时,我删除了console=tty0
。
console=uart,mmio32,0xd091c000
现在的问题是出现内核恐慌:
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000100
日志中似乎没有任何内容表明发生了错误。
启动时需要什么命令行参数?
答案1
以下是我的理论。基于 UART 的控制台不是真正的 TTY。意图根据该console=
选项的文档(强调添加),内核稍后会切换到常规串行设备:
在指定的 I/O 端口或 MMIO 地址上的 8250/16550 UART 上启动早期轮询模式控制台,稍后切换到匹配的 ttyS 设备。
然而,在开始时这并没有发生/init
:
[ 3.329451] Run /init as init process
设备名称分配得较晚:
[ 6.759113] 0000:00:1e.3: ttyS4 at MMIO 0xd091c000 (irq = 18, base_baud = 2764800) is a 16550A