首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用Yocto构建的嵌入式系统上关闭控制台?

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

Stack Overflow用户
提问于 2021-04-03 04:14:09
回答 2查看 754关注 0票数 2

我运行的是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?),但启动画面仍然被覆盖,与设置为nothing的情况相同。

我尝试的最后一件事就是将它设置为一个假设备( Linux命令行上的“console=ttymxc9”)。虽然这看起来正常(显示器或UART上没有数据),但它似乎停止了(崩溃?)在启动中途,无法获取日志(在我们的应用程序服务运行之前它就停止了)。我之所以说停止,是因为我们已经为心跳配置了Linux,并且我们仍然可以获得正确的LED心跳行为。然而,我添加到构建中的systemd服务似乎都没有运行(我添加了一个,以便在启动后将journalctl日志文件保存到外部SD卡上的一个文件中,以便进行调试,直到我将其正常工作为止)。

在这一点上,我已经用尽了如何摆脱控制台,同时保持闪屏完整的想法。禁用Linux控制台的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-03 09:04:45

对于内核版本5.11和更高版本:

make menuconfig的“设备驱动程序”下的“字符设备”子菜单中,有一个名为“空TTY驱动程序”(CONFIG_NULL_TTY)的选项,您可以启用该选项并将console=ttynull添加到内核引导命令行中,这样所有控制台输出都将被简单地丢弃。

你也可以禁用CONFIG_VTCONFIG_UNIX98_PTYS,因为你根本不需要通过控制台与你的程序交互。

对于较旧的内核(如我的4.14):您可以在:https://lore.kernel.org/lkml/20190403131213.GA4246@kroah.com/T/添加此支持,然后按照上面的说明进行操作。

票数 2
EN

Stack Overflow用户

发布于 2021-10-27 20:15:09

较新版本的yocto使用systemd和一个名为getty.target的服务来加载串行端口控制台。通过运行以下命令(一次)禁用:

代码语言:javascript
复制
systemctl mask getty.target
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66924745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档