Как именно printk работает внутри страны?

Я знаю, что printf нуждается в помощи от ОС для выполнения своей работы.

Я также знаю, что printf не работает в исходном коде Linux, так как нет библиотеки. И поэтому у нас есть printk для отладки.

Как работает printk когда ОС по-прежнему загружается?

2 Solutions collect form web for “Как именно printk работает внутри страны?”

Эта ссылка, похоже, отвечает на ваши вопросы под названием « Linux Kernel Development Second Edition» .

выдержка

printk ()

Функция print printk() почти идентично printf() библиотеки C. Действительно, в этой книге мы не использовали никаких реальных различий. Для большинства намерений это прекрасно; printk() – это просто имя отформатированной функции печати ядра. Однако у него есть некоторые отличия.

Надежность printk ()

Одним из printk() быстро считается само собой разумеющимся, является его надежность. Функция printk() может быть вызвана из любой точки ядра в любое время. Его можно вызвать из контекста прерывания или процесса. Он может быть вызван во время блокировки. Он может вызываться одновременно на нескольких процессорах, но не требует от вызывающего абонента блокировки.

Это упругая функция. Это важно, потому что полезность printk() основывается на том, что он всегда существует и всегда работает.

Непростость printk ()

Щупа в доспехах качества printk() существует. Он недоступен до определенного момента в процессе загрузки ядра, до инициализации консоли. В самом деле, если консоль не инициализирована, куда должен идти выход?

Обычно это не проблема, если вы не очень setup_arch() отлаживаете проблемы при загрузке (например, в setup_arch() , которая выполняет инициализацию, специфичную для архитектуры). Такая отладка – это вызов для начала, и отсутствие какого-либо метода печати только связывает проблему.

Есть надежда, но не много. Хакерские хакеры архитектуры используют аппаратное обеспечение, которое работает (например, последовательный порт) для связи с внешним миром. Поверьте мне, это не весело для большинства людей. Некоторые поддерживаемые архитектуры действительно используют разумное решение, однако другие (включая i386) имеют исправления, которые также сохраняют день.

Решение – вариант printk() который может выводиться на консоль очень рано в процессе загрузки: early_printk() . Поведение такое же, как и printk() , printk() только имя и его способность работать раньше. Однако это не переносное решение, так как не все поддерживаемые архитектуры реализованы таким образом. Это может стать вашим лучшим другом, хотя, если так.

Если вам не нужно писать на консоль очень рано в процессе загрузки, вы можете всегда полагаться на printk() .

Как работает printK, когда ОС по-прежнему загружается?

printk() если возможно, подходит к консоли, и приоритет достаточно высок; Я не уверен, в какой момент ядро ​​инициализирует VT, чтобы сделать это возможным, но, очевидно, довольно рано.

[src]/kernel/printk/printk.c хорошо документирован. Доступ к консоли зависит от семафоров. Сообщение также вводится в /dev/dmsg независимо от приоритета.

  • Определите, поддерживает ли встроенный драйвер ядра устройство
  • Поддерживает ли виртуальный мост Linux VLAN?
  • Как я могу подтвердить, что `nice` работает?
  • Как скомпилировать мое ядро ​​Linux
  • Как 32-разрядная виртуальная память Linux структурирована по отношению к регистровым регистрам регистров PCIe
  • Почему Linux не является официальным ядром GNU?
  • убить невосприимчивый процесс
  • кеширование маршрутизации в последних ядрах Linux
  • SIOCSIFADDR: Файл существует после обновления ядра
  • У экземпляра Debian два ядра после установки драйверов Intel PCIe SSD - один с черным экраном
  • Установка кросс-инструментальной цепочки для создания бинарных файлов ARM в Debian
  • Interesting Posts

    Почему init прослушивает порт 80?

    Локатор сигналов Linux

    Что делает «эхо (ls)» в bash?

    Почему Terminal и Shell являются двумя отдельными программами в Linux?

    «Запасной» диск в массиве RAID-массива 2-disk mdadm?

    Как я могу автоматически привязывать монтирование к загрузке в домашнем каталоге, не зашифрованном зашифрованным корнем?

    Почему перезагрузка / proc / sys не является глобальной или не сохраняется в пространстве имен в сети внутри LXC

    Squid: как заблокировать веб-сайт, но разрешить доступ к определенным папкам

    Интерфейс Vim в полях ввода веб-браузера?

    Низкий графический режим, системная зависания, без загрузки, без загрузки компакт-диска

    Нет пароля для запуска команды как root для фиксированной команды?

    ZSH и завершение файлов с символами новой строки

    Тестирование файловой системы ext3 на встроенном устройстве

    Проблемы с Gnu Screen и vi – визуализация

    Невозможно установить Netflix-рабочий стол в Debian … Aptitude имеет неудовлетворенные / разрозненные зависимости

    Linux и Unix - лучшая ОС в мире.