哪个 systemd 服务在帧缓冲区设备上启动文本控制台?

哪个 systemd 服务在帧缓冲区设备上启动文本控制台?

我正在使用嵌入式平台,并且需要/dev/fb0清楚地供我自己使用(可以通过串行控制台访问设备,而屏幕用于显示信息,没有 X。)。

我已经从图形模式更改default.target为多用户模式,但现在它在帧缓冲区设备上打开带有登录提示的 getty,但我无法找到哪个服务就是这样。我不想偶然禁用串行控制台登录,并且lsof不显示任何/dev/fb0打开的内容。

如果有帮助的话,该发行版是 Yocto Linux。

答案1

lsof打开时不显示任何内容/dev/fb0

不会的。 Linux 内核中内置了一个终端仿真器程序。它并不表现为具有打开文件句柄的正在运行的进程。它位于帧缓冲区和输入事件子系统之上,它使用内部内核接口来访问。它向应用程序模式系统呈现为一系列内核虚拟终端设备/dev/tty1等;下面的伪文件/sys显示活动的 KVT 编号;以及一系列CGA风格的视频缓冲设备/dev/vcsa1等等。

这些应用程序模式系统之一当然是getty+login系统,它可以配置为在这些内核虚拟终端上运行,并且(正如您所发现的)默认情况下是这样。您可以getty使用记录的 systemd 机制轻松摆脱这些进程。

在旧的 System 5init系统中,每条getty记录都是/etc/inittab.在 BSDinit系统中,每个getty都是/etc/ttys.在 systemd 系统中,事情有点间接。

  • “登录”守护进程logind知道 systemd 俚语中称为“席位”的东西。 “座位”零是具有主帧缓冲区和所有这些内核虚拟终端的座位。
  • 对于该座位,logind尝试开始systemd 服务,[email protected]通过.的价值autovt@ttyN.service是在NAutoVTs设置中设置的/etc/systemd/logind.conf
  • 这些 systemd 服务是从服务模板单元,命名为[email protected]。这模板参数如上所述,是内核虚拟终端的设备名称设备文件, 在/dev/
  • [email protected]在默认配置中,是到 的符号链接[email protected]
  • [email protected]描述了运行一个getty程序,设置为通过内核虚拟终端设备文件进行输入/输出。

因此,要停止其中任何一个,请访问/etc/systemd/logind.conf并配置logind为不自动启动任何autovt服务(并且如果您想彻底了解的话,不要保留任何虚拟终端)。

然而,这还不是全部。终端仿真器程序在内核中仍然处于活动状态,从定向到内核 VT 的日志消息到光标的定期闪烁,所有内容都会导致终端仿真器干扰您对帧缓冲区的使用。但这是对使用帧缓冲区与内核终端模拟器程序进行协商的程序进行编码的问题,这已经在这里得到了回答。

顺便说一下,串行控制台登录是通过完全不同的路线进行的。 A发电机在启动时创建模板单元的实例[email protected],为它找到或被告知的每个内核控制台设备实例化一次。

进一步阅读

相关内容