Ускоряем загрузку QNX на встроенной системе

Процесс загрузки QNX делится на два этапа, во время которых отрабатывают, соответственно, первичный загрузчик (который предлагает выбрать раздел) и вторичный, который предлагает выбрать вариант загрузки («Hit Esc for .altboot») – из файла /.boot, либо /.altboot.
Оба загрузчика довольно примитивны и не позволяют себя настроить, в частности, например, настроить моментальную загрузку, без ожидания каких-либо действий пользователя.

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

Собственно, нам нужно сделать две вещи:

  • Модифицировать или заменить первичный загрузчик, чтобы он не ждал выбора раздела для загрузки.
  • Модифицировать вторичный загрузчик, чтобы он не ждал реакции пользователя на приглашение к выбору альтернативного загрузчика «Hit Esc for .altboot»

Первичный загрузчик

Роб Кертен в своей статье рекомендует заняться HEX-отношениями с первичным загрузчиком, т.е. отредактировать время ожидания пользователя. Однако, там же написано, что этот вариант не является лучшим, потому как паузы не получится выставить в 0.
Другим вариантом, который выбрал я, стала установка альтернативного первичного загрузчика, например GRUB, архив скомпилированных под QNX6 бинарников которого давно есть в интернете.

Установка GRUB проходит легко и непринужденно.

Скачиваем архив в корневую, к примеру, папку системы и вводим несколько команд:

# cd /
# tar zxvf grub-0.95-qnx6-bin.tar.gz

Запускаем оболочку GRUB командой:

# /usr/local/sbin/grub

И инсталлируем загрузчик в МБР:

grub> root (hd0,0)
grub> setup (hd0)

Дальше нужно настроить загрузочное меню GRUB’а, которое описано в файле /boot/grub/menu.lst

По умолчанию, там написано следующее:

default=0
timeout=10
title QNX 6
root (hd0,0)
rootnoverify
makeactive
chainloader +1
title QNX 6 IFS image
root (hd0,0)
kernel /boot/grub/loadifs
module /boot/fs/qnxbasedma.ifs

Нам не нужны ни варианты загрузки, ни ожидание, ни вывод самого меню, поэтому приводим файл в такой вид:

default=0
timeout=0
hiddenmenu
title      630
rootnoverify (hd0,0)
chainloader +4
boot

Что все это значит можно прочитать в онлайн-документации.

Теперь можно попробовать загрузить систему и убедиться, что несколько секунд времени сэкономлено.
Переходим ко второй части.

Вторичный загрузчик

Самым простым способом избавиться от паузы вторичного загрузчика мне показался описанный в той же статье Кертена – прямое редактирование времени задержки в хекс-редакторе.
Снимаем дамп флэшки

# dd if=/dev/hd[X] of=/flashdump.bin

И открываем его в любом шестнадцатеричном редакторе.
Нужно найти, где располагается вторичный загрузчик. В моем дампе это был адрес 0х7Е00. Легче всего искать по тексту «Hit Esc for .altboot»

Дамп флэшки до модификации

Дальше ищем адрес, указанный Кертеном:

0071  b9 24 00

Т.е., в моем случае, нас интересует последовательность байт b9 24 00 по адресу 0х7Е71.
Правим байт 0х7Е72, прописывая туда минимальное значение (0х01). Я, вдобавок, подправил и надпись «Hit Esc for .altboot», чтобы никто не думал, что здесь есть какое-то ожидание…

Подредактированный дамп

Сохраняем файл и переносим дамп обратно на флэшку:

# dd if=/flashdump.bin of=/dev/hd[X]

Проверяем целостность файловой системы:

# chkfsys –m /dev/hd[X]

И смотрим, как QNX грузится без каких-либо задержек и пауз.
В моем случае старт системы занял примерно 5 секунд.

Скачать GRUB for QNX с КБ13

Похожий бред:

Ускоряем загрузку QNX на встроенной системе: 2 комментария

  1. Павел Сергеевич написал:

    5 секунд долго, а без графики?

    Без графики на секунду-две меньше.
    На самом деле, только начальная загрузка платы занимает секунд 5, плюс сама система с момента начала работы загрузчика — так что, если считать с момента подачи питания, проходит где-то секунд 10.

Добавить комментарий для Павел Сергеевич Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Protected by WP Anti Spam