gpt4 book ai didi

linux - 如何在使用 Yocto 构建的嵌入式系统上关闭控制台?

转载 作者:行者123 更新时间:2023-12-04 07:51:52 25 4
gpt4 key购买 nike

我正在运行由 Yocto Zeus 构建的 Linux 内核 4.14.149,我正在运行 2019.07 U-boot。在我们安全团队的建议下,我正在尝试摆脱 Linux 控制台。我不担心调试(一旦我让它工作起来);我们还有其他方法可以让系统退出机器,这不会在软件开发板上完成。该机制已经到位,并且已经过测试。我们有一个 i.MX6 作为我们的核心(这是一个嵌入式系统),我们在开发板上有专用的 UART5 到我们的控制台。
我尝试了几种不同的方法来做到这一点。第一个是禁用帧缓冲区控制台内核配置 ( CONFIG_FRAMEBUFFER_CONSOLE )。这种方法的主要问题是它禁用了启动画面。我们在 U-boot 中有一个启动画面(它被 Linux 再次显示),但是 Linux 在启动时似乎重置了帧缓冲区或其他东西,导致显示闪烁并在我们之前显示为空白应用程序启动,这是 Not Acceptable (这也是我们在 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? ),但启动画面仍然被覆盖,与设置 it nothing case 相同。
我尝试的最后一件事就是将它设置为一个虚假设备(Linux 命令行上的“console=ttymxc9”)。虽然这似乎有效(显示器或 UART 上没有数据),但它似乎在启动过程中停止(崩溃?)并且无法获取日志(它在我们的应用程序服务运行之前停止)。我说停顿是因为我们已经为 Linux 配置了心跳,而且我们仍然可以得到正确的 LED 心跳行为。然而,我添加到我们的构建中的所有 systemd 服务都没有运行(我添加了一个以在启动后将 journalctl 日志文件保存到外部 SD 卡上的文件以进行调试,直到我开始工作)
在这一点上,我已经没有关于如何在保持启动画面完整的同时摆脱控制台的想法。禁用 Linux 控制台的正确方法是什么?

最佳答案

对于内核版本 5.11 及更高版本:
在来自 make menuconfig 的“设备驱动程序”下的子菜单“字符设备”中,有一个名为“空 TTY 驱动程序”( CONFIG_NULL_TTY )的选项,您可以启用和添加 console=ttynull到内核​​启动 cmdline,以便所有控制台输出都将被简单地丢弃。
您也可以禁用 CONFIG_VTCONFIG_UNIX98_PTYS ,因为您根本不需要通过控制台与您的程序进行交互。
对于较旧的内核(如我的 4.14):
您可以通过以下差异添加此支持:https://lore.kernel.org/lkml/20190403131213.GA4246@kroah.com/T/然后按照上面的说明进行操作。

关于linux - 如何在使用 Yocto 构建的嵌入式系统上关闭控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66924745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com