繁体   English   中英

谁在Linux内核中调用tty_open()?

[英]who call tty_open() in linux kernel?

对于鼠标,键盘和操纵杆驱动程序,可以X调用“打开”,然后使用这些驱动程序。

(当我在VirtualBox中检查CentOS 7(仅文本模式)时,在执行lsof / dev / input / event2(键盘)后,我没有看到X,但是我的键盘仍在工作)

tty_open()怎么样?

根据呼叫跟踪,我们可以大致了解顺序:(至少,我们知道一个叫“ sys_open”的人) https://bugzilla.redhat.com/show_bug.cgi?id=630464

但是,我仍然不知道谁称“开放”?

当我在VirtualBox中检查CentOS 7仅文本模式时,在执行lsof / dev / input / event2(键盘)后没有看到X,但是我的键盘仍然可以使用

那是因为您随后使用了虚拟控制台 ,即/dev/ttyN设备之一。 它们直接连接到内核本身内部的Linux输入事件子系统(通过vt模块); 基本上所有类似键盘的设备都充当当前活动虚拟终端的输入。

X本身使用虚拟控制台,只是为了使内核可以在它和任何基于文本的虚拟控制台之间切换。

tty_open()怎么样?

如果运行sudo lsof /dev/tty[0-9] ,则可以查看哪些进程正在访问虚拟控制台。

名称为getty的进程是提供登录终端的进程。 (用于串行终端的程序非常相似;实际上,许多getty程序可以很好地处理虚拟控制台和串行终端。)登录时,该getty启动login (程序!),这反过来又启动了为该用户定义的默认外壳程序(请参阅getent passwd username ;这是最后一个字段,并且必须是/etc/shells列出的/etc/shells才能被允许)。

内核本身支持通过Ctrl + Alt + Fn (对于tty1为F1,对于tty2为F2,依此类推)切换到其他虚拟控制台。 如果使用合适的图形驱动程序,甚至可以在Xorg和虚拟控制台之间切换。 (通常,Xorg在tty6或tty7上运行,但因发行版本而异。) Ctrl + Alt + Ctrl + Alt + 通常也可以用于切换到上一个或下一个虚拟控制台。

感谢名义动物的信息。

我正在追踪linux 2.0( https://mirrors.edge.kernel.org/pub/linux/kernel/v2.0/ ),情况可能有所不同。 抱歉,找不到链接参考的在线Linux 2.0源。

对于键盘,在文本模式下,我认为没有人会在内核中调用“ open”,在“ int tty_init(void)”(tty_io.c)中,它将调用“ kbd_init();”。 然后我们可以看到:

request_irq(KEYBOARD_IRQ, keyboard_interrupt, 0, "keyboard", NULL);

因此,键盘硬件可以与此IRQ和回调('keyboard_interrupt')一起使用。

对于tty_open(),我终于在main.c中看到了它

open("/dev/tty1",O_RDWR,0);

对于较新版本的内核,我认为这部分已迁移到getty应用程序,这就是为什么我无法在内核源代码中找到它。

tty_ *例程是UNIX硬件独立的代码,用于在内核中实现终端接口。 他们负责tty学科,工作控制资料和字符的线模式处理(例如,包括Ctrl-C上的信号生成)。它们还实现了tty / pty对等的接口。

这是通用代码,可将终端驱动程序的所有通用功能包含在您可以连接的任何类型的硬件中(控制台键盘/显示器只是一个示例,但至少具有uart RS-232C接口,usb串行加密狗,PCI串行线多路复用器等)

终端功能可以追溯到古老的v7 Unix,并具有BSD Unix的许多改进(例如作业控制)

顺便说一句,串行接口的linux实现不是很好,您应该看一下BSD的实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM