photon во встраиваемых системах

25
Photon во Встраиваемых системах Предположения Введение Основы Пояснения / проблемы Пример - использование самохостившейся командной строки Расширенные возможности Предположения Здесь делаются следующие предположения: Вы понимаете процесс создания встраиваемой системы для QNX Neutrino. Для получения дополнительной информации, см. Создание Встраиваемых систем Вы имеете свои целевые аппаратные средства загрузка в Нейтрино, и можете выполнить оболочку и команды, например, pidin. Вы знаете, какое аппаратное обеспечение машинной графики Вы будете использовать, и его параметры (например, идентификаторы Поставщика и Устройства для видеокарты PCI). Вы будете использовать систему разработки программ QNX Neutrino, чтобы встроить Ваш внедренный целевой Photon из командной строки, или использовать Системный Составитель программы в интегрированной среде разработки. Введение Микрографический интерфейс пользователя Photon - внедренный Графический интерфейс пользователя. Этот графический интерфейс пользователя составлен из многочисленных процессов, которые используют передачу сообщений Нейтрино, чтобы создать очень чувствительный пользовательский опыт. Photon составлен из этих основных компонентов: Сервер графических структур QNX (io-display) Сервер Photon (графическое ядро photon) менеджер графической подсистемы и аппаратный драйвер (io- graphics и связанный драйвер графики) поддержка шрифта (phfont.so и сменные DLL-библиотеки) поддержка ввода (драйвер ввода devi-*)

Upload: serge-altukhov

Post on 13-Mar-2016

257 views

Category:

Documents


4 download

DESCRIPTION

Создание образа ОСРВ QNX Neutrino 4 с графической оболочкой Photon

TRANSCRIPT

Page 1: Photon во встраиваемых системах

Photon во Встраиваемых системах

Предположения Введение Основы Пояснения / проблемы Пример - использование самохостившейся командной строки Расширенные возможности

Предположения

Здесь делаются следующие предположения: Вы понимаете процесс создания встраиваемой системы для QNX Neutrino. Для

получения дополнительной информации, см. Создание Встраиваемых систем Вы имеете свои целевые аппаратные средства загрузка в Нейтрино, и можете

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

использовать, и его параметры (например, идентификаторы Поставщика и Устройства для видеокарты PCI).

Вы будете использовать систему разработки программ QNX Neutrino, чтобы встроить Ваш внедренный целевой Photon из командной строки, или использовать Системный Составитель программы в интегрированной среде разработки.

ВведениеМикрографический интерфейс пользователя Photon - внедренный Графический интерфейс пользователя. Этот графический интерфейс пользователя составлен из многочисленных процессов, которые используют передачу сообщений Нейтрино, чтобы создать очень чувствительный пользовательский опыт. Photon составлен из этих основных компонентов:

Сервер графических структур QNX (io-display) Сервер Photon (графическое ядро photon) менеджер графической подсистемы и аппаратный драйвер (io-graphics и

связанный драйвер графики) поддержка шрифта (phfont.so и сменные DLL-библиотеки) поддержка ввода (драйвер ввода devi-*) пользовательские приложения.

Сервер графических структур QNXМенеджер io-display оказывает поддержку для прямого рендеринга на устройства графики, используя сервер графических структур QNX и спецификация OpenGL ES.

Сервер PhotonСервер Photon - основной серверный процесс для графического интерфейса пользователя. Этот процесс должен быть первым графическим процессом, запущенным в системе. Он должен обрабатывать создание, отсечение и разрушение регионов, и управлять пространством событий Photon.

Page 2: Photon во встраиваемых системах

Графическая подсистемаЭтот процесс, io-graphics, маркеры Photon рисует поток, и загружает аппаратный драйвер. Этот процесс выполняется перед любыми пользовательскими прикладными процессами. Графическая подсистема делает запрос структуры графики QNX (io-display) для параметров настройки дисплея, а не его собственных параметров настройки командной строки.

Поддержка шрифтовЭтот процесс (phfont.so) и связанные библиотеки используются, чтобы визуализировать и собрать исходные параметры шрифтов. Photon может визуализировать следующие типы шрифтов:

Тип Adobe 1 (.pfa) Тип Adobe 2 (.cff) Bitstream Speedo - общедоступное кодирование только (.spd) Bitstream Stroke (.ffs) Bitstream T2K (.t2k) Bitstream TrueDoc (.pfr) Растровое изображение Photon (.phf) TrueType (.ttf)

Коллекции TrueType (.ttc)

Поддержка устройств вводаЭтот процесс (devi-*) должен обрабатывать пользовательский ввод от мыши, клавиатуры, или сенсорного экрана. Этот процесс поддерживает связь с Вашими входными аппаратными средствами и затем передает события в Photon, которые собраны и поставлены графическим процессам в системе.

Пользовательские приложенияКак только все другие процессы работают, Вы можете запустить пользовательские приложения.

Шаги, чтобы загрузиться в PhotonВот схема шагов, требуемых запустить Photon самостоятельно, во внедренной закрытой системе: Запустите сервер структуры графики. Экспортируйте (как минимум) переменную среды PHOTON_PATH. Запустите сервер Photon. Конфигурируйте свои шрифты. Запустите драйвер графики. Запустите драйвер устройств ввода. Запустите администратор полиэкранного режима, если требуется. Запустите свое приложение (я). Каждый из этих шагов требует, чтобы определенные файлы были установлены в Вашей целевой системе. Предопределяя точно, какое аппаратное обеспечение машинной графики Вы имеете и какие шрифты необходимы Вашим приложениям, Вы можете свести количество файлов (и размер образа) к абсолютному минимуму. Это сокращение размера может в свою очередь оказать позитивное влияние на время запуска Вашей системы.

Page 3: Photon во встраиваемых системах

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

ОсновыШаг 1. Запустите сервер графических структур QNX

Сервер графических структур QNX должен быть загружен перед драйвером графики.

Для получения дополнительной информации о сервере графических структур QNX см. io-display.

Шаг 2. Экспортируйте переменные среды

Переменная среды PHOTON_PATH указывает на основной каталог инсталляции Photon. По умолчанию, этот каталог-/usr/photon. Это местоположение, как ожидают, будет хранить по крайней мере следующие подкаталоги:

font_repository Файлы шрифтов Photon и файлы конфигурации, используемые (независимым от платформы) сервером шрифтов.

palette (независимые от платформы) графические палитры. Эти палитры требуются только, когда Вы выполняете свой драйвер (ы) графики с глубиной цвета 8 битов.

translations от платформы), Эти файлы требуются, только если Ваше приложение (я) обрабатывает non-UTF8 символьные кодировки через PxTranslate * () API.

Вы должны установить переменную среды PHOTON_PATH в buildfile , где Вы устанавливаете другие переменные среды, например PATH:

PHOTON_PATH=/usr/photon

LD_LIBRARY_PATH указывает заданный по умолчанию системный путь поиска файлов для библиотек. Процесс procnto использует свою установку LD_LIBRARY_PATH чтобы инициализировать привилегированную строку конфигурации _CS_LIBPATH, , который ограничивает пути, из которых программы запущенные с привилегией root могут загрузить библиотеки.

Чтобы избежать проблем, при запуске phfont, LD_LIBRARY_PATH должен быть установлен должным образом на строке procnto. Это - особенно истина при использовании интегрированной среды разработки. LD_LIBRARY_PATH needs to be set on the procnto line in the project properties.

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

Page 4: Photon во встраиваемых системах

Шаг 3. Запустите сервер Photon

Если Вам не нужно передавать какие-нибудь параметры командной строки серверу Photon, Вы можете запустить его следующим образом:

Photon

Если Вы запускаете Photon как фоновый процесс (то есть, с амперсандом & после команды), Вы можете удостовериться, что Photon запустился правильно, проверьте, что /dev/photon появляется в файловой системе. Используйте waitfor /dev/photon в вашем buildfile чтобы проверить, что каталог существует.

Если Ваш загрузочный образ является слишком большим, потому что Вы включили Photon или другие выполнимые программы, Вы можете поместить их в другую файловую систему, которую Вы можете смонтировать во время загрузки. Для получения дополнительной информации, см mkifs.

Если Вы работаете над платой, которая имеет доступ к сети и можете установить сетевую файловую систему на Вашей хост-машине, мы рекомендуем, чтобы Вы установили /usr/photon/bin в MKIFS_PATH чтобы mkifs смог найти ее.

Необходимые файлы/usr/photon/bin/Photon

Шаг 4. Конфигурируйте шрифты

Если Вы работаете над платой, которая имеет доступ к сети и может установить сетевую файловую систему на Вашей хост-машине, мы рекомендуем, чтобы Вы установили ${QNX_TARGET}/usr/photon/font_repository как /usr/photon/font_repository через NFS или CIFS. Хотя этот подход использует полную систему шрифтов Photon, он упрощает разработку значительно, и Вы можете настроить внедренные шрифты, позже используя информацию в "Конфигурировании Шрифтов" в разделе "Расширенных возможностей".

Включите следующие библиотеки в Ваш build file; io-graphics загрузит библиотеки шрифтов при своем запуске:

/lib/dll/phfont.so Плагин менеджера шрифтов.

/lib/libfont.so API менеджера шрифтов.

/lib/dll/font/ttfFFcore.so, /lib/dll/font/FCcore.so, и /lib/dll/font/PHFcore.so Рендеринг дополнений к программе. Используйте утилиту использования, чтобы рассмотреть определенную информацию о поддержке этих дополнений к программе.

/lib/libblkcache.so

Page 5: Photon во встраиваемых системах

Дисковая блочная библиотека кэша, используемая ttfFFcore.so, FCcore.so, and PHFcore.so.

/lib/libFF-T2K.so Bitstream FontFusion библиотеки рендеринга, используемые ttfFFcore.so и FCcore.so.

/lib/libFF-T2K-fm.so Bitstream FontFusion библиотека управления шрифтами для коллекций шрифтов (.pfr and ttc), используемые FCcore.so.

/lib/libFF-T2K-cache.so Bitstream FontFusion библиотека управления кэшем шрифтов, используемая FCcore.so и ttfFFcore.so.

/lib/libfontutils.so

Шаг 5. Запустите драйвер графики

Графическая подсистема состоит из io-graphics, аппаратно-зависимого DLL драйвера, и коллекции вспомогательных библиотек. Вы нуждаетесь в следующих компонентах, чтобы выполнить графическую подсистему на целевой системе:

/usr/photon/bin/io-graphics Исполняемая программа графической подсистемы.

/usr/lib/libphrender.so Подпрограммы рендеринга Photon (необходимые gri-photon.so).

/lib/libfont.so Библиотека манипуляции шрифтами (также требуемые приложениями Photon).

/lib/dll/phfont.so Плагин сервера шрифтов.

/usr/photon/palette/file Файл палитры Фотона для целевого дисплея.

/usr/lib/libgf.so Расширенная библиотека графики.

/usr/lib/libph.so Библиотека графики фотона.

/usr/lib/libdisputil.so Библиотека утилит дисплея.

Дополнительно, Вы нуждаетесь в аппаратно-зависимой библиотеке (или драйвер графики). Условно, имена драйвера графики начинаются devg-, например, devg-rage.so.

Большинство драйверов графики зависит от следующих библиотек общего доступа:

/usr/lib/libffb.so.2 Подпрограммы системы восстановления для драйверов графики.

/usr/lib/libdisputil.so.2 Разные утилиты для драйверов графики.

Удостоверьтесь, что все необходимые библиотеки доступны динамическим загрузчиком прежде, чем Вы запустите io-graphics. Используйте переменную окружения LD_LIBRARY_PATH или _CS_LIBPATH строку конфигурации, чтобы указать местоположение библиотек коллективного доступа.

Шаг 5. Запустите драйвер ввода

Page 6: Photon во встраиваемых системах

Обычно в настольной среде, Вы используете inputtrap утилиту, чтобы автоматически генерировать правильную командную строку и вызвать соответствующий devi -* драйвер. Например, он мог бы вызвать devi-hirun следующим образом:

devi-hirun kbd fd -d/dev/kbd msoft fd &Вы обычно выполняете inputtrap потому что Вы не знаете заранее, какова соответствующая командная строка должна быть.

Во встраиваемой системе, однако, Вы обычно определяете командную строку к devi-* драйвер вручную. Это происходит из-за того, что устройства ввода данных часто находятся в необычных местоположениях, неспособны к идентификации PnP, или просто не поддерживаются существующим devi-* драйвером. Кроме того, inputtrap утилита имеет тенденцию быть весьма большой и могла потратить впустую драгоценную память и память в сдержавшей среде. Если выяснение соответствующей команды, чтобы работать оказывается трудным, Вы можете временно установить inputtrap в свой образ (или установить сетевую файловую систему, которая содержит двоичный файл), и используйте его, чтобы генерировать правильную командную строку.

Необходимые файлыСоответствующий devi-* драйвер в/usr/photon/bin

Соответствующая.kbd клавиатура, отображаемая в файлах в /usr/photon/keyboard

Шаг 6. Запустите администратор полиэкранного режима

Администратор полиэкранного режима Фотона (pwm) является опциональным компонентом, который предоставляет Вашей системе функциональные возможности работы с окнами, в которых Вы можете не нуждаться. Если Ваш прикладной пользовательский интерфейс состоит из одной (или больше чем одной) программы, которая всегда заполняет экран, использует парадигму "платы" или "скольжения" (то есть, UI составил из прогрессии расположенных в стеке плат или скольжений, которые программа просматривает), или использует диалоги, которыми Ваше приложение управляет самостоятельно, то Вы вероятно не требуете администратора полиэкранного режима. С другой стороны, если Ваш UI построен, используя одну (или больше чем одну) программу, которая полагается на поведение работы с окнами (например, windows или диалоги, которыми Вы не хотите управлять самостоятельно), тогда pwm - вероятно польза, пригодная для Вашей системы.

Необходимые файлы/usr/photon/bin/pwm

Шаг 7. Запустите свое приложениеЕсли Ваше приложение - отдельная выполнимая программа и не требует администратора полиэкранного режима, Вы можете связаться статически против Связанных с фотоном библиотек (например, libAp.a, libph.a, и libphexlib.a). Компоновка статически избегает потребности включить соответствующие разделяемые компоненты в Ваш образ, и переместит в только символах, нуждавшихся Вашей программой, делая полный меньший образ. Кроме того, у компоновки статически есть добавленное преимущество небольшого сокращения во время выполнения издержек. Если у Вас есть множественные

Page 7: Photon во встраиваемых системах

приложения в Вашем образе (включение pwm), Вы должны всегда связываться против библиотек коллективного доступа и включать их в свой образ. Вы можете использовать утилиту pidin на главной системе, чтобы рассмотреть библиотеки, которых требует компонент приложения или OS. Например, если Вы хотели видеть, что библиотеки, требуемые phcalc, выполняют его на главной системе, и затем выполнить pidin-p phcalc mem.

Интегрированная среда разработки QNX включает инструментальное средство, названное Диетврачом, который сокращает библиотеки коллективного доступа, анализируя выполнимые программы в Вашей системе и удаляя символы, которые не необходимы. Это понимает большинство преимуществ компоновки статически, все еще разрешая библиотекам быть разделенным. Однако, если Ваша система только состоит из одного приложения (и никакой администратор полиэкранного режима), связываясь статически вероятно лучший способ пойти.

Необходимые файлыфайлы Вашего приложения Для линковки с разделенными библиотеками, Вам требуется /usr/lib/libph.so Если Вы используете выполнимые программы, созданные в PhAB, Вы нуждаетесь

в/usr/lib/libap.so. Вы также, возможно, нуждаетесь в/libphexlib.so, если Вы загружаете образы или

делаете языковую трансляцию.

Библиотеки в/usr/photon/lib (*.so.1) предоставлены для во время выполнения совместимости с Фотоном для Нейтрино QNX 6.0 (x86 только). Библиотеки для Нейтрино QNX 6.1 и позже определены в/usr/lib.

ПоясненияСледующее - наблюдения, что некоторые клиенты встретились, перемещая Фотон во встраиваемую систему.

mkifs

По умолчанию, mkifs извлекает имена ресурса PhAB из исполняемых файлов. Чтобы предотвратить это, определите атрибут +raw для всех приложений Photon Application Builder. Например:

[+raw]/usr/photon/bin/phcalc

Вы можете запустить утилиту strip сначала непосредственно на приложениях Photon Application Builder.

Перепрограммируемые файловые системыСледующие перепрограммируемые свойства файловой системы затрагивают, как Вы конфигурируете Фотон:

Page 8: Photon во встраиваемых системах

Сжатие и Скорость Выполнимым программам PhAB, по умолчанию, связывали свои ресурсы в исполняемый файл в конце двоичных данных. Так как перепрограммируемая файловая система медленнее, когда она будет искать в сжатом файле, Вы будете вероятно хотеть вести учет ресурса в отдельном файле, вместо того, чтобы включить их в конце двоичного файла. Чтобы сделать это, измените makefile так, чтобы ресурсы были связаны к отдельному файлу. Например, измените следующую зависимость $(ABOBJ) $(MYOBJ)$(LD) $(LDFLAGS) $(ABOBJ) $(MYOBJ) -M -o mineusemsg mine ../Usemsgphabbind mine $(ABMOD)

на:

$(ABOBJ) $(MYOBJ)$(LD) $(LDFLAGS) $(ABOBJ) $(MYOBJ) -M -o mineusemsg mine ../Usemsgphabbind mine.res $(ABMOD)

Когда Ваша выполнимая программа начата, библиотека PhAB (libAp.so) автоматически находит файл ресурсов, если следующим критериям отвечают:

1. У файла ресурсов есть тот же самый basename как двоичный файл, с расширением.res

2. Файл ресурсов находится в том же самом каталоге как двоичный файл.

Если Вы хотите группировать Ваши файлы ресурсов в отдельном каталоге, Вы можете. Поместите их в каталог, определенный экспортируемой переменной среды AB_RESOVRD, и библиотека PhAB будет искать их там. Наименование файлов ресурсов должно встретить первый критерий, упомянутый выше.

ГрафикаМного встраиваемых систем испытывают недостаток в компонентах, которые типичны на x86 настольной машине, например, BIOS ROM. Поскольку многие из modeswitchers, которые поддерживает Фотон, требуют, чтобы видео базовая система ввода-вывода позволила им переключать графические режимы, Вы, возможно, нуждаетесь в базовой системе ввода-вывода на плате. Сверьтесь с нами, чтобы видеть, доступна ли версия небазовой системы ввода-вывода.

РазноеВот некоторые другие рассмотрения: Скорость центрального процессора

Для некоторых встраиваемых систем производительность центрального процессора будет медленнее чем настольный компьютер. Вы будете хотеть рассмотреть это, когда Вы проектируете свои приложения Photon для внедренной среды.

Прокрутка Если страницы области прокрутки вниз больше чем одна страница в то время, когда Вы нажимаете в корыте, попытайтесь увеличить значение задержки повторения мыши Фотона. Например: Photon -D1000 &

Page 9: Photon во встраиваемых системах

Ввод Вы можете установить параметры дросселирования и на Вводе и на Сервере Фотона. Уменьшая скорость, на которой выпущены события от нажатия мыши, Вы можете уменьшить трафик через систему Фотона. На более медленных 386 и 486 платформах он - обычная практика, чтобы понизить дросселирование на вводе к 10 или 20 мс.

Phindows и Phditto

Если Ваше целевое приложение должно поддержать удаленную диагностику или от Phindows или от phditto, Вы также должны установить phrelay выполняющуюся

библиотеку, и файл конфигурации служб.

ПримерДавайте смотреть на шаги, вовлеченные во внедрение Фотона для использования во встраиваемой системе, создавая простой buildfile, который содержит несколько простых приложений Photon. Наша цель состоит в том, чтобы встроить систему Фотона со следующими минимальными возможностями, которая удовлетворяет требованиям нашей системы:

масштабируемые шрифты TrueType - наименьший набор, доступный требуемый для Ваших приложений

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

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

Анализ необходимых двоичных файлов Анализ необходимых библиотек (.so) Анализ необходимых шрифтов Соединение всего этогоПроблемы

Необходимые двоичные файлыПервый шаг предполагает выяснение всех двоичных файлов, требуемых для выполнения Фотона. Вы можете видеть все, что он работает на полной системе. Выполните Фотон на своем PC, и смотрите на вывод комманды pidin arg.

От того списка Вы нуждаетесь в только нескольких из программ:

Photon — процесс, который реализует ядро работы с окнами phfont and phfont.so — сервер шрифтов

io-graphics — графическая подсистема рендеринга

Page 10: Photon во встраиваемых системах

pwm — - предоставляет управление окнами

devi-hirun — драйвера мыши/сенсорного экрана и клавиатуры

Сохраните список параметров на Вашу систему в файле. Мы будем нуждаться в том выводе позже.

Необходимые библиотекиНа этой встраиваемой системе Вы хотите только упомянутые выше компоненты, плюс Вы выполните несколько простых приложений:

phcalc - калькулятор pterm - оконечное приложение

Выполните приложения, затем смотрите на вывод команды pidin mem. Распечатка окончания говорит Вам каждую библиотеку, что Вы должны сделать доступным к встраиваемой системе. Для драйвера графики Вы будете использовать драйвер стандартного SVGA (devg-svga.so). Таким образом Вы нуждаетесь в следующих библиотеках (по крайней мере):

ldqnx.so.2 - псевдоним для libc.so libph.so.3 libphexlib.so.3 libphrender.so.2 libffb.so.2 libdisputil.so.2 libAp.so.3 libm.so.2 devg-svga.so

Необходимые шрифтыТеперь давайте смотреть на шрифты. Иногда приложение ожидает специфичный шрифт, и кодирует непосредственно к тому шрифту. Если дело обстоит так, Вы должны явно включить каждый шрифт, в котором нуждается Ваше приложение. Если Вы стандартизируете на определенной семье/стиле шрифтов или если Вы не заботитесь, какой точный шрифт Вы имеете (пока размер хорошо), то Вы можете сократить число шрифтов и использовать один шрифт, чтобы заменить несколько других семей шрифтов. Например, Вы можете использовать Times как замену для Helvetica и Courier.

В этом примере, потому что Вы используете несколько простых приложений, и потому что Вы пытаетесь создать наименьший возможный образ, Вы нуждаетесь только в двух шрифтах: и обычная версия TrueType фиксированной ширины Prima Sans. Теперь хорошее время, чтобы создать область игры на Вашей системе, чтобы начать тестировать встраиваемую систему, и собирать требуемые файлы.

Создайте подкаталог, названный phembed в Вашем основном каталоге (или какой бы ни каталог Вы желаете сохранить Ваши исходные файлы). В пределах того каталога, создайте эти подкаталоги:

Page 11: Photon во встраиваемых системах

Теперь назад к шрифтам. В этом примере Вы хотите использовать primasansmonobts шрифт TrueType для всего. Вы будете также хотеть использовать мышь, таким образом Вы будете включать phcursor.phf файл.

Вот файлы, в которых Вы нуждаетесь:

fontdir (автоматически сгенерированный утилитой mkfontdir) fontmap

fontext

fontopts

phcursor.phf

tt2009m_.ttf

Скопируйте эти файлы (кроме fontdir) из/usr/photon/font_repository в/phembed/font_repository, затем измените каталоги на/phembed/font_repository. Вы должны изменить fontmap и fontopts файлы, чтобы отразить шрифты, опции и отображения, которые Вы хотите для своей встраиваемой системы. Вы можете редактировать эти файлы вручную (см. phfont для получения дополнительной информации о структуре этих файлов). В нашем случае удостовертесь, что fontmap файл содержит:

? = primasansmonobts

Это гарантирует, что все неизвестные шрифты будут заменены primasansmonobts шрифтом, предоставленным в tt2009m_.ttf файле.

Чтобы генерировать fontdir, используйте mkfontdir следующим образом:

mkfontdir -d /phembed/font_repository

Удостоверьтесь, что строка LD_LIBRARY_PATH в Вашем файле типа "build" содержит строку/lib/dll.

Соединение всего этогоТеперь давайте помещать все части, в которых Вы нуждаетесь на место и создадим buildfile для своей внедренной системы Фотона. Выполните mkifs, чтобы создать образ.

Для выборки buildfile, который включает больше компонентов Фотона, например, фонового менеджера bkgmgr

В реальном buildfile, Вы не можете использовать наклонную черту влево (\), чтобы прервать длинную линию на более короткие части, но мы сделали это здесь, только сделать buildfile более легкое для чтения.

[image=0x88010000][virtual=shle/binary +compress] .bootstrap = {

startup-sdk7785 -Dscif..115200.1843200.16 -f600000000 -v

Page 12: Photon во встраиваемых системах

[+keeplinked] PATH=/proc/boot:/bin:/sbin:/usr/bin:/opt/bin: \/usr/sbin:/usr/photon/bin \ LD_LIBRARY_PATH=/proc/boot:/lib::/usr/lib:/lib/dll:/opt/lib: \ /usr/photon/lib:/usr/photon/dll \ PHOTON_PATH=/usr/photon procnto -v

}

[+script] .script = {procmgr_symlink ../../proc/boot/libc.so.3 /usr/lib/ldqnx.so.2

display_msg Welcome to QNX Neutrino 6.4.0 on the Renesas SDK7785################################################################ SERIAL driver##############################################################display_msg Starting serial driverdevc-sersci -e -F -x -b115200 -c1843200/16 scif1 &waitfor /dev/ser1reopen /dev/ser1

sloggerpipe

################################################################ NOR FLASH driver SDK 7785############################################################### Flash only recognized as a single bank 4*2 array. Single driver# Used to access both banks. Care must be taken when toggling# bank select as the base address will switch between banks.############################################################### devf-edosk7780 -s0x0,128M

################################################################ NETWORK driver (tiny stack) SDK 7785## - substitute your IP address for x.x.x.x##############################################################display_msg "Starting network with full tcp stack..."io-pkt-v4 -dsmc9118 ioport=0x15800000,irq=6 -ptcpip waitfor /dev/socket 15waitfor /dev/io-net/en0

if_up -r 10 -p en0display_msg "Setting ip address to XXX.XX.X.XX..."ifconfig en0 XXX.XX.X.XX up netmask 0xffffff00if_up -a en0 lo0

display_msg Starting fs-nfs2

setconf DOMAIN domain.name.com

################################################################ PCI server##############################################################display_msg "Starting pci-edosk7780..."pci-edosk7780

display_msg "Starting devc-pty..."devc-ptywaitfor /dev/ptyp0 4waitfor /dev/socket 4qconn port=8000

Page 13: Photon во встраиваемых системах

display_msg "Setting enviroment variables..."SYSNAME=ntoTERM=qansiHOSTNAME=gsdk7785HOME=/rootPATH=:/proc/boot:/bin:/sbin:/opt/bin:/usr/sbin:/usr/bin:/usr/photon/

bin

LD_LIBRARY_PATH=:/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib:/usr/photon/ \lib:/usr/photon/dllPHOTON=/dev/photonPHOTON_PATH=/usr/photonPHOTON_PATH2=/usr/photonPHFONT=/dev/phfontMMEDIA_MIDI_CFG=/etc/config/media/midi.cfg

display_msg "Starting io-display..."

io-display -dvid=0x10cf,did=0x201ewaitfor /dev/io-display

display_msg "Starting Photon..."Photon &waitfor /dev/photon 10

display_msg "Starting io-graphics..."io-graphics &waitfor /dev/phfont 10

display_msg "Starting Window Manager..."pwm &

devc-pty &

display_msg "Starting Terminal"pterm /proc/boot/ksh &

# inetd &

[+session] ksh &}

[type=link] /bin/sh=/proc/boot/ksh[type=link] /dev/console=/dev/ser1[type=link] /tmp=/dev/shmem

libc.solibc.so.2libm.so

##################################################################### uncomment for NETWORK driver (tiny stack)###################################################################devn-smc9118.sodevnp-shim.solibsocket.so

[data=c]devc-serscisetconf##################################################################### uncomment for NOR FLASH driver

Page 14: Photon во встраиваемых системах

################################################################### devf-edosk7780 flashctl

##################################################################### uncomment for PCI server###################################################################pci-edosk7780pcipipe

##################################################################### uncomment for NETWORK driver###################################################################io-pkt-v4pingcatifconfignetstatnicinfosleep

##################################################################### uncomment for REMOTE_DEBUG (gdb or Momentics)###################################################################devc-ptyqconn/usr/bin/pdebug=pdebug

##################################################################### general commands###################################################################lskshpipepidinunamesloggersloginfoslayfs-nfs3fs-nfs2if_upfs-cifsmountumount

############################################################################# uncomment for GF io-display###########################################################################/sbin/io-display=io-display

/etc/system/config/display.conf=/usr/qnx640/target/qnx6/etc/system/config/ \display.conf/etc/system/config/img.conf=/usr/qnx640/target/qnx6/etc/system/config/ \img.conf

############################################################################# uncomment for GF libraries###########################################################################/lib/dll/devg-soft3d.so=devg-soft3d.so/lib/dll/devg-coral.so=devg-coral.so

Page 15: Photon во встраиваемых системах

/lib/libFF-T2K.a=libFF-T2K.a/lib/libFF-T2K.so.2=libFF-T2K.so.2/lib/libimg.so=libimg.so

/usr/lib/libGLES_CM.so.1=libGLES_CM.so.1/usr/lib/libffb.so.2=libffb.so.2/usr/lib/libgf.so=libgf.so

############################################################################# uncomment for GF image support###########################################################################/lib/dll/img_codec_bmp.so=img_codec_bmp.so/lib/dll/img_codec_gif.so=img_codec_gif.so/lib/dll/img_codec_jpg.so=img_codec_jpg.so/lib/dll/img_codec_png.so=img_codec_png.so/lib/dll/img_codec_sgi.so=img_codec_sgi.so/lib/dll/img_codec_tga.so=img_codec_tga.so

############################################################################# uncomment for GF binaries###########################################################################/bin/egl-gears=egl-gears/bin/vsync=vsync

/lib/dll/font/ttfFFcore.so = ${QNX_TARGET}/shle/lib/dll/font/ttfFFcore.so/lib/dll/font/PHFcore.so = ${QNX_TARGET}/shle/lib/dll/font/PHFcore.so/lib/dll/font/FCcore.so = ${QNX_TARGET}/shle/lib/dll/font/FCcore.solibfontutils.solibblkcache.solibFF-T2K.solibFF-T2K-cache.solibFF-T2K-fm.solibfont.sophfont.so

######################################## Photon LIbs######################################Photon[+raw] /usr/photon/bin/pterm = pterm[+raw] /usr/photon/bin/phcalc = phcalc

io-graphicspwmlibph.solibAp.solibphexlib.solibdisputil.solibffb.solibphrender.so

############################################################################ font config##########################################################################/usr/photon/font_repository/tt2009m_.ttf = \/usr/photon/font_repository/tt2009m_.ttf/usr/photon/font_repository/phcursor.phf = \/usr/photon/font_repository/phcursor.phf/usr/photon/font_repository/pcterm12.phf = \/usr/photon/font_repository/pcterm12.phf/usr/photon/font_repository/fontopts = /usr/photon/font_repository/fontopts/usr/photon/config/wm/wm.menu = /usr/photon/config/wm/wm.menu

Page 16: Photon во встраиваемых системах

/usr/photon/font_repository/fontdir = {;; fontdir config file;pcterm12,.phf,PC Terminal,12,,0000-00FF,Nf,6x12,13Kphcursor,.phf,Photon Cursor,0,,E900-E921,Np,32x32,3Kprimasansmonobts,0@tt2009m_.ttf,PrimaSansMono BT,0,,0020-F002,f,79x170,109K}

/usr/photon/font_repository/fontext = {;; fontext config file;+normal = primasansmonobts, phcursor}

/usr/photon/font_repository/fontmap = {;; fontmap config file;? = primasansmonobts}

/usr/photon/config/coral.conf=${QNX_TARGET}/usr/photon/config/coral.conf/etc/system/config/crtc-settings=/etc/system/config/crtc-settings/usr/photon/palette/default.pal=/usr/photon/palette/default.pal

# allow pterm to save its configuration to RAM, if the user changes it.[type=link] /.ph/pterm = /dev/shmem[type=link] /.ph/wm/wm.cfg = /dev/shmem

Примечание: неотступно следование за buildfile: Вы устанавливает переменные среды PATH, LD_LIBRARY_PATH, и

PHOTON_PATH. Прохождение LD_LIBRARY_PATH к procnto устанавливает привилегированную строку конфигурации _CS_LIBPATH.

Вы связываете libc.so.3 и ldqnx.so.2, потому что они - та же самая библиотека. Вы вызываете Фотон, затем ждете/dev/photon, чтобы указать, что сервер Photon

работает. Вы используют inputtrap, чтобы обнаружить устройства ввода данных и

конфигурировать devi-hirun. Это делает buildfile совместимое с большинством устройств ввода данных. Для меньшего загрузочного образа, определите правильные параметры для входного драйвера, и запустите его непосредственно.

После того, как система запускает io-graphics, Вы проверяете, что сервер шрифта работает правильно (waitfor/dev/phfont).

Вы определяете, куда библиотеки и двоичные файлы должны быть помещены в цель (по умолчанию, они помещены в/proc/boot).

Некоторые библиотеки от настроенного библиотечного каталога в phembed каталоге (./lib), в то время как другие от главной системы (например,/usr/lib/libdisputil.so.2).

Вы используете [+raw] директиву для приложений PhAB так, чтобы mkifs не удалил необходимую информацию о ресурсе из этих файлов.

Диагностика

Page 17: Photon во встраиваемых системах

1. Когда я запускаю io-graphics, он, кажется, работает, но ничто не появляется на экране. Проверьте системный файл регистрации; io-graphics, возможно, отправил сообщения об ошибках системному регистратору, slogger. Чтобы отладить проблему, удостоверьтесь, что slogger работает прежде, чем запустить драйвер графики. Используйте sloginfo, чтобы отобразить системные журнальные сообщения.

2. Когда я запускаю приложение, он выходит с сообщением Ap: Unable to locate Photon. Удостоверьтесь, что и сервер Photon и менеджер шрифта работают. Вы можете определить, работают ли они, удостоверяясь, что/dev/photon и/dev/phfont существуют.

3. Когда я запускаю приложение, он выходит с сообщением Ap: Unable to open resource file.

Если Вы включите приложение, которое было встроено PhAB в образе, созданном mkifs, то немного информации будет сокращено, так как mkifs делает очень агрессивную двоичную полосу. Вы можете избежать этого, используя атрибут +raw; см. mkifs документацию для получения дополнительной информации. Начиная с установки атрибута заставит приложение не быть удаленным, Вы, возможно, хотите использовать утилиту полосы, чтобы вручную извлечь двоичный файл прежде, чем встроить образ, уменьшить размер образа..

Расширенные возможностиЭтот раздел охватывает некоторые большего количества расширенных возможностей во внедрении Фотона. Он охватывает:

Конфигурирование шрифтов

Конфигурирование шрифтовКонфигурирование шрифтов и устанавливая компоненты сервера шрифта в правильное местоположение является самой трудной частью внедрения Фотона. Чтобы конфигурировать систему шрифта, Вы нуждаетесь:

1. решите, выполнить ли внутренний или внешний сервер шрифтов 2. определите, каких шрифтов Ваша система требует 3. определите требуемые двоичные файлы шрифтов 4. установите файлы конфигурации шрифтов.

Внутренний или внешний?Первое решение, которое Вы должны принять о сервисе шрифта, состоит в том, как сервер начат. Он может работать как автономный процесс (мы именуем это как внешний сервер), или как дополнение к программе к io-graphics (который мы вызываем внутренним сервером). Мы рекомендуем выполнить внешний сервер в этих условиях:

Ваша система не будет выполнять io-graphics. Ваша система будет использоваться как сервер для удаленных сеансов фотона. Ваша система будет перезапускать io-graphics.

Page 18: Photon во встраиваемых системах

Чтобы выполнить внешний сервер шрифтов, запустите phfont перед io-graphics. Чтобы выполнить встроенный сервер шрифтов, просто запустите io-graphics, используя опцию -f local. Необходимые шрифтыВстраивая встраиваемую систему, Вы также должны принять осторожные решения об уровне поддержки шрифта, включая, в каких шрифтах Вы нуждаетесь, и нуждаетесь ли Вы в масштабируемых шрифтах, так как дополнительные шрифты делают для большего размера образа и потенциально более длинное время запуска. Первый шаг должен решить, в каких шрифтах Вы нуждаетесь:

Вы, очень вероятно, будете нуждаться в шрифте курсора, phcursor.phf, поскольку драйвер графики требует, чтобы он выполнил стандартные курсоры Фотона.

Если Ваша встраиваемая система включает pterm , Вы нуждаетесь в оконечных шрифтах поддержки, PC Terminal (pcterm*.phf), PC Serif (pcs*.phf), и PC Sanserif (pcss*.phf) семейства шрифтов. Вы вероятно также нуждаетесь в $HOME/.photon/pterm.rc файле, или $PHOTON_PATH/config/pterm.rc файле, чтобы конфигурировать оконечный шрифт.

Большинство основанных на виджетах приложений ожидают, что эти псевдонимы будут определены, будучи соответственно отображенным в fontmap файле (см. ниже):

o TextFont o MenuFont o FixedFont o BalloonFont o TitleFont

web-браузер требует этих типов шрифтов: o body font (e.g. PrimaSans BT, Dutch 801 Rm BT) o heading font (e.g. Swis721 BT) o nonproportional font (e.g. Courier10 BT, PrimaSansMono BT)

Проверьте конфигурацию браузера, чтобы видеть, какие шрифты ожидаются, и используют те шрифты, изменяя конфигурацию, чтобы отразить то, что Вы установили, или используете fontmap файл, чтобы отобразить их во время выполнения. Вы можете отобразить, или занять место, имена шрифта, используя fontmap файл. Для получения дополнительной информации по формату fontmap и других файлов конфигурации шрифта, см. phfont. Необходимые двоичные файлы шрифтовВы можете быть в состоянии сократить количество двоичных файлов, требуемых системой шрифтов Фотона, в зависимости от типов шрифтов, которые Вы должны отобразить на своей целевой системе. У каждого типа шрифта есть связанные плагины, которое поддерживает тот тип, и каждый плагин в свою очередь требует дополнительных библиотек. Каждое плагин требует libblkcache.so и libc.so. Следующая таблица показывает необходимые плагины и библиотеки для шрифтов:

Fonts supported Plugin Required libs

Bitstream TrueDoc (.pfr)TrueType collections (.ttc)

FCcore.so libFF-T2K-fm.solibFF-T2K-cache.solibFF-T2K.so

Photon bitmap (.phf) PHFcore.so libfontutils.so

TrueType (.ttf), Adobe Type1 (.pfa), Adobe Type2 ttfFFcore.so libFF-T2K-

Page 19: Photon во встраиваемых системах

(.cff), Bitstream Stroke (.ffs), Bitstream Speedo (.spd, public encryption only), Bitstream T2K (.t2k)

cache.solibFF-T2K.so

Вы можете использовать-b опцию командной строки для phfont или io-graphics, чтобы генерировать отчет об использовании шрифта. Файл отчета содержит информацию об именах шрифта и файлах шрифта, используемых Вашим приложением, в то время как сервер шрифта работал. Это позволяет Вам помещать единственные необходимые шрифты и DLL-библиотеки на Вашей целевой системе. Обратите внимание, что отчет об использовании шрифта не содержит запись динамически нагруженных шрифтов (см. PfDynamicLoad * () набор функций).

Конфигурирование сервера шрифтовСистема шрифтов конфигурирована с различными файлами. Минимальная конфигурация требует:

fontdir - каталог известных шрифтов. Этот файл должен перечислить каждый шрифт в Вашей встраиваемой системе.

Рекомендуемые дополнительные файлы конфигурации: fontmap - ряд правил подстановки шрифтов fontext - правила символов missing/dropout fontopts - опции конфигурации

Для получения дополнительной информации о формате каждого из этих файлов, см. phfont.

Вы можете конфигурировать шрифты на встраиваемой системе непосредственно, но он легче использовать Вашу систему разработки программ, чтобы сконфигурировать шрифты, для воспроизведения заданной конфигурации на встраиваемой системе, затем транслировать файлы данных и конфигурации шрифта в соответствующую Внедренную Файловую систему (EFS), создавая каталоги образа.

Если Вы используете самохостившую систему разработки программ, чтобы имитирования целевой, то сервер шрифтов может помочь в определении, в каких шрифтах Вы нуждаетесь, регистрируя сбойные запросы на шрифты, которые не отображены (явно или иначе). См. phfont для получения дополнительной информации.

Во встраиваемой системе только с несколькими приложениями, возможно, что Вы будете нуждаться в гораздо меньшем количестве шрифтов, чем требует настольная система. В этой ситуации Вы можете обойтись минимальными файлами конфигурации (все расположены в/usr/photon/font_repository): fontdir

Этот файл должен перечислить только шрифты, которые Вы устанавливаете в/usr/photon/font_repository. Вы можете редактировать этот файл одним из двух способов:

Редактировать заданный по умолчанию существующий fontdir файл вручную, удаляя все строки, которые ссылаются на шрифты, которые Вы не включаете в свой образ.

Или:

Page 20: Photon во встраиваемых системах

Сгенерировать этот файл, используя mkfontdir утилиту (на всех главных компьютерах).

fontext Сделайте копию заданного по умолчанию файла и редактируйте его.

fontmap Сделайте копию заданного по умолчанию файла и редактируйте его. Этот файл может состоять из одиночной строки: ? =primasansbts

(Если Вы не включаете BT PrimaSans в свой образ, изменяете это на имя шрифта, Вы хотите использовать как значение по умолчанию).

Генерируйте этот файл, используя mkfontdir утилиту (на всех главных компьютерах).

fontext Сделайте копию заданного по умолчанию файла и редактируйте его.

fontmap Сделайте копию заданного по умолчанию файла и редактируйте его. Этот файл может состоять из одиночной линии: ? =primasansbts

(Если Вы не включаете BT PrimaSans в свой образ, изменяете это на имя шрифта, Вы хотите использовать как значение по умолчанию)