кто вызывает tty_open () в ядре Linux? - PullRequest
0 голосов
/ 16 января 2019

Для драйверов мыши, клавиатуры и джойстика X может затем вызвать «open», используя эти драйверы.

(когда я проверяю CentOS 7 (только текстовый режим) в VirtualBox, я не вижу X после выполнения lsof / dev / input / event2 (клавиатура), но моя клавиатура все еще работает)

Как насчет tty_open ()?

Согласно трассировке вызова, мы можем приблизительно знать последовательность: (по крайней мере, мы знаем кого-то по имени 'sys_open') https://bugzilla.redhat.com/show_bug.cgi?id=630464

Тем не менее, я до сих пор не знаю, кто называет «открытым»?

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Спасибо за номинальное животное за информацию.

Я отслеживаю Linux 2.0 (https://mirrors.edge.kernel.org/pub/linux/kernel/v2.0/), может быть, немного по-другому. Извините, я не могу найти сетевой источник Linux 2.0 для ссылки.

Для клавиатуры, в текстовом режиме, я думаю, что никто не вызывает "открыть" в ядре, В 'int tty_init (void)' (tty_io.c) он будет вызывать 'kbd_init ();' тогда мы можем увидеть:

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

поэтому клавиатура HW может работать с этим IRQ и обратным вызовом ('keyboard_interrupt').

Для tty_open () я наконец вижу его в main.c

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

Для более новой версии ядра, я думаю, эта часть перенесена в приложение getty, поэтому я не могу найти его в исходном коде ядра.

0 голосов
/ 21 января 2019

tty_* - это аппаратно-независимый код UNIX для реализации интерфейса терминала в ядре. Они несут ответственность за дисциплины tty, управление работой и обработку символов в линейном режиме (включая генерацию сигналов, например, на Ctrl-C). Они также реализуют интерфейс для пар tty / pty и т. П.

Это общий код, включающий все общие функции драйверов терминала в любое оборудование, к которому вы можете подключиться (консольная клавиатура / дисплей - только один пример, но у вас есть, по крайней мере, интерфейсы uart RS-232C, USB последовательные ключи, последовательные мультиплексоры PCI и т. д.)

Функциональность терминала датируется древним Unix v7 и имеет много улучшений, появившихся в BSD Unix (например, управление заданиями)

Кстати, реализация последовательного интерфейса в linux не очень хороша, вам стоит взглянуть на реализацию BSD.

0 голосов
/ 16 января 2019

Когда я проверяю CentOS 7, только текстовый режим, в VirtualBox я не вижу X после выполнения lsof / dev / input / event2 (клавиатура), но моя клавиатура все еще работает

Это потому, что вы используете виртуальную консоль , а затем одно из /dev/ttyN устройств. Они напрямую связаны с подсистемой событий ввода Linux внутри самого ядра (с помощью модуля vt); по существу, все клавиатурные устройства действуют как входы в текущий активный виртуальный терминал.

Сам X использует виртуальную консоль, просто чтобы ядро ​​могло переключаться между ней и любыми текстовыми виртуальными консолями.

Как насчет tty_open()?

Если вы запустите sudo lsof /dev/tty[0-9], вы увидите, какие процессы обращаются к виртуальной консоли.

Процессы с getty в названии - это те, которые предоставляют терминалы входа. (Те, которые используются с последовательными терминалами, очень похожи; на самом деле, многие программы getty могут нормально обрабатывать как виртуальные консоли, так и последовательные терминалы.) Когда вы входите в систему, это getty запускает login (программа!), Которая, в свою очередь, запускает оболочку по умолчанию, определенную для этого пользователя (см. getent passwd username; это последнее поле, и оно должно быть тем, которое указано в * 1024). * будет разрешено).

Само ядро ​​поддерживает переключение на другую виртуальную консоль с помощью Ctrl + Alt + Fn (F1 для tty1, F2 для tty2 и т. Д.) , Если вы используете подходящие графические драйверы, вы даже можете переключаться между Xorg и виртуальными консолями. (Обычно Xorg запускается на tty6 или tty7, но это зависит от дистрибутива.) Ctrl + Alt + и Ctrl + Alt + также обычно можно использовать для переключения на предыдущую или следующую виртуальную консоль.

...