我正在使用嵌入式平台,并且需要/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]
,为它找到或被告知的每个内核控制台设备实例化一次。
进一步阅读
- 将视频渲染到帧缓冲区时隐藏虚拟控制台的最佳实践
- https://superuser.com/a/723442/38062
logind.conf
。 systemd 手册页。 freedesktop.org。- “多座位”系统d。 freedesktop.org。
systemd-getty-generator
。 systemd 手册页。 freedesktop.org。