如何在 systemd 系统上的串行控制台上获取内核消息?

如何在 systemd 系统上的串行控制台上获取内核消息?

我正在尝试建立一个A20-OLinuXino-LIME2作为无头文件服务器Debian 8 镜像伊戈尔·佩科夫尼克 (Igor Pečovnik) 的作品

我希望系统在启动过程中将其内核消息输出到串行控制台(ttyS0),并最终在 ttyS0 上显示登录提示。

默认情况下,该映像使用以下内核命令行:

console=tty1 root=/dev/mmcblk0p1 rootwait rootfstype=ext4 sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_no_mali_mem_reserve sunxi_fb_mem_reserve=16 hdmi.audio=EDID:0 disp.screen0_output_mode=1920x1080p60 panic=10 consoleblank=0 enforcing=0 loglevel=1

…当然不会向 ttyS0 输出任何内核消息 — 我在 U-Boot 的“ Uncompressing Linux... done, booting the kernel.”和产生登录提示的 systemd 之间没有得到任何输出。

我想我只需要替换console=tty1console=ttyS0,115200n8,但随后 systemd 抓住串行控制台并压制内核,所以我只收到引导加载程序消息,然后是 systemd 的“ [ OK ] Started foo.”样式消息,最后是登录提示。

有没有办法[ 0.000000] foo在 ttyS0 上同时获取内核消息(“”)和 systemd 的输出?
或者至少有一种方法可以使 systemd 静音,以便在需要调试启动失败时可以看到内核消息?


我应该补充一点,内核肯定支持记录到 ttyS0:当我用 替换整个内核命令行时console=ttyS0,115200n8,我得到了[ 0.000000] foo我想要的“”消息,但内核自然会出现恐慌,因为它找不到它的 rootfs。

答案1

systemd 获取串行控制台并压制内核,因此我只收到引导加载程序消息

可以?事实并非如此。loglevel=1内核命令行中的 负责告诉内核停止日志记录。尝试删除该语句(或将其显式设置为loglevel=7)。

停止系统从记录自己的状态消息中,使用systemd.show_status=no(参考:系统(1))。


PS:各位,请停止将任意软件错误和错误配置归咎于 systemd。

相关内容