Вставить глиф в шрифт другого шрифта

Основные ресурсы для понимания того, как работает ядро ​​Linux:

  1. Документация .
  2. Еженедельные новости Linux .
  3. Источник. Это сложный зверь, которого немного легче понять с помощью LXR , перекрестной ссылки Linux. Вариант LXR, работающий на lxr.linux.no , лучше других, но часто не работает.

В этом случае я не могу найти что-либо актуальное в документации или на 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 довольно похожи:

  1. Выполните reboot_notifier_list , который представляет собой список ловушки, которые компоненты ядра могут зарегистрировать для выполнения кода при выключении питания. На этом этапе только несколько драйверов должны выполнять код, в основном это сторожевые таймеры.
  2. Установить переменную system_state .
  3. Отключите usermode-helper , чтобы гарантировать, что никакой пользовательский код больше не будет запускаться. (На этом этапе все еще могут существовать процессы.)
  4. Вызов device_shutdown , чтобы разблокировать или выключить все устройства в системе. Многие водители подключаются к этому этапу.
    Обратите внимание, что все файловые системы, которые все еще смонтированы на этом этапе, эффективно размонтируются принудительно. Вызывающий системный вызов берет на себя ответственность за любое чистое размонтирование.
  5. Только для отключения питания, если ACPI сконфигурирован, возможно, выполнить код для подготовки к переходу в состояние ACPI S5 (мягкое отключение питания).
  6. В многопроцессорной машине код может выполняться на любом процессоре, независимо от того, какой из них вызвал системный вызов. migrate_to_reboot_cpu заботится о переключении на один конкретный ЦП и предотвращении отправки кода планировщиком на другие ЦП. После этого работает только один ЦП.
  7. syscore_shutdown вызывает метод shutdown для зарегистрированных операций системного ядра . Я думаю, что в основном речь идет об отключении прерываний; несколько хуков имеют метод выключения .
  8. Записать информационное сообщение - лебединую песню.
  9. Наконец, переходим к отдыху каким-либо машинно-зависимым способом, вызывая machine_restart , machine_halt или machine_power_off .

Код гибернации проходит через следующие этапы:

  1. Итерация через крючки управления питанием .
  2. Синхронизация файловых систем.
  3. Заморозить весь код пользователя .
  4. Предотвращение горячего подключения устройства .
  5. Выгрузить состояние системы в область подкачки.
  6. Если все прошло успешно, перевести оборудование в спящий режим . Это может включать вызов kernel_restart , kernel_halt или kernel_power_off , либо какой-либо метод гибернации для конкретной платформы.

Другой способ выключить систему - machine_emergency_restart . Это вызывается волшебным ключом SysRq B . Клавиша O работает иначе: вызывает kernel_power_off .

Система также может отключиться из-за паники , то есть неисправимой ошибки. Паника пытается зарегистрировать сообщение, а затем перезагрузить систему (либо через аппаратный сторожевой таймер, либо через экстренный перезапуск).

0
01.03.2019, 19:29
1 ответ

Я только что попробовал это с помощью fontforge в Windows (уже установленной ), это довольно просто.

  • Откройте fontforge с исходным шрифтом, прокрутите вниз, пока не найдете U+2502.
  • Щелкните правой кнопкой мыши по глифу -> Копировать
  • Откройте другой экземпляр fontforge с целевым шрифтом, прокрутите вниз до пустого слота дляU+2502
  • Щелкните правой кнопкой мыши -> Вставить
  • Выберите Файл -> Создать шрифты (Ctrl+Shift+G)в меню, введите новое имя шрифта, выберите True Type , нажмите Создать и щелкните несколько предупреждений.
  • Повторить для каждого типа шрифта (обычный, полужирный, курсив,...)

modified Inconsolata

Для тестирования я использовал Arial.ttf в качестве исходного шрифта и вставил глиф в Inconsolata.ttf вашей второй ссылки (не имел этого глифа ).

Generate Fonts dialog

0
28.01.2020, 03:57

Теги

Похожие вопросы