如何配置Linux将earlycon设为全程主控制台(8250 UART虚拟机环境)
解决方案
要让Linux全程使用earlycon作为主控制台,需从内核命令行、内核配置及用户空间配置三方面调整:
1. 修改内核命令行
移除原命令行中的console=ttyS0,添加keep_bootcon参数,阻止系统启动后禁用bootconsole。修改后的内核命令行为:
ro earlycon=uart8250,mmio,0x10000000,1000000 keep_bootcon
keep_bootcon:内核启动完成后保留bootconsole(即earlycon),不自动切换到标准串口控制台- 去掉
console=ttyS0:避免系统加载标准串口驱动后切换到ttyS0
2. 验证内核配置
确保内核编译时开启以下选项,同时关闭可能冲突的标准串口控制台配置:
- 开启
CONFIG_SERIAL_EARLYCON=y(必须,支持earlycon功能) - 关闭
CONFIG_SERIAL_8250_CONSOLE=y(可选,阻止标准8250串口控制台注册,消除自动切换的可能) - 若无需标准串口功能,可关闭
CONFIG_SERIAL_8250=y(彻底禁用8250串口驱动,从根源避免切换)
3. 用户空间控制台配置
确保用户登录shell绑定到控制台设备:
- 若使用sysvinit(依赖inittab),修改
/etc/inittab对应行,让getty指向/dev/console:::respawn:/sbin/getty -L console 1000000 vt100 - 若使用systemd,创建或修改
/etc/systemd/system/getty@ttyS0.service.d/override.conf,调整ExecStart参数:
之后重新加载配置并重启服务:[Service] ExecStart= ExecStart=-/sbin/agetty -L console 1000000 vt100systemctl daemon-reload systemctl restart getty@ttyS0.service
验证效果
重启系统后查看内核日志,若不再出现printk: bootconsole [uart8250] disabled的记录,且用户登录界面直接通过earlycon输出,说明配置生效。
内容的提问来源于stack exchange,提问作者Charles Lohr
相关产品推荐
相关产品推荐

