Этот документ содержит следующие разделы:
1. Предположения
2. Введение
3. Этап 1. Экспорт переменной среды PHOTON_PATH
4. Этап 2. Запуск Photon-сервера
5. Этап 3. Запуск драйверов ввода (мышь, клавиатура, touch-screen, и т.д.)
6. Этап 4. Запуск администратора шрифтов
7. Этап 5. Переход в графический режим
8. Этап 6. Запуск видео драйвера
9. Этап 7. Запуск администратора окон
10. Этап 8. Запуск вашего приложения
11. Протесты
12. Примеры
1. Предположения
Вы знакомы с настольной средой Photon.
Вы понимаете процесс формирования встроенных систем для QNX 6. Для получения дополнительной информации, см. "Построение встраиваемых систем".
Вы будете использовать систему QNX 6 для разработки программ, чтобы собрать встраиваемый Photon.
2. Введение
Прежде, чем вы попытаетесь конфигурировать Photon для работы на вашей внедренной системе, мы рекомендуем, чтобы вы использовали информацию, представленную в этом документе, для создания экспериментального встраиваемого Photon-а на обычном PC.
В конце документа, мы включили типовые файлы, которые вы можете использовать. Если ваш PC не имеет стандартной клавиатуры, мыши, или видео-карты, поддерживаемой драйверами, используемыми в этих примерах, вы должны изменить примеры так, чтобы они работали в вашей среде.
Когда вы запускаете Photon на настольном компьютере, вы просто напечатаете ph, тем самым запустив сценарий, который сделает всю работу за вас. Что делает этот сценарий:
запускает Photon;
определяет ваши аппаратные средства ввода/вывода;
запускает драйвера внешних устройств;
определяет ваше аппаратное обеспечение для графики;
переключает в соответствующий графический режим;
запускает видео-драйвер;
запускает администратора шрифтов с теми шрифтами, которые вам необходимы;
запускает администратора окон;
запускает администратора рабочего стола;
Как только Photon загрузится, вы запускаете приложения, которые используют администратора окон или администратора рабочего стола.
Во встраиваемой системе, вам придется выполнять все эти шаги самостоятельно, т.е. вручную. Это намного выгоднее, чем автоматический сценарий, потому что это позволит вам предопределить минимум необходимых файлов, для вашей системы и точно так же запуск каждого драйвера и приложения.
Что необходимо для запуска Photon ?
Ниже приведена пошаговая схема, необходимая для запуска Photon непосредственно, а затем запуска вашего приложения:
Экспортирование переменной среды PHOTON_PATH;
Запуск Photon-сервера;
Запуск драйверов устройств ввода (мышь, клавиатура, touchscreen, и т.д.);
Запуск администратора шрифтов;
Переход в графический режим;
Запуск видео-драйвера;
Запуск (дополнительно) администратора окон;
Запуск вашего приложения;
Каждый из этих шагов требует, чтобы некоторые файлы были установлены в вашу целевую систему. Точно указав, какая у вас есть видео-карта и какие шрифты необходимы для вашей прикладной программы, вы можете свести количество файлов (и требуемый объем дискового пространство) к абсолютному минимуму.
Мы подробно пройдем через все этапы и рассмотрим файлы, необходимые для каждого этапа. В конце этого процесса, вы будете точно знать, какие файлы Photon-а необходимы для запуска вашего приложения.
2. Этап 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 &
Если ваша встроенная среда - touchscreen или на основе пера, вы можете откорректировать входные значения для событий указателя, определяя параметры -D, -R, и -U. Например, для предотвращения случайных изменений в позиции курсора необходимо устанавливать опцию -U, потому что размер пальца превышает один пиксель.
Обратите внимание: Для получения дополнительной информации, см. Фотон в QNX 6 Справочник Утилит.
Сервер должен быть расположен в текущей переменной PATH, этот путь должен быть определен перед выполнением команды. В QNX 6, этот путь -/usr/photon/bin. Для его установки необходимо:
export PATH=:/bin:/usr/bin:/usr/photon/bin
Если ваш загрузочный образ слишком большой, потому что вы включили Photon или другие программы, вам необходимо смонтировать файловую систему, подождать пока она монтируется, а затем загрузить программы с файловой системы во время запуска Photon. Для получения дополнительной информации, см. mkifs в QNX 6 Справочник Утилит.
Обратите внимание: Если вы включаете любую из выполняемых программ Photon-а в ваш загрузочный образ, вам необходимо также включить /usr/photon/bin в mkifs_PATH.
Необходимые файлы находятся в /usr/photon/bin/Photon
Этап 3. Запуск драйвера ввода
В настольной среде обычно используется утилита inputtrap, для автоматической генерации правильной командной строки и вызова соответствующего драйвера devi-*. Например:
kbd fd -d/dev/kbd msoft
Вы выполняете inputtrap, потому что вы не знаете заранее, какой должна быть соответствующая командная строка.
Во встраиваемых системах, устройства ввода данных часто находятся в нестандартном расположении, неспособные к PnP идентификации, или просто не поддерживающиеся существующим devi-* драйвером. Кроме того, утилита inputtrap весьма объемна и забирает впустую драгоценную память и память во встроенной среде. Из-за этого, вам необходимо вручную определить командную строку для devi-* драйвера. (Вы можете временно установить inputtrap и использовать его, для определения правильной командной строки)
Вы можете настраивать входные драйверы, используя Input Driver Development Kit (Input DDK). Например, вы можете изменить объем памяти, или создать модуль для поддержки новых устройств.
Необходимые файлы для соответствующего devi-драйвера находятся в/usr/photon/bin
Этап 4. Запуск администратора шрифтов
При формировании встраиваемой системы, вам необходимо определиться с поддержкой шрифтов, т.е. подключить те шрифты, которые вам необходимы и определиться, действительно ли вам нужны масштабируемые шрифты.
В начале необходимо решить, какие шрифты вам нужны:
вероятно, вам нужен шрифт курсора, phcursor.phf;
если ваша встроенная система включает pterm, тогда вам нуженs следующие шрифты: PC Terminal (pcterm*.phf), PC Serif (pcs*.phf), и/или PC Sanserif (pcss*.phf) из семейства шрифтов. Вам также необходим файл $HOME/.photon/pterm.rc или $PHOTON_PATH/config/pterm.rc, чтобы конфигурировать шрифт терминала.
большинство виджетов приложения ожидают следующие альясы шрифтов:
- TextFont
- MenuFont
- FixedFont
- BalloonFont
- TitleFont
они должны быть определены в файле fontmap.
web-браузер требует следующие типы шрифтов:
- заглавный шрифт (например, PrimaSans BT, Dutch 801 Rm BT и т.д.)
- главный шрифт (например, Swis721 BT и т.д.)
- непропорциональный щрифт (например, Courier10 BT, PrimaSansMono BT и т.д.)
Проверьте конфигурацию броузера, чтобы увидеть, какие ему необходимы шрифты, изменяя конфигурацию для отображения шрифтов которые вы установили, или используете файл fontmap, чтобы отобразить шрифты во время выполнения.
Вы можете отображать или заменять имена шрифтов, используя файл fontmap или утилиту fontadmin. Для получения дополнительной информации, см. QNX 6 Справочник Утилит.
Конфигурирование Шрифтов
Вы можете конфигурировать шрифты непосредственно во встраиваемой системе, но это легко при использования системы для разработки программ; чтобы конфигурировать шрифты для встраиваемой системы и транслировать данные и файлы конфигурации шрифтов в соответствующей Встраиваемой Файловой Системе (EFS - Embedded File System), необходимо указать соответствующий каталог.
Предположим, что корневой каталог в этом образе - /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
Скопируйте необходимые файлы шрифтов в структуру загрузочного образа для компоновки с помощью mkifs:
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 через 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 - масштабируемые Bitstream PFR, и поддержка TrueType коллекции шрифтов.
phfontFF - масштабируемые TrueType, Type1, Type2, Bitstream Speedo (только retail кодирование) и штриховая поддержка шрифтов Bitstream.
phfontFA - поддерживают все вышеуказанное.
Этап 5. Переход в графический режим
Обычно в настольной среде вы используете программу crttrap - она определяет ваши аппаратные возможности дисплея и устанавливает файл конфигурации аппаратных средств, в котором можно выбирать графический режим и разрешающую способность экрана.
Во встроенной системе, эта информация должна быть предопределена. Процесс переключения в графический режим и запуск видео-драйвера необходимо выполнить вручную, непосредственно определяя команды, без использования инструментальных средств для удобства, подобно конфигурации дисплея для приложений.
Во многих встраиваемых системах, Видео BIOS - отсутствует из экономических соображений. Видео BIOS отвечает за инициализацию контроллера видео-чипа и любые другие установки подсистемы видео, поскольку применяемые в настоящее время видео контроллеры, часто нуждаются в сложных настройках, перед тем как использовать их даже в режиме VGA.
При переходе в графический режим, BIOS POST CODE запрашивает видео BIOS и контроллер, а затем настраивает их на определенный режим. Когда вызывается modeswitcher, видео контроллер находится в инициализированном состоянии, так что modeswitcher не должен знать, как ему устанавливать контроллер. Чтобы реализовать такую работу, многие из вызовов modeswitchers используют виртуальную поддержку ядра 8086, чтобы выполнить код в видео BIOS-е, а затем выполнить переключение режима. Виртуальная поддержка 8086 только на x86 платформах.
Во встроенной системе, которая не использует, BIOS, задание установок видео контроллера приводит или к коду IPL(init_hw2) или к modeswitcher. Если система будет использоваться в только одном видео режиме, то код IPL обычно изменяется таким образом, чтобы установить режим видео контроллера. Если режимов должно быть больше, используется специальный modeswitcher, который может полностью устанавливать контроллер без использования ресурсов видео BIOS-а.
Установка видео карты в необходимый режим работы
Есть несколько путей, с помощью которых вы можете перевести плату в графический режим:
Помещение кода в IPL, который переключит графический режим во время загрузки. На x86 системе с видео BIOS-ом, это может быть достигнуто при помощи выполняя программного прерывания, которое вызывает видео BIOS.
Например:
mov AH,0; переход в установочный режим
mov AL,12; установка режима 0x12: 640x480, 16 цветов
int 10h
Записывают программу modeswitcher, которая может быть выполнена, при загрузке Photon-а.
Использование графического драйвера DLL, который переключает видео режим.
Если вы собираетесь переключать режимы, с помощью графического драйвера DLL, возможно вы, собираетесь использовать встроенный драйвер QNX Development Kit или третьего лица.
Однако, если вы хотите создать ваш собственный код переключения режимов то вам, скорее всего, понадобиться средство разработки графических драйверов.
В настоящее время, все драйвера, которые мы поставляем, требуют наличие видео BIOS-а для правильной работы. Некоторые драйвера запрашивают видео BIOS, чтобы переключать видео режимы. Эти драйвера работают только на x86 системах. Другие драйвера предполагают, что аппаратные средства
Обратите внимание: были уже инициализированы (например, BIOS-ом во время загрузки, аппаратным загрузчиком, или IPL), в то время как другие (например devg-banshee.so) способны инициализировать аппаратные средства самостоятельно, но требуют информации, которая сохранена в BIOS ROM. Если нет никакого видео BIOS-а на вашей целевой системе, вам необходимо заказать графический драйвер.
Этап 6. Запуск видео драйвера
Запуск графической подсистемы Photon-а выполняется io-graphics.
Ниже приведены стандартные обращения:
io-graphics -g640x480x8 -dldevg-vga.so -P/usr/photon/palette/vga4.pal
io-graphics -g1024x768x16 -dldevg-vesabios.so
io-graphics -g1024x768x16 -dldevg-rage.so -d0x1002,0x4755 -I0
Список обозначений параметров:
-g определяет разрешающую способность и цветовое разрешение видео режима. Обратите внимание, что драйвер VGA симулирует io-graphics, который имеет разрядность цвета на 8 бит, даже при том, что это устанавливает видео режим на 4 бита по причинам эффективности.
-dl определяет имя графического драйвера для загрузки, чтобы аппаратно управлять машинной графикой.
-d требуется для драйверов, которые идентифицируют видео адаптер его PCI поставщиком и ID устройства.
-I определяет образцы устройств PCI для подключения к ним, в том случае, если есть больше чем одно графическое устройство в системе, этого же поставщика и ID устройства.
-P Определяет файл используемой палитры; vga4.pal - палитра, предназначенная для использования в 16-цветном видео режиме.
Для получения дополнительной информации про io-graphics, см. QNX 6 Справочник Утилит.
Необходимые файлы
/usr/photon/bin/io-graphics - запускает графическую подсистему.
/lib/DLL/devg-* - графические драйвера.
/usr/lib/libdisputil.so.1 - библиотека сервисных подпрограмм, которые используют devg* драйвера. Большинство графических драйверов связано с этой библиотекой.
/usr/lib/libffb.so.1 - библиотека подпрограмм растеризации, которые используют devg* драйвера. Большинство графических драйверов связано с этой библиотеки
Этап 7. Запуск оконного администратора
Этот этап дополнительный и используется в том случае, если существует несколько используемых приложений или если вашей встроенной система требуются услуги, обеспечиваемые администратором окон.
Сейчас, единственная известная неподдержваемая особенность - множитель Ph_WM_CLOSE, не будет выдавать сигнал SIGHUP приложению, если процесс не отвечает (необходима поддержка для канала - "netkill" - операция не добавлена к ядру).
Файл конфигурации рабочего пространства ($HOME/.ph/wm/wm.cfg) может изменяться динамически используя pwmopts. Альтернативно, параметры не по умолчанию могут быть установлены через командную строку или через переменную среды PHWMOPTS.
Если используется индивидуализированное меню ($HOME/.photon/wm/wm.menu pwm), может появиться проблема, при выполнении команд, поскольку полные составные имена (урезанные имена) команды должны переноситься между системами, при условии, что PHOTON_PATH непротиворечива. Стандартное меню pwm вызывает все команды, определенные в $PHOTON_PATH и /bin. Для встраиваемых систем, обратите внимание, можно отключать эту возможность полностью, используя опцию pwm -W.
Необходимые файлы: /usr/photon/bin/pwm
Этап 8. Запуск вашего приложения
Если ваше приложение - единственная выполняемая программа и не требует администратора окон, тогда можно статически привязать ваше приложение - вам не нужна общедоступная библиотека Photon-а.
Если вам нужен администратор окон или вам надо выполнять более чем одну программу, тогда лучшее использовать общедоступная библиотеку Photon-а.
Необходимые файлы: ваше приложение.
Если ваше приложение нуждается в общедоступной библиотеке Photon-a: /usr/photon/lib/libph.so
Протесты
Приведем свои наблюдения, с которыми столкнулись разработчики при переносе Photon-a во встраиваемую систему:
mkifs
По умолчанию, mkifs разделяет имена ресурсов Photon-a от исполняемых файлов. Чтобы это предотвратить, установите атрибут +raw для всех приложений Photon-а.
Файловая система типа Flash
Далее будут затронуты свойства файловой системы Flash, при конфигурации Photon-a:
Сжатие и быстродействие
Так как flash-файловая система будет работать медленнее, когда идет работа с сжатым файлом, вам хотелось бы сохранить отчеты об использовании ресурса в отдельном файле, вместо включения их в конец исходника. Чтобы это сделать, замените make-файл так, чтобы ресурсы были связаны c отдельным файлом. Например, замените следующую зависимость:
$(ABOBJ) $(MYOBJ)
$(LD) $(LDFLAGS) $(ABOBJ) $(MYOBJ) -M -o mine
usemsg mine ../Usemsg
phabbind mine $(ABMOD)
:
$(ABOBJ) $(MYOBJ)
$(LD) $(LDFLAGS) $(ABOBJ) $(MYOBJ) -M -o mine
usemsg mine ../Usemsg
phabbind mine.res $(ABMOD)
Вам также нужно экспортировать переменную пути AB_RESOVRD, если отчет создается не в том же самом каталоге где находятся исполняемые программы. Это исключает поиск каталога, содержащего исполняемые программы.
Поиск
Flash-файловая система имеет ограничения на поиск и запись. Необходимо программно исключить, запись в середину файла.
Обратите внимание: подпрограммы файла конфигурации - не совместимы с flash-файловой системой.
Лицензирование
Проверите, что все используемые лицензии типа "new style". Другие лицензии QNX не работают с flash-файловой системой
Графика
Много встраиваемых систем испытывают недостаток компонентов, которые являются типичными на настольной машине. Вот несколько примеров, чтобы показать это:
BIOS ROMs
Поскольку большинство из переключаемых графических режимов, поддерживаемых Photon-ом, требуют чтобы видео BIOS позволил им переключать графические режимы, BIOS должен присутствовать на плате. Свяжитесь с представительством QNX, чтобы узнать, доступна ли без-BIOS версия.
Текстовый режим
Поддержка текстового режима не требуется Photon-у, так что вы можете удалить любую установку, связанную с текстовым режимом.
Видео память
Память типа RAM может быть сделана непрерывной, потому что драйвера Photon-a не ограничиваются диапазоном видео памяти (например 0xА000). Вы можете разместить видео буфер в памяти где угодно.
Соображения
Ниже приведены некоторые соображения, касательно встраиваемых систем:
Быстродействие ЦП
Для некоторых встраиваемых систем, быстродействие ЦП будет меньше чем в настольных системах. Вам необходимо будет это рассмотреть при проектировании ваших приложений в Photon-е для встраиваемой системы.
Скролинг (прокрутка)
Если одновременная области прокрутки больше чем одна страница, при нажатии PageDown, попробуйте увеличить значение времени задержки повторения мыши в Photon-e. Например:
Photon -D1000 &
Ввод
Вы можете установить параметры задержки, как на устройствах ввода, так и на Photon-сервер. Приведя быстродействие, с которым будут обрабатываться сигналы от нажатия клавиш мыши, вы можете ограничить трафик, проходящий через Photon. На медленных платформах (386 и 486) это обычный подход, чтобы понизить зависание системы, установив обработку входных сигналов через 10 или 20 мс.
Phindows и Phditto
Если ваше целевое приложение должно поддерживать удаленную диагностику от Phindows или phditto, вам необходимо установить phrelay, исполнительную библиотеку и файл конфигурации услуг.
Пример
Давайте рассмотрим этапы, необходимые для установки и использования Photon-a во всраиваемой системе.
Наша цель состоит в том, чтобы собрать Photon-систему со следующими минимальными возможностями:
Масштабируемые шрифты TrueType - доступен самый малый набор, который включает нормальный шрифт, полужирный, курсив и полужирный курсив.
Минимально необходимый видео драйвер для чипа RageLT.
Дополнительно: мышь/клавиатура - мы должны запускать и отключать эти службы, по необходимости.
Дополнительно: администратор окон - мы должны запускать и отключать эту службу, по необходимости.
Для внедрения Photon-a во встраиваемую систему необходимо проанализировать следующее:
Необходимые исполняемые файлы
Необходимые библиотеки (.so)
Необходимые шрифты
Серверы шрифтов
Установка всех этих компонентов
Всплывающие подсказки
Необходимые исполняемые файлы
Первый этап состоит из рассмотрения полностью установленной системы. Запустите Photon на вашем компьютере.
Рассмотрите выполнение команды pidin с параметрами. Ниже приведен отчет межсетевой портативной ЭВМ, урезанный для того, чтобы показать только определенные компоненты Photon-a:
pidin ar
pid Arguments
3620894 Photon
3665951 fontsleuth -d /usr/photon/font_repository
3727406 pwm
3657775 /usr/photon/bin/phfontFA -d /usr/photon/font_repository -j -s 300k
3698736 io-graphics -g1024x768x32 -dldevg-rage.so -I0 -d0x1002,0x4c42
3715121 devi-hirun kbd fd -d/dev/kbd ps2 kb -2
3772466 shelf
3809331 bkgdmgr
3809332 wmswitch
3809336 Xphoton -once
3809337 gtwm
Нам нужны только несколько из этих программ:
Photon
phfontFA - см. рассмотрение шрифтов ниже
io-graphics
pwm - необходим для управление окнами
devi-hirun - необходим для мыши или клавиатуры (или touchscreen); см. "Входные драйверы (devi-*)" в резюме QNX 6 Справочник Утилит.
Другие компоненты являются дополнительными для расширенных встраиваемых систем:
fontsleuth - Используется для автоматической установки шрифтов.
shelf - Панель "быстрого запуска" приложений. Этот компонент создает панель (по умолчанию на правой стороне экрана) приложений, которые вы можете запускать.
bkgdmgr - Выводит фоновый рисунок на экран.
wmswitch - Работает с pwm для обработки переключения между приложениями при нажатии Alt+Tab.
Xphoton - Выполняет приложения X-Windows.
gtwm - Администратор окон для Xphoton.
Сохраните список параметров про вашу систему в файле. Он нам потребуются позже.
Необходимые библиотеки
Нашей системе нужны только следующие компоненты:
Photon
phfontFA (или эквивалентный администратор шрифта - см. рассмотрение шрифтов ниже)
io-graphics
pwm
devi-hirun
Давайте рассмотрим листинг выполнения команды pidin mem:
1048603 1 /photon/bin/Photon 10r RECEIVE 64K 120K 8192(516K)*
ldqnx.so.1 @b0300000 300K 12K
1302557 1 usr/photon/bin/pwm 10o RECEIVE 116K 56K 8192(516K)*
ldqnx.so.1 @b0300000 300K 12K
libph.so.1 @b034e000 1220K 48K
libphrender.so.1 @b048b000 232K 8192
1085470 1 hoton/bin/phfontFA 12r RECEIVE 284K 880K 12K(516K)*
ldqnx.so.1 @b0300000 300K 12K
/dev/mem @40100000 ( 0) 32K
1122335 1 io-graphics 12r REPLY 144K 148K 8192(516K)*
ldqnx.so.1 @b0300000 300K 12K
libph.so.1 @b034e000 1220K 48K
libphrender.so.1 @b048b000 232K 8192
devg-rage.so @b04c7000 24K 4096
libffb.so.1 @b04ce000 28K 4096
libdisputil.so.1 @b04d6000 24K 4096
/dev/mem @40100000 ( 0) 32K
/dev/mem @40108000 ( 0) 4096
/dev/mem @40109000 ( 4000) 64K
/dev/mem @40119000 ( 0) 8192K
/dev/mem @40919000 ( fd7ff000) 4096
/dev/mem @4091a000 ( 0) 2304K
1138720 1 o/x86/o/devi-hirun 15o RECEIVE 52K 24K 8192(516K)*
1138720 2 o/x86/o/devi-hirun 10o REPLY 52K 24K 4096(132K)
1138720 3 o/x86/o/devi-hirun 12o SIGWAITINFO 52K 24K 4096(132K)
1138720 4 o/x86/o/devi-hirun 15o RECEIVE 52K 24K 4096(132K)
ldqnx.so.1 @b0300000 300K 12K
libph.so.1 @b034e000 1220K 48K
libphrender.so.1 @b048b000 232K 8192
Этот листинг показывает нам каждую библиотеку, которая необходима и должна быть доступна встраиваемой системе. Портативная ЭВМ имеет Rage-видео карту (драйвер - devg-rage.so).
Таким образом, нам нужны, по крайней мере, следующие библиотеки:
ldqnx.so.1
libph.so.1
libphrender.so.1
devg-rage.so
libffb.so.1
libdisputil.so.1
Необходимые шрифты
Теперь давайте рассмотрим шрифты. Иногда приложение ожидает определенный шрифт и привязывается непосредственно к этому шрифту. Если это так, вам необходимо явно подключить каждый шрифт, в который нужен вашему приложению. Если вы стандартизируете некоторые типы шрифтов или вам не нужен определенный шрифт (хорошо если совпадет размер), тогда вы можете сократить число шрифтов и использовать один шрифт для замены нескольких других шрифтов. Например, шрифты Times могут использоваться как замена для Helvetica и Courier.
Теперь пришло время для создания игровой область на вашей системе, для начала проверки встроенной системы.
Создайте подкаталог /phembed в корне вашей системы. В пределах этого каталога, создайте следующие подкаталоги:
/phembed/bin
/phembed/lib
/phembed/font_repository
Теперь вернемся к шрифтам. В нашем примере мы хотим использовать TrueType шрифт primasansbts почти для всего. Мы будем использовать шрифт pcterm фиксированной ширины для наших (дополнительных) pterm и оконечных окон. Мы также хотим иногда использовать мышь, так что нам надо включить файл phcursor.phf.
Ниже приведены необходимые файлы:
-rw-rw-r-- 1 root root 707 Nov 29 15:20 fontdir
-rw-rw-r-- 1 root root 104 Mar 20 2000 fontext
-rw-rw-r-- 1 root root 697 Nov 29 15:19 fontmap
-rw-rw-r-- 1 root root 12393 Mar 20 2000 pcterm12.phf
-rw-rw-r-- 1 root root 12905 Mar 20 2000 pcterm14.phf
-rw-rw-r-- 1 root root 17437 Mar 20 2000 pcterm20.phf
-rw-rw-r-- 1 root root 2868 Mar 20 2000 phcursor.phf
-rw-rw-r-- 1 root root 75784 Mar 20 2000 tt2001m_.ttf
-rw-rw-r-- 1 root root 77924 Mar 20 2000 tt2002m_.ttf
-rw-rw-r-- 1 root root 71200 Mar 20 2000 tt2003m_.ttf
-rw-rw-r-- 1 root root 82452 Mar 20 2000 tt2004m_.ttf
-rw-rw-r-- 1 root root 56156 Mar 20 2000 tt2009m_.ttf
-rw-rw-r-- 1 root root 58748 Mar 20 2000 tt2011m_.ttf
Скопируйте эти файлы из /usr/photon/font_repository в /phembed/font_repository, затем замените каталоги в /phembed/font_repository.
Мы хотим изменить fontdir, fontmap, и fontext файлы, чтобы отразить шрифты и альясы, которые нужны нашей встраиваемой системе.
Ниже приведен измененный файл fontdir:
;
; fontdir config file, Tue Jan 18 15:34:42 2000
;
phcursor,.phf,Photon Cursor,0,,E900-E921,Np,32x32,3K
primasansbts,0@tt2001m_.ttf,PrimaSans BT,0,,0020-F002,MIp,133x129,75K
primasansbtsi,0@tt2002m_.ttf,PrimaSans BT,0,I,0020-F002,MIp,134x129,77K
primasansbtsb,0@tt2003m_.ttf,PrimaSans BT,0,B,0020-F002,MIp,143x130,70K
primasansbtsbi,0@tt2004m_.ttf,PrimaSans BT,0,BI,0020-F002,MIp,145x129,81K
primasansmonobts,0@tt2009m_.ttf,PrimaSansMono BT,0,,0020-F002,MIf,60x129,55K
primasansmonobtsb,0@tt2011m_.ttf,PrimaSansMono BT,0,B,0020-F002,MIf,60x130,58K
pcterm12,.phf,PC Terminal,12,,0000-00FF,Nf,6x12,13K
pcterm14,.phf,PC Terminal,14,,0000-00FF,Nf,8x14,13K
pcterm20,.phf,PC Terminal,20,,0000-00FF,Nf,10x19,18K
Из этого листинга можно определить, что будут использоваться следующие шрифты:
tt2001 - нормальный шрифт
tt2002 - курсив
tt2003 - полужирный
tt2004 - полужирный курсив
tt2009 - mono space нормальный шрифт
tt2011 - mono space полужирный
pcterm12/14/20 шрифты - для наших pterm сеансов, и phcursor - для всех изображений курсора мыши.
Ниже приведен измененный файл fontmap:
;
; fontmap config file, Tue Jan 18 15:34:42 2000
;
BalloonFont = primasansbts
FixedFont = primasansmonobts
HeadingFont = primasansbts
MenuFont = primasansbts
MessageFont = primasansbts
TextFont = primasansbts
TitleFont = primasansbts
Helvetica = primasansbts
Verdana = primasansbts
monospace = primasansmonobts
sans-serif = primasansbts
serif = primasansbts
web = primasansbts
arial = primasansbts
term = pcterm
geneva = primasansbts
monaco = primasansbts
ny = primasansbts
courier = primasansmonobts
dutch = primasansbts
swiss = primasansbts
times = primasansbts
wingbats = primasansbts
helv = primasansbts
ncen = primasansbts
time = primasansbts
? = primasansmonobts
Вы можете сжать этот файл еще больше, отображающей любые неопределенные шрифты к ? шрифту. Это зависит от того, для каких шрифтов вы хотите установить фиксированную ширину и пропорциональность.
Ниже приведен измененный файл fontext:
;
; fontext config file, Mon Dec 13 15:36:21 1999
;
+normal = primasansbts, primasansmonobts, phcurso
Серверы шрифтов
phfontFA - Поддерживает все (*.phf и *.ttf), включая *.pfr шрифты, которые являются передовой технологией масштабируемых шрифтов.
phfontFF - Поддерживает все (*.phf и *.ttf), но не *.pfr.
Если вам не нужна поддержка *.pfr, мы рекомендуем чтобы вы использовали phfontFF.
Установка всех этих компонентов
Теперь давайте разместим все части, которые нам нужны на своих местах, и сформируем простой сценарий, который запустит наш встроенный Photon.
Вы должны были уже создать следующие каталоги:
/phembed/bin
/phembed/lib
/phembed/font_repository
Скопируйте требуемые наборы исполняемых файлов в /phembed/bin:
cp /usr/photon/bin/Photon /phembed/bin
cp /usr/photon/bin/phfontFF /phembed/bin
cp /usr/photon/bin/io-graphics /phembed/bin
cp /usr/photon/bin/devi-hirun /phembed/bin
cp /usr/photon/bin/pwm /phembed/bin
Скопируйте требуемые библиотеки в /phembed/lib:
cp /usr/lib/libph.so.1 /phembed/lib
cp /usr/lib/libphrender.so.1 /phembed/lib
cp /usr/lib/libffb.so.1 /phembed/lib
cp /usr/lib/libdisputil.so.1 /phembed/lib
cp /lib/dll/devg-rage.so /phembed/lib
Есть еще одна библиотека, которая может нам понадобиться. Если вы хотите запускать приложения, созданные в PhAB, тогда вам необходима библиотека libAp.so.1. Мы рекомендуем сделать ее доступной:
cp /lib/libAp.so.1 /phembed/lib
Нам необходимо создать ссылки на каталог /phembed/lib. Это нужно для того, чтобы приложения, которые ищут *.so вместо *.so.1, работали правильно. Сделайте следующее:
cd /phembed/lib
ln -s libAp.so.1 libAp.so
ln -s libph.so.1 libph.so
ln -s libphrender.so.1 libphrender.so
ln -s libffb.so.1 libffb.so
ln -s libdisputil.so.1 libdisputil.so
Теперь мы можем разобраться с графическим драйвером. В вышеуказанном примере, мы запускаем драйвер devg-rage.so с параметрами:
dldevg-rage.so -I0 -d0x1002,0x4c42
(мы видели это в листинге выполнения pidin)
Если у вас другой видео-драйвер, вы должны скопировать его в /phembed/lib.
Теперь снова надо вернуться к шрифтам. Вам надо заполнить каталог /phembed/font_repository *.ttf файлами (по вашему усмотрению) и измененными fontmap, fontdir, и fontext файлами, как описано выше.
Теперь у нас есть все необходимые компоненты для испытания нашего внедренного Photon-a. Самый простой способ пробовать это, состоит в том, чтобы использовать вторую машину, связанную с первой по telnet или безмодемному последовательному кабелю.
Если вы используете безмодемный кабель, вы можете запустить оболочку на вашей оконечной машине, набрав на -t/dev/ser1 ksh на QNX машине платформы В реальном масштабе времени. Знак shell prompt (#) должен появиться на вашем терминале, если скорость в бодах и управление потоком данных на последовательных портах согласованы. Мы предполагаем, что вы имеете это подключение и что у вас есть shell prompt, доступный на терминале, который связан с вашей QNX машиной.
Полезно иметь сценарий оболочки для запуска Photon-a. Ниже приведен сценарий оболочки, который запускает Photon, используя вышеупомянутый пример:
export PHOTON_PATH=/phembed
export LD_LIBRARY_PATH=/phembed/lib:/lib
cd /phembed/bin
./Photon &
on -w /dev/photon -W10
./phfontFF -d /phembed/font_repository -c 20K -j -s 50K -F 10 -S 50 &
on -w /dev/phfont -W10
./io-graphics -g1024x768x32 -dldevg-rage.so -I0 -d0x1002,0x4c42 &
/usr/photon/bin/phcalc -x100 -y100 &
/usr/photon/bin/phcalc -x300 -y100 &
Скопируйте этот сценарий оболочки в файл, называемый /phembed/ph-start, и установите ему атрибуты исполняемой программы (chmod a+x ph-start).
Обратите внимание на следующие моменты в вышеупомянутом сценарии:
Мы заставляем экспортные переменные отражать нашу встроенную среду.
Мы заставили некоторые параметры в программе phfontFF уменьшить использование памяти. См. подробности использования команды (use /usr/photon/bin/phfontFF).
Видео драйвер запускается таким же самым путем, поскольку вы видите параметры в листинге команды pidin. Если у вас другой видео драйвер с другими параметрами, вам нужно изменить эту строку.
Мы запускаем несколько копий phcalc программы калькулятора показательно, чтобы было видно - Photon запущен.
Мы используем команду останова сценария, если требуемое устройство не доступно. Для получения дополнительной информации, см. QNX 6 Справочник Утилит.
Если все прошло хорошо, вам надо с вашего терминала выполнить ph - запустит сценарий, Photon и появятся два окна калькулятора друг возле друга на кране. Убедитесь, что вы вышли из любых текущих сеансов Photon-a перед запуском сценария ph.
Советы
Вашему вниманию предлагаются советы для отладки вашего внедренного Photon-a:
По умолчанию, мы не запускаем pwm администратор, это означает что вокруг ваших приложений нет никакой границы, при этом вы можете использовать мышь, чтобы перемещать окна на экране. Ничто не запрещает вам запускать и останавливать pwm "на лету". Например, наберите следующее после выполнения сценария ph-start:
pwm &
По умолчанию, мы не запускаем драйвер мыши/клавиатуры. Он также может быть запущен и остановлен "на лету". Например, в нашей внедренной системе, следующая строка запустит devi драйвер:
/usr/photon/bin/devi-hirun kbd fd -d/dev/kbd ps2 kb -2 &
Мы можем выполнять эту команду непосредственно из shell prompt на терминале, и мы автоматически увидим видеть, что появляется курсор мыши и включается клавиатура.
На правильно установленной встроенной системе, вам не предоставляется устройство /dev/kbd, значит вам надо просмотреть документацию для семейства драйверов devi-*. Например, если у вас есть порт PS2:
devi-hirun kbd kb ps2 kb -2
Вы можете запускать любые программы Photon-а, т.е. вы запускаете, а после работы "убиваете" приложение. Например, если вам нужен терминал, то для его запуска надо набрать:
/usr/photon/bin/pterm &
После этого выйдете из терминала. |