3.7.1 Реализация консоли

Предыдущая  Содержание  Следующая V*D*V

Консоль настраивается в функции console_init() в файле init/main.c. Это делается во время начальных стадий запуска системы, чтобы она могла быть использована как инструмент ранней отладки. Вся печать в ядре выполняется через функцию printk(); эта функцию принимает переменное число аргументов (как и printf()). Первым аргументом printk() может быть приоритет для строки, которая должна быть напечатана; чем меньше число, тем выше приоритет строки. Номер приоритета 0 используется для печати аварийных сообщений, в то время как 7 (самый высокий) используется для вывода сообщений отладочного уровня. printk() сравнивает приоритет строки с приоритетом консоли, устанавливаемым с помощью функции syslog(); если приоритет строки меньше или равен приоритету консоли, то сообщения печатаются.

printk() сохраняет список сообщений, которые должны быть напечатаны, в кольцевом буфере журнала и вызывает список зарегистрированных обработчиков консольных устройств для распечатки находящихся в очереди сообщений. Регистрация консоли происходит с помощью функции register_console(), которая берётся из структуры данных консоли; это сердце консольной подсистемы. Любые устройства, такие как UART, принтер или сеть могут использовать эту структуру данных для взаимодействия с консолью и захвата вывода от printk().

Консоль реализована в виде структуры данных; её определение можно найти в заголовочном файле include/linux/console.h. Важными элементами структуры являются:

 

name: название консольного устройства.

write(): это основная функция; она вызывается printk(), чтобы выдавать сообщения. Функция printk может быть вызвана из любой части ядра, включая обработчики прерываний, поэтому вы должны быть осторожны при проектировании обработчика записи, чтобы он не засыпал. Обычно обработчик записи это простая процедура, которая для передачи символов в устройство (UART, принтер и т.д.) использует адресацию.

device(): возвращает номер устройства для нижележащего устройства TTY, которое в настоящее время выступает в качестве консоли.

unblank(): эта функция, если она определена, используется для включения экрана.

setup(): эта функция вызывается, когда аргумент командной строки console= совпадает с именем этой структуры консоли.

 

Предыдущая  Содержание  Следующая