В статье рассматривается способ запуска Photon 1.14 в среде QNX 4.25 с использованием драйверов Hydra.ms и Pg.flat.
О. Большаков
Сейчас всё более и более актуальным становится приобретение маленького помощника — ноутбука. Его всегда и везде можно взять с собой, на нём всегда найдётся нужная программа, он сконфигурирован так как этого хочется его владельцу. И всё бы хорошо, если бы не необходимость установки QNX4 на такой компьютер. Ведь это не секрет, что с поддержкой нового оборудования в QNX4 дело обстоит не лучшим образом, ситуация осложняется ещё и тем, что производители этого самого оборудования обновляют его приблизительно каждые пол года, как будто стремясь усложнить нам и без того нелёгкую жизнь. К выбору ноутбука "на борту" которого планируется установить QNX4 надо подходить особенно внимательно. Контроллер дисков, сеть, USB и видеоадаптер должны быть протестированы очень внимательно. В этой статье я постараюсь помочь запустить видео подсистему Photon на ноутбуке. (Прим.: Всё что будет написано ниже применимо не только к видеоплатам ноутбука, но и к любым другим.)
Определяем название видеоадаптера
Первое, что нужно сделать, узнать с кем мы имеем дело, то есть название и модель видеоадаптера. Для этого можно воспользоваться Диспетчером устройств одной небезызвестной операционной системы. Другой способ — загрузиться в QNX4 при помощи live CD. (Прим.: Создание live CD не входит в рамки данной статьи, предполагается, что он у Вас уже есть.) В любом случае live CD нам понадобится при тестировании, так что будем рассматривать этот вариант. Итак, QNX загружен. Набираем в консоли команду:
# show_pci -vvv
Конечно, почти вся информация "убежит" вверх, чтобы этого не произошло воспользуемся очень полезной утилитой less:
# show_pci -vvv | less
Ищем в выводе строку Display (поиск активируется при нажатии на клавишу '/'). Записываем Vendor ID и Device ID, проверяем на сайте QNX не поддерживается ли этот видеоадаптер.
Если Вы продолжаете читать, то скорее всего графический адаптер в Вашем ноутбуке не поддерживается драйверами Photon. Это и не удивительно, видеокарты обновляются так часто, что не успеваешь запоминать их названия. Но не стоит отчаиваться, надежда на запуск Photon ещё есть.
VESA приходит на помощь
Такая чехарда видеоадаптеров началась далеко не вчера, лет 10-15 назад всё было даже хуже. Такое положение дел не могло всех устраивать, и вот нам на помощь пришла Ассоциация по стандартам в области видеоэлектроники (Video Electronics Standards Association, VESA). Она разработала стандарт VBE (Video BIOS Extension), который оговаривает единый механизм для основных функций видеоадаптера. К счастью, разработчики QNX знали об этом стандарте и даже реализовали его поддержку в своих разработках. Давайте попробуем этим воспользоваться.
Проверим, будут ли работать утилиты QNX с графическим адаптером ноутбука. Для этого нам понадобятся две утилиты, которые обычно располагаются в каталоге /qnx4/graphics/bin, а именно show_vesa и test_vesa2. Запускаем:
# /qnx4/graphics/bin/show_vesa
Эта программа выводит на экран информацию о видеокарте и поддерживаемых VESA режимах. Если программа завершилась по SIGSEGV (ошибка сегментирования), то попробуйте запустить её с ключиком -r:
# /qnx4/graphics/bin/show_vesa -r
Если и в этом случае программа терминировалась, то данный графический контроллер не будет работать в Photon (я не знаю такого способа, с помощью которого можно было бы запустить графику). Если Вы ещё не приобрели ноутбук с данным графическим адаптером, то стоит от него отказаться и начинать тестировать другую модель.
Итак, утилита show_vesa отработала нормально. Можно попробовать запустить тест графики (не забывайте про ключик -r):
# /qnx4/graphics/bin/test_vesa2
На экране будут отображаться разноцветные прямоугольники и надпись QNX.
Запускаем Photon
При запуске Photon'а командой ph информация о графическом драйвере, который нужно запустить, и режиме видеоадаптера располагается в файле /etc/config/trap/crt.<node_num>, где node_num это номер узла QNX4. Обычно пользователю нет необходимости заглядывать в этот файл и для работы с ним существует утилита crttrap, но в нашем случае придётся заполнить этот файл самостоятельно.
Графический драйвер Photon разбит на две программы — переключатель режимов (mode switcher) и сам драйвер. Для работы по спецификации VBE надо использовать переключатель режимов Hydra.ms и драйвера семейства Pg.flat (Pg.flat — для 8-битовых режимов, Pg.flatdc — для 15/16-битовых режимов, Pg.flatdc24 — для 24-битовых режимов и Pg.flatdc32 — для 32-битовых режимов).
Собираем информацию
Чтобы правильно заполнить файл /etc/config/trap/crt.<node_num>, необходимо знать характеристики видеоадаптера и параметры интересующего видеорежима.
Номер графического режима VESA. Запускаем утилиту show_vesa и в выводе ищем необходимый графический режим. Например, требуется установить режим 1024x768x16 (1024 пикселей по горизонтали, 768 пикселей по вертикали и 16 бит на пиксель). Находим режим со следующими параметрами:
X Resolution : 0400 (1024) Y Resolution : 0300 (768) ... Bits Per Pixel : 10 (16)
Если такой режим нашёлся, то записываем его номер (у меня это 0x0117):
Mode : 0x0117 information
Требуемого режима может не оказаться в списке поддерживаемых, в этом случае можно поискать другой режим, например, с другой глубиной цвета. Если поиски не увенчались результатами, то стоит задуматься о выборе другой модели ноутбука.
Число байт на линию сканирования. Этот параметр смотрим в описании выбранного VESA режима:
Bytes Per Scanline : 0800 (2048)
Адрес видеопамяти. Опять смотрим на вывод show_vesa:
Flat Frame Buffer Addr : E0000000
Апертура (размер видеопамяти). Этот параметр можно рассчитать как (число байт на линию сканирования) * (разрешение по вертикали). Полученный результат нужно перевести в шестнадцатеричную систему.
Апертура: 180000
Параметры шины PCI -- bus, device и function. Снова воспользуемся утилитой show_pci и запишем эти параметры.
Продолжаем запускать Photon
Вооружившись собранной информацией приступаем к составлению файла /etc/config/trap/crt.<node_num>. Сначала укажем параметры переключателю режимов:
Hydra.ms -S -i0x4117 -s0x0004,0x0000 -nqnx/crt -r
Ключ -i указывает номер режима VESA. Ранее мы подобрали режим 0x0117, а переключателю режимов передаём 0x4117. Почему? По спецификации VBE старшие биты в номере режима выступают в роли флагов. В данном случае 4 (бит 14) указывает, что надо переключаться в графический режим с линейной адресацией памяти. Ключ -s задаёт адрес видеоадаптера на шине PCI. Первый параметр это PCI bus, второй параметр это PCI device сдвинутый на три битовых разряда влево и PCI function (биты 7-3 — это PCI device, биты 2-0 — PCI function). Ключ -r указывает на работу с BIOS видеоадаптера в реальном режиме.
Составляем строку запуска видеодрайвера (одной строчкой):
Pg.flatdc -HC0x00040000 -PX -HNqnx/crt -g1024x768x16 -A0xE0000000,0x180000 -WB2048
Ключ -HC указывает адрес на шине PCI аналогично ключу -s переключателя режимов. Ключ -g задаёт параметры графического режима (разрешение и глубину цвета). Ключ -A указывает адрес линейного буфера и апертуру. Параметр -WB задаёт число байт на линию сканирования.
Записываем всё это в одну строку в файл /etc/config/trap/crt.<node_num>:
Hydra.ms -S -i0x4117 -s0x0004,0x0000 -nqnx/crt -r;Pg.flatdc -HC0x00040000 -PX -HNqnx/crt -g1024x768x16 -A0xE0000000,0x180000 -WB2048
Запускаем Photon как обычно:
# ph
Если всё сделано правильно и графический адаптер соответствует спецификации VBE, то запустится Photon. Поздравляю.
Заключение
Был рассмотрен способ запуска Photon 1.14 на видеоадаптерах не поддерживаемых специализированными драйверами. Подобным образом мне удавалось переключаться в графический режим на большинстве современных видеокарт. Но у этого способа есть и недостатки. Подавляющее большинство новых моделей ноутбуков оснащаются широкоформатным экраном с соотношением сторон 16:9, в то время как графические режимы VESA зачастую рассчитаны на работу со стандартными экранами с соотношением сторон 4:3. К сожалению, тут исправить ничего нельзя и можно только надеяться на подбор наиболее удачного графического режима.