QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Thursday, 20 Nov 2008 11:32
Меню

Проект OpenNET - все о Unix
Photon во встраиваемых системах Print E-mail
Перевод Владимир Чернышов

Этот документ содержит следующие разделы:

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 &

    После этого выйдете из терминала.

    [Вернуться к списку]
    ©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
    Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
    QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
    Powered by Mambo Open Source