【发布时间】:2021-06-29 15:30:07
【问题描述】:
我正在运行由 Yocto Zeus 构建的 Linux 内核 4.14.149,我正在运行 2019.07 U-boot。在我们安全团队的建议下,我正试图摆脱 Linux 控制台。我不担心调试(一旦我让它工作);我们还有其他方法可以将系统日志从机器中取出,而这不会在软件开发板上完成。该机制已经到位并经过测试。我们有一个 i.MX6 作为我们的核心(这是一个嵌入式系统),我们在开发板上为我们的控制台提供了专用的 UART5。
我尝试了几种不同的方法来做到这一点。第一个是禁用帧缓冲区控制台内核配置 (CONFIG_FRAMEBUFFER_CONSOLE)。这种方法的主要问题是它禁用了启动画面。我们在 U-boot 中有一个启动画面(Linux 再次显示),但是 Linux 在启动时似乎重置了帧缓冲区或其他东西,导致显示闪烁并在我们之前显示一段时间为空白应用程序启动,这是不可接受的(这也是我们在 U-boot 和 Linux 中都设置启动画面的原因)。
我还尝试在命令行上设置“console=”。这接近我们想要实现的,因为控制台不再从 UART 出来,但我们看到它开始出现在启动屏幕顶部的显示器上。我还没有找到任何解决方法(如果需要,我可以上传屏幕截图)。
完全消除控制台参数似乎不起作用,它仍然出现在 UART 中。这是可以预期的,基于the serial console documentation,它说它只使用第一个可用的设备。
我尝试在 Linux 源代码中注释掉 main.c 中的控制台初始化,结果爆炸得相当快。
我尝试设置为 netconsole(请参阅 Where do you send the kernel console on an embedded system?),但启动画面仍然被覆盖,与设置为无大小写相同。
我尝试的最后一件事是将其设置为假设备(Linux 命令行上的“console=ttymxc9”)。虽然这似乎有效(显示器或 UART 上没有数据),但它似乎在启动过程中停止(崩溃?)并且无法获取日志(它在我们的应用程序服务运行之前停止)。我说停顿是因为我们已经为 Linux 配置了心跳,我们仍然可以获得正确的 LED 心跳行为。然而,我添加到构建中的所有 systemd 服务似乎都没有运行(我添加了一个以在启动后将 journalctl 日志文件保存到外部 SD 卡上的文件中以进行调试,直到我得到它的工作)
在这一点上,我已经没有关于如何在保持启动画面完好无损的同时摆脱控制台的想法。禁用 Linux 控制台的正确方法是什么?
【问题讨论】:
标签: linux linux-kernel console embedded-linux yocto