Разработка модулей ядра Linux

Часть 13. Использование текстовой консоли в качестве среды для разработки модулей ядра

Comments

Серия контента:

Этот контент является частью # из серии # статей: Разработка модулей ядра Linux

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Разработка модулей ядра Linux

Следите за выходом новых статей этой серии.

Текстовая консоль (виртуальный терминал) Linux или графический терминал — это та среда, в которой чаще всего ведется разработка, тестирование и отладка модулей ядра.

Подсистема X11, терминал и текстовая консоль

Ряд авторов утверждает, что графическая подсистема X11 не подходит в качестве среды для разработки приложений ядра, так как для этого годится только текстовая консоль. Правда, зачастую они сами забывают свою категоричность и демонстрируют примеры, явно выполняемые в графическом терминале подсистемы X Window System (X11). Таким образом, все подобные утверждения не являются серьезными, а скорее относятся к заблуждениям, которых немало накопилось вокруг Linux. Тем не менее, нужно отчётливо представлять возможности текстовых и графических режимов (интерфейсов пользователя) в Linux, их особенности и ограничения.

Графическая подсистема X11 (в реализациях первоначально X11R6, а ныне Xorg) не является органичной (неотъемлемой) составной частью операционной системы Linux (UNIX), а является надстройкой пользовательского уровня. Более того, все непосредственные действия с портами видеоадаптеров выполняются в пользовательском адресном пространстве, а не в режиме ядра, в этом же пространстве работают и видеодрайверы системы X11, используя API пространства пользователя (это не очень известная деталь X11). Такая архитектура графической подсистемы принципиально отличает Linux от систем семейства Windows. При работе с графической подсистемой X11 необходимо учитывать следующие факты:

  1. X11 – это надстройка над операционной системой, которая не является составной частью системы и работает в пользовательском адресном пространстве.
  2. Протокол X (пользовательского уровня модели OSI), по которому взаимодействуют X-клиент (GUI приложения) и X-сервер (графическая подсистема), является сетевым протоколом — грубые нарушения в настройках и функционировании сетевой подсистемы могут приводить к полной потере работоспособности графической подсистемы (что очень удивляет пользователей, перешедших на ОС Linux c ОС Windows).
  3. Сетевой протокол X может использовать в качестве транспортного уровня различные протоколы, в частности, это может быть не только TCP/IP, но и (вместо него) потоковый доменный протокол UNIX (UND).
  4. Вывод (и ввод) на терминал (работающий в графической системе X11) проходит через множество промежуточных слоёв, в отличие от текстовой консоли, и может значительно отличаться по поведению при работе с программами ядра.

Но иногда программисту модулей ядра приходится выполнять большой объем работы именно в текстовой консоли. При этом программист, занимающийся разработкой прикладных приложений, может просто не задумываться (или даже не знать) о существовании такой среды для работы в Linux. В каком-то смысле текстовая консоль — это символ далёкого прошлого Linux, который знают и используют системные администраторы и разработчики модулей.

Поэтому, в силу их значимости для разработки модулей ядра, стоит уделить максимальное внимание именно текстовым консолям (виртуальным терминалам). Количество текстовых консолей (обычно по умолчанию равное 6) в Linux (в отличие, например, от FreeBSD) может настраиваться динамически, без сборки ядра. Переключение в виртуальный терминал n выполняется клавиатурной комбинацией <Ctrl><Alt><Fn>. Случается, что при разработке модулей ядра число консолей приходится увеличивать. В некоторых более старых дистрибутивах (и других UNIX системах) используется известный способ, описанных во множестве источников, — конфигурационный файл /etc/inittab.

Листинг 1. Файл инициализации консолей
$ uname -r
2.6.18-92.el5
$ cat /etc/inittab
...
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
...

Расшифруем приведенную информацию на примере одной из записей:

  • 6 — идентификатор записи;
  • 2345 — уровень (или уровни) выполнения (runlevels), для которого эта запись имеет силу;
  • respawn — выполняемое действие;
  • /sbin/mingetty tty6 — исполняемая команда (в данном случае - команда авторизации консоли mingetty).

Добавление в данный файл новых строк по образу и подобию уже существующих приведет к созданию новых консолей. В новых дистрибутивах файл /etc/inittab может оказаться практически пустым, как показано ниже:

# uname -r
2.6.32.9-70.fc12.i686.PAE
# cat /etc/inittab
...
# Terminal gettys (tty[1-6]) are handled by /etc/event.d/tty[1-6] and
# /etc/event.d/serial
...

В этом варианте начальная инициализация консолей, как подсказывает показанный комментарий, происходит в каталоге /etc/event.d.

Листинг 2. Каталог инициализации консолей
# ls /etc/event.d/tty*
tty1  tty2  tty3  tty4  tty5  tty6 
# cat /etc/event.d/tty6
...
respawn
exec /sbin/mingetty tty6
...

Как и в предыдущем случае, для создания дополнительных консолей следует:

  1. создать новый файл /etc/event.d/tty7 (и т.д.);
  2. скопировать в него содержимое файла /etc/event.d/tty6;
  3. отредактировать содержимое нового файла на соответствие новому терминалу, как показано в листинге 2.

Для того, чтобы узнать количество активных консолей, используется следующая команда:

$ fgconsole
7

В данный момент существует 6 текстовых консолей и 1 консоль X11. Не удивляйтесь, если в некоторых дистрибутивах (новых) будет получен другой результат, например, число 3. В этом случае команда вернула число открытых консолей, на которых уже произведена регистрация пользователя.

Сколько текстовых консолей можно создать в системе? Максимальное число принципиально ограничено 64, поскольку для устройств tty* статически зарезервирован диапазон младших номеров устройств до 63, как показано в листинге 3.

Листинг 3. Отображение виртуальных терминалов в каталоге устройств
$ ls /dev/tty*
/dev/tty    /dev/tty16  /dev/tty24  /dev/tty32  /dev/tty40  /dev/tty49  /dev/tty57
...
/dev/tty14  /dev/tty22  /dev/tty30  /dev/tty39  /dev/tty47  /dev/tty55  /dev/tty63
$ ls -l /dev/tty63
crw-rw---- 1 root tty 4, 63 Мар 12 10:15 /dev/tty63

Осталось изучить, как можно быстро переключаться между большим числом консолей. Для этого существует несколько способов.

  • посредством комбинации клавиш <Ctrl><Alt><Fn>, где n — номер функциональной клавиши: 1...12.
  • в режиме текстовой консоли во многих дистрибутивах по клавише PrintScreen включается «пролистывание» активизированных консолей, начиная с первой.
  • самый универсальный способ — команда chvt (смена виртуального терминала).
    # chvt 5

    Эта команда переносит нас в ту консоль, номер которой указан в качестве ее аргумента, но она может потребовать привилегий root. Если вызывать её от имени обычного пользователя, то вместо перехода может быть выведено следующее сообщение.

    $ chvt 2 
    chvt: VT_ACTIVATE: Операция не позволяется

В листинге 4 показано, как получить информацию о том, кто и каким способом зарегистрировался на данный момент в системе.

Листинг 4. Список пользователей и их терминалов
$ who
root     tty2         2011-03-19 08:55
olej     tty3         2011-03-19 08:56
olej     :0           2011-03-19 08:22
olej     pts/1        2011-03-19 08:22 (:0)
olej     pts/0        2011-03-19 08:22 (:0)
olej     pts/2        2011-03-19 08:22 (:0)
olej     pts/3        2011-03-19 08:22 (:0)
olej     pts/4        2011-03-19 08:22 (:0)
olej     pts/5        2011-03-19 08:22 (:0)
olej     pts/6        2011-03-19 08:22 (:0)
olej     pts/9        2011-03-19 09:03 (notebook)

Представленная информация расшифровывается следующим образом:

  • строки 1, 2 – пользователи root и olej, зарегистрированные в текстовых консолях (#2 и #3);
  • строка 3 - графическая система X11, зарегистрированная в 7-ой консоли (CentOS 5.2 ядро 2.6.18);
  • следующие 7 строк - графические терминалы, открытые в X11, дисплей :0;
  • последняя строка - одна удалённая регистрация пользователя olej по SSH с компьютера с именем notebook.

Заключение

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


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=818662
ArticleTitle=Разработка модулей ядра Linux: Часть 13. Использование текстовой консоли в качестве среды для разработки модулей ядра
publish-date=05292012