Руководство программиста в Photon (953920), страница 70
Текст из файла (страница 70)
В конце приложения мы включили файлы с примером, который Вы можете использовать. Если Ваш РС не имеет стандартной клавиатуры, msoft-совместимой мыши или видеокарты, поддерживаемой драйверами, используемыми в этих примерах, Вам понадобится модифицировать примеры так, чтобы они работали в Вашем окружении.
Когда Вы запускаете Photon в десктопном окружении, Вы бездумно набираете ph-сценарий, который выполняет за Вас всю работу. Этот сценарий:
-
запускает Photon
-
определяет Ваши устройства ввода
-
запускает драйверы ввода
-
определяет Ваше графическое устройство
-
переключается в соответствующий графический режим
-
запускает графический драйвер
-
запускает менеджер шрифтов с требуемыми шрифтами
-
запускает оконный менеджер
-
запускает менеджер рабочего стола.
Как только Photon запущен, Вы запускаете нужные Вам приложения, используя либо оконный менеджер, либо менеджер рабочего стола.
Во встроенном окружении Вам понадобится выполнить все эти шаги самостоятельно – вручную. В этом есть много достоинств, поскольку позволяет Вам предопределить минимум файлов, необходимых Вашей системе, и точно задать, как будет запущен каждый драйвер и приложение.
Шаги по загрузке Photon'а
Вот основные шаги, необходимые для загрузки непосредственно в Photon с исполнением Вашего приложения (приложений).
-
Экспорт переменной окружения PHOTON_PATH.
-
Запуск сервера Photon'а.
-
Запуск драйверов ввода (мышь, клавиатура, чувствительный к касанию экран, прочая)
-
Запуск менеджера шрифтов
-
Переключение в графический режим
-
Запуск графического драйвера
-
Запуск оконного менеджера (необязательно)
-
Запуск Вашего приложения.
Каждый из этих шагов требует определённых файлов, которые должны быть установлены в Вашей целевой системе. При чёткой предопределённости того, какие графические устройства Вы имеете и какие шрифты требуются Вашему приложению, Вы можете иметь абсолютный минимум числа файлов (и требуемого дискового пространства).
Мы подробно пройдёмся по всем этим шагам и обсудим, какие файлы требуется на каждом шаге. В конце Вы будете точно знать, какие файлы Photon'а Вам понадобятся, чтобы запустить на исполнение Ваше встроенное приложение.
Шаг 1. Экспорт переменной окружения PHOTON_PATH
Переменная окружения PHOTON_PATH предназначена для хранения директории с установленным Photon'ом. По умолчанию это директория /usr/photon. Предполагается, что в ней располагаются по меньшей мере следующие поддиректории:
bin | Исполняемые файлы Photon'а |
font_repository | Файлы шрифтов Photon'а и конфигурационные файлы (ОС-независимые) |
palette | Графические палитры (ОС-независимые) |
translations | Photon'овские файлы перевода международных языков (ОС-независимые) |
Вы должны установить переменную окружения PHOTON_PATH:
export PHOTON_PATH = /usr/photon
Шаг 2. Запуск сервера Photon'а
Если Вам не надо передавать серверу Photon'а никаких аргументов командной строки, он может быть запущен следующим образом:
Photon &
Если в Вашем встраиваемом окружении имеется чувствительный к касанию экран или световое перо, Вы можете откорректировать значение ввода для событий указателя, задав опции –D, -R и U. Например, для исключения случайного изменения позиции из-за того, что нажатие пальцем захватывает больше чем один пиксель, задайте опцию –U. Более подробную информацию см. в описании Photon в книге "Справочник утилит QNX Neutrino".
Сервер должен располагаться в текущем PATH и путь должен быть определён до того, как команда будет запущена. В QNX Neutrino этим путём является /usr/photon/bin. Например:
export PATH=:/bin:/usr/bin:/usr/photon/bin
Если загрузочный образ Вашей системы слишком велик из-за того, что Вы включили в неё Photon или другие исполняемые файлы, Вы можете смонтировать файловую систему, подождать её появления и затем загрузить исполняемые файлы из файловой системы на этапе загрузки. Более подробно см. описание утилиты mkifs в "Сравочнике утилит QNX Neutrino".
Если Вы включаете в ваш загрузочный образ какой-либо исполняемый файл Photon'а, Вы должны также добавить в переменную окружения MKIFS_PATH путь /usr/photon/bin
Необходимые файлы
/usr/photon/bin/Photon
Шаг 3. Запуск драйверов ввода
Обычно для окружения в настольном компьютере Вы используете утилиту inputtrap, чтобы автоматически генерировать корректную командную строку и вызывать соответствующий драйвер devi-. Например:
kbd fd –d/dev/kbd msoft
Обычно Вы запускаете inputtrap, поскольку наперёд не знаете, какой должна быть соответствующая командная строка.
Во встраиваемых системах устройства ввода часто располагаются по необычным адресам, не поддаются PnP-идентификации или просто не поддерживаются существующими devi- драйверами. Кроме того, утилита inputtrap имеет склонность быть излишне большой и просто занимает драгоценную память в ограниченном окружении. Исходя из этих соображений, Вам обычно стоит задавать командную строку для драйвера devi- вручную. (Вы можете временно проинсталлировать утилиту inputtrap и использовать её для создания корректной командной строки.)
Вы можете настроить драйверы ввода для своих нужд, использовав набор инструментов Разработчика Драйверов Ввода (Input DDK). Например, Вы можете изменить размер базовой памяти или создать свой модуль для поддержки новых устройств.
Требующиеся файлы
Соответствующий драйвер devi- в директории /usr/photon/bin.
Шаг 4. Запуск менеджера шрифтов
При построении встраиваемой системы Вам необходимо принять несколько решений об уровне поддержки шрифтов, включая то, какие шрифты Вам понадобятся, нужны ли Вам масштабируемые шрифты.
Первым шагом является принятие решения о том, какие шрифты Вам нужны:
-
Очень вероятно, что Вам понадобится курсорный шрифт phcursor.phf.
-
Если Ваша встраиваемая система включает в себя терминал pterm, Вам потребуются семейства шрифтов PC Terminal (pcterm.phf), PC serif (pcs.phf) и/или PC Sanserif (pcss.phf). Вам, вероятно, понадобится также файл $HOME/.photon/pterm.rc или $PHOTON_PATH/config/pterm.rc, чтобы сконфигурировать шрифт терминала.
-
Большинство базирующихся на виджетах приложений предполагают, что следующие алиасы:
-
TextFont
-
MenuFont
-
FixedFont
-
BallonFont
-
TitleFont
определены, будучи соответствующим образом отображены в файле отображения шрифтов (fontmap).
-
Вэб-броузер требует следующие типы шрифтов:
-
шрифт основного тела (напр., PrimaSans BT , Dutch 801 Rm BT, прочая)
-
заголовочный шрифт (напр., Swis721 BT, прочая)
-
непропорциональный шрифт (напр., Courier 10 BT, PrimaSansMono BT, прочая).
Проверьте конфигурацию броузера, чтобы найти, какие шрифты ожидаются, и используйте эти шрифты, модифицируя конфигурацию так, чтобы отразить, что Вы инсталлировали, или используйте файл fontmap, чтобы отобразить это во время исполнения.
Вы можете отобразить или подставить имена шрифтов, используя файл fontmap или раздел Mappings утилиты fontadmin. Более полную информацию см. в "Справочнике утилит QNX Neutrino".
Конфигурирование шрифтов
Вы можете конфигурировать шрифты во встраиваемых системах сами, но проще использовать систему разработки, чтобы сконфигурировать шрифты для встраиваемой системы и присоединить данные о шрифтах и конфигурационные файлы к соответствующей директории образа построения Встраиваемой Файловой Системы (EFS).
Например, предположим, что корневая директория этого образа –/usr/EKit/bsp/board/build/root (реальный путь зависит от Вашего окружения системы разработки). Измените Вашу текущую директорию так, чтобы ею стала корневая директория Вашей встраиваемой поддиректории:
export EKIT_DIR=/usr/EKit/bsp/board/build/root
cd /usr/EKit/bsp/board/build/root
Затем создайте поддиректорию шрифтов для Вашей встраиваемой системы. Например:
mkdir -p my_dir /font_repository
Скопируйте необходимые файлы шрифтов в базу построения образа для сборки утилитой mkefs:
cp font_filename my_dir/font_repository (повторите для каждого шрифта)
cp /usr/photon/font_repository/font* my_dir/font_repository
cp /usr/photon/font_repository/phfont.ini my_dir/font_repository
mkfontdir -i $EKIT_DIR/my_dir/fontdir \
-d $EKIT_DIR/my_dir/font_repository
# ЗАМЕЧАНИЕ: утилита mkfontdir требует полный путь
В этом примере создана некая начальная конфигурация, обновлены файлы конфигурации шрифтов и скопированы все файлы шрифтов в заданную указанную директорию.
Чтобы изменить соответствие шрифтов, вызовите утилиту fontadmin:
fontadmin -c my_dir/font_repository -d my_dir/font_repository
Если Ваш, исполняющийся при запуске сценарий вызывает особый сервер шрифтов (напр., phfontphf или phfontFA), вы не получите пользы от предварительной обработки файла fontopt утилитой phfont; Вам надо вручную передать каждую опцию, содержащуюся в этом файле, в командную строку.
Вы можете оттестировать установку шрифтов до построения встраиваемого образа, перезапустив Ваш сервер шрифтов настольной системы, указав ему новую конфигурацию (вызвав утилиту phfont с опцией -d, задавая поддиректорию шрифтов из построенного образа). Чтобы вернуться к первоначальным установкам, просто выполните:
phfont &
Запуск сервера шрифтов
Если Вы сведущи в том, какие возможности сервера шрифтов Вам требуются (масштабируемые PFR – portable font resourse – с помощью утилиты phfontpfr; или же простая поддержка побитовых отображений с помощью phfontphf), то Вы можете запустить непосредственно соответствующий сервер:
/usr/photon/bin/phfontphf &
Если файлов шрифтов нет в локальном образе, Вам надо задать директорию, содержащую эти файлы и конфигурацию, использовав опцию -d командной строки (либо для утилиты phfont, либо для реальных серверов phfontphf, phfontpfr и прочих):
/usr/photon/bin/phfontphf -d /fs/hd1-qnx4/my_dir/font_repository
Кроме того, если my_dir не является той, что и $PHOTON_PATH во встроенной системе, для правильного местоположения необходимо указать опцию -d.
Доступные серверы располагаются в /usr/photon/bin и включают в себя:
phfontphf | Только шрифты побитовых образов |
phfontpfr | Поддержка масштабируемых поточнобитовых ресурсов переносимых шрифтов (Scalable Bitstream PFR) и набора TrueType |
phfontFF | Поддержка масштабируемых TrueType, Type1, Type2, Bitstream Speedo (только retail кодирование) и Bitstream Stroke шрифтов |
phfontFA | Поддержка всего вышеперечисленного |
Шаг 5. Переключение в графический режим
Обычно в окружении настольной системы Вы используете программу Photon'а crttrap – она может определить аппаратное обеспечение Вашего монитора и установить для него конфигурационный файл, где Вы можете выбрать предпочтительный графический режим и разрешение .
В окружении встроенных систем эта информация должна быть предопределена. Процесс переключения между графическими режимами и запуск графического драйвера должен быть выполнен вручную непосредственно заданием команд без использования удобных инструментов, таких как "перехватчики" (trappers) и приложения, конфигурирующие дисплей.
Во многих окружениях встраиваемых систем из соображений экономии отсутствует видеоBIOS. ВидеоBIOS ответственен за инициализацию микросхемы видеоконтроллера, и какие-либо другие установки, требуемые видеоподсистемами, такими как современные графические контроллеры, часто требуют тщательной настройки перед тем, как они могут быть использованы даже в режиме VGA.
В настольных системах в видеоBIOS'е вызывается код самотестирования при запуске BIOS и контроллер устанавливается в это время. Когда вызывается переключатель режимов, видеоконтролер находится в инициализируемом состоянии, так что переключателю режимов не требуется знать, как устанавливать контроллер. В дополнение к этому, многие переключатели режимов в настольных системах используют поддержку ядром виртуальной машины 8086 для исполнения кода в видеоBIOS для выполнения переключения режимов. Поддержка виртуальной машины 8086 доступна только для платформы х86.
Во встроенных системах, которые не используют BIOS, работа по установке видеоконтроллера ложится либо на код начального загрузчика программы (IPL code) (init_hw2), либо на переключатель режимов. Если система будет использоваться только в одном режиме, то код начального загрузчика обычно модифицируется таким образом, чтобы установить видеоконтроллер. Если предусмотрена поддержка более чем одного режима, используется специальный переключатель режима, который может полностью установить контроллер без использования ресурсов в видеоBIOS.
Установка карты в правильный режим
Есть несколько способов переключения карты в графический режим:
-
Поместить в код начального загрузчика код, который переключает в графический режим во время загрузки. В системах х86, имеющих видеоBIOS, это может быть достигнуто исполнением программного прерывания для вызова видеоBIOS'а. Например:
mov ah, 0 ; установить режим
mov al, 12h ; режим 0х12: 640х480, 16 цветов
int 10h
-
Написать программу-переключатель режимов, которая может быть выполнена при запуске Photon'а
-
Иметь динамически подсоединяемую библиотеку графических драйверов, выполняющую переключение режимов.
Если Вы решили переключать режимы с помощью DLL графических драйверов, возможно, что Вы решите использовать драйвер, предоставляемый либо QNX Software Systems, либо сторонними разработчиками.
Однако, если Вы хотите написать Вашу собственную программу переключения режимов, Вы, вероятно, найдёте полезным комплект разработчика графических драйверов (Graphics Driver Development Kit).