Основные ресурсы для понимания того, как работает ядро Linux:
В этом случае я не могу найти что-либо актуальное в документации или на LWN, так что это LXR.
Последнее, что делает код пользовательского пространства, это вызывает системный вызов reboot
. Требуется 4 аргумента, поэтому ищите SYSCALL_DEFINE4 (перезагрузка
на LXR, что приводит к kernel / reboot.c
.После проверки прав и аргументов вызывающего абонента точка входа системного вызова вызывает одну из нескольких функций: kernel_restart
для перезагрузки, kernel_halt
для остановки в замкнутом цикле, kernel_poweroff
чтобы выключить систему, с kernel_kexec
по замените ядро новым (если оно скомпилировано) или спящий режим
, чтобы сохранить память на диск перед выключением .
kernel_restart
, kernel_halt
и
kernel_power_off
довольно похожи:
reboot_notifier_list
, который представляет собой список ловушки, которые компоненты ядра могут зарегистрировать для выполнения кода при выключении питания. На этом этапе только несколько драйверов должны выполнять код, в основном это сторожевые таймеры. system_state
. device_shutdown
, чтобы разблокировать или выключить все устройства в системе. Многие водители подключаются к этому этапу. migrate_to_reboot_cpu
заботится о переключении на один конкретный ЦП и предотвращении отправки кода планировщиком на другие ЦП. После этого работает только один ЦП. syscore_shutdown
вызывает метод shutdown
для зарегистрированных операций системного ядра . Я думаю, что в основном речь идет об отключении прерываний; несколько хуков имеют метод выключения
. machine_restart
, machine_halt
или machine_power_off
. Код гибернации проходит через следующие этапы:
kernel_restart
, kernel_halt
или kernel_power_off
, либо какой-либо метод гибернации для конкретной платформы. Другой способ выключить систему - machine_emergency_restart
. Это вызывается волшебным ключом SysRq B . Клавиша O работает иначе: вызывает kernel_power_off
.
Система также может отключиться из-за паники , то есть неисправимой ошибки. Паника пытается зарегистрировать сообщение, а затем перезагрузить систему (либо через аппаратный сторожевой таймер, либо через экстренный перезапуск).
Я только что попробовал это с помощью fontforge в Windows (уже установленной ), это довольно просто.
U+2502
. U+2502
Для тестирования я использовал Arial.ttf в качестве исходного шрифта и вставил глиф в Inconsolata.ttf вашей второй ссылки (не имел этого глифа ).