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.
Графическая подсистема Этот процесс, 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. • Конфигурируйте свои шрифты. • Запустите драйвер графики. • Запустите драйвер устройств ввода. • Запустите администратор полиэкранного режима, если требуется. • Запустите свое приложение (я). Каждый из этих шагов требует, чтобы определенные файлы были установлены в Вашей целевой системе. Предопределяя точно, какое аппаратное обеспечение машинной графики Вы имеете и какие шрифты необходимы Вашим приложениям, Вы можете свести количество файлов (и размер образа) к абсолютному минимуму. Это сокращение размера может в свою очередь оказать позитивное влияние на время запуска Вашей системы.
Мы пройдем через все шаги подробно и обсудим файлы, необходимые для каждого шага. В конце этого процесса Вы должны знать точно, какие файлы 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 указывает на заданный по умолчанию системный путь поиска файлов для двоичных файлов. Вы должны заставить его включать каталоги в Ваш встраиваемый изображение, которые содержат двоичные файлы. Эти параметры настройки применяются к любому загрузочному образу.
Шаг 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
Дисковая блочная библиотека кэша, используемая 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. Запустите драйвер ввода Обычно в настольной среде, Вы используете 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). Компоновка статически избегает потребности включить соответствующие разделяемые компоненты в Ваш образ, и переместит в только символах, нуждавшихся Вашей программой, делая полный меньший образ. Кроме того, у компоновки статически есть добавленное преимущество небольшого сокращения во время выполнения издержек. Если у Вас есть множественные приложения в Вашем образе (включение pwm), Вы должны всегда связываться против библиотек коллективного доступа и включать их в свой образ.
Вы можете использовать утилиту pidin на главной системе, чтобы рассмотреть библиотеки, которых требует компонент приложения или OS. Например, если Вы хотели видеть, что библиотеки, требуемые phcalc, выполняют его на главной системе, и затем выполнить pidin-p phcalc mem. Интегрированная среда разработки QNX включает инструментальное средство, названное Диетврачом, который сокращает библиотеки коллективного доступа, анализируя выполнимые программы в Вашей системе и удаляя символы, которые не необходимы. Это понимает большинство преимуществ компоновки статически, все еще разрешая библиотекам быть разделенным. Однако, если Ваша система только состоит из одного приложения (и никакой администратор полиэкранного режима), связываясь статически вероятно лучший способ пойти.
Необходимые файлы • файлы
Вашего приложения
• Для линковки
с разделенными библиотеками, Вам требуется /usr/lib/libph.so
• Если Вы используете выполнимые в/usr/lib/libap.so.
программы, созданные в PhAB, Вы нуждаетесь
• Вы
также, возможно, нуждаетесь в/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.
Перепрограммируемые файловые системы Следующие перепрограммируемые свойства файловой системы затрагивают, как Вы конфигурируете Фотон: Сжатие и Скорость Выполнимым программам PhAB, по умолчанию, связывали свои ресурсы в исполняемый файл в конце двоичных данных. Так как перепрограммируемая файловая система медленнее, когда она будет искать в сжатом файле, Вы будете
вероятно хотеть вести учет ресурса в отдельном файле, вместо того, чтобы включить их в конце двоичного файла. Чтобы сделать это, измените makefile так, чтобы ресурсы были связаны к отдельному файлу. Например, измените следующую зависимость $(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)
Когда Ваша выполнимая программа начата, библиотека PhAB (libAp.so) автоматически находит файл ресурсов, если следующим критериям отвечают: 1. У файла ресурсов есть тот же самый basename как двоичный файл, с расширением.res 2. Файл ресурсов находится в том же самом каталоге как двоичный файл. Если Вы хотите группировать Ваши файлы ресурсов в отдельном каталоге, Вы можете. Поместите их в каталог, определенный экспортируемой переменной среды AB_RESOVRD, и библиотека PhAB будет искать их там. Наименование файлов ресурсов должно встретить первый критерий, упомянутый выше.
Графика Много встраиваемых систем испытывают недостаток в компонентах, которые типичны на x86 настольной машине, например, BIOS ROM. Поскольку многие из modeswitchers, которые поддерживает Фотон, требуют, чтобы видео базовая система ввода-вывода позволила им переключать графические режимы, Вы, возможно, нуждаетесь в базовой системе ввода-вывода на плате. Сверьтесь с нами, чтобы видеть, доступна ли версия небазовой системы ввода-вывода.
Разное Вот некоторые другие рассмотрения: Скорость центрального процессора Для некоторых встраиваемых систем производительность центрального процессора будет медленнее чем настольный компьютер. Вы будете хотеть рассмотреть это, когда Вы проектируете свои приложения Photon для внедренной среды. Прокрутка Если страницы области прокрутки вниз больше чем одна страница в то время, когда Вы нажимаете в корыте, попытайтесь увеличить значение задержки повторения мыши Фотона. Например: Photon -D1000 &
Ввод Вы можете установить параметры дросселирования и на Вводе и на Сервере Фотона. Уменьшая скорость, на которой выпущены события от нажатия мыши, Вы можете уменьшить трафик через систему Фотона. На более медленных 386 и 486
платформах он - обычная практика, чтобы понизить дросселирование на вводе к 10 или 20 мс. Phindows и Phditto Если Ваше целевое приложение должно поддержать удаленную диагностику или от Phindows или от phditto, Вы также должны установить phrelay выполняющуюся библиотеку, и файл конфигурации служб.
Пример Давайте смотреть на шаги, вовлеченные во внедрение Фотона для использования во встраиваемой системе, создавая простой buildfile, который содержит несколько простых приложений Photon. Наша цель состоит в том, чтобы встроить систему Фотона со следующими минимальными возможностями, которая удовлетворяет требованиям нашей системы: • масштабируемые
шрифты TrueType - наименьший набор, доступный требуемый для Ваших приложений
• минимальные файлы •
необходимые для выполнения драйвера графики
поддержку ввода для мыши и клавиатуры
• администратор
полиэкранного режима, чтобы обработать множественные приложения Photon.
Обратите внимание, что администратор полиэкранного режима строго не требуется для встраиваемой системы, но мы будем включать, чтобы сделать наш пример более легким для использования. Мы будем следовать за этими шагами: • Анализ необходимых двоичных файлов • Анализ необходимых библиотек (.so) • Анализ необходимых шрифтов • Соединение всего этого • Проблемы
Необходимые двоичные файлы Первый шаг предполагает выяснение всех двоичных файлов, требуемых для выполнения Фотона. Вы можете видеть все, что он работает на полной системе. Выполните Фотон на своем PC, и смотрите на вывод комманды pidin arg. От того списка Вы нуждаетесь в только нескольких из программ: — процесс, который реализует ядро работы с окнами and phfont.so — сервер шрифтов
• •
Photon phfont
•
io-graphics
•
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 в Вашем основном каталоге (или какой бы ни каталог Вы желаете сохранить Ваши исходные файлы). В пределах того каталога, создайте эти подкаталоги: Теперь назад к шрифтам. В этом примере Вы хотите использовать primasansmonobts шрифт TrueType для всего. Вы будете также хотеть использовать мышь, таким образом Вы будете включать phcursor.phf файл.
Вот файлы, в которых Вы нуждаетесь: (автоматически сгенерированный утилитой mkfontdir)
• •
fontdir 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 [+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 driver devc-sersci -e -F -x -b115200 -c1843200/16 scif1 & waitfor /dev/ser1 reopen /dev/ser1 slogger pipe ############################################################## ## 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 15 waitfor /dev/io-net/en0 if_up -r 10 -p en0 display_msg "Setting ip address to XXX.XX.X.XX..." ifconfig en0 XXX.XX.X.XX up netmask 0xffffff00 if_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-pty waitfor /dev/ptyp0 4 waitfor /dev/socket 4 qconn port=8000 display_msg "Setting enviroment variables..." SYSNAME=nto TERM=qansi HOSTNAME=gsdk7785 HOME=/root PATH=:/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/dll PHOTON=/dev/photon PHOTON_PATH=/usr/photon PHOTON_PATH2=/usr/photon PHFONT=/dev/phfont MMEDIA_MIDI_CFG=/etc/config/media/midi.cfg display_msg "Starting io-display..." io-display -dvid=0x10cf,did=0x201e waitfor /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.so libc.so.2 libm.so ################################################################### ## uncomment for NETWORK driver (tiny stack) ################################################################### devn-smc9118.so devnp-shim.so libsocket.so
[data=c] devc-sersci setconf ################################################################### ## uncomment for NOR FLASH driver ################################################################### devf-edosk7780 flashctl ################################################################### ## uncomment for PCI server ################################################################### pci-edosk7780
pci pipe ################################################################### ## uncomment for NETWORK driver ################################################################### io-pkt-v4 ping cat ifconfig netstat nicinfo sleep ################################################################### ## uncomment for REMOTE_DEBUG (gdb or Momentics) ################################################################### devc-pty qconn /usr/bin/pdebug=pdebug ################################################################### ## general commands ################################################################### ls ksh pipe pidin uname slogger sloginfo slay fs-nfs3 fs-nfs2 if_up fs-cifs mount umount ########################################################################### ## 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 /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.so libfontutils.so libblkcache.so libFF-T2K.so libFF-T2K-cache.so libFF-T2K-fm.so libfont.so phfont.so ###################################### ## Photon LIbs ###################################### Photon [+raw] /usr/photon/bin/pterm = pterm [+raw] /usr/photon/bin/phcalc = phcalc io-graphics pwm libph.so libAp.so libphexlib.so libdisputil.so libffb.so libphrender.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 /usr/photon/font_repository/fontdir = { ; ; fontdir config file ; pcterm12,.phf,PC Terminal,12,,0000-00FF,Nf,6x12,13K phcursor,.phf,Photon Cursor,0,,E900-E921,Np,32x32,3K primasansmonobts,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).
• Некоторые библиотеки от настроенного библиотечного (./lib), в то время как другие от главной системы (например,/usr/lib/libdisputil.so.2). •
каталога в phembed каталоге
Вы используете [+raw] директиву для приложений PhAB так, чтобы mkifs не удалил необходимую информацию о ресурсе из этих файлов.
Диагностика 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.
Чтобы выполнить внешний сервер шрифтов, запустите 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.so libFF-T2Kcache.so libFF-T2K.so
Photon bitmap (.phf)
PHFcore.so
libfontutils.so
TrueType (.ttf), Adobe Type1 (.pfa), Adobe Type2 (.cff), Bitstream Stroke (.ffs), Bitstream Speedo (.spd, public encryption only), Bitstream T2K (.t2k)
libFF-T2KttfFFcore.so cache.so libFF-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 файл вручную, удаляя все строки, которые ссылаются на шрифты, которые Вы не включаете в свой образ.
Или: • Сгенерировать
этот файл, используя mkfontdir утилиту (на всех главных компьютерах).
fontext
Сделайте копию заданного по умолчанию файла и редактируйте его.
fontmap
Сделайте копию заданного по умолчанию файла и редактируйте его. Этот файл может состоять из одиночной строки: ? =primasansbts
(Если Вы не включаете BT PrimaSans в свой образ, изменяете это на имя шрифта, Вы хотите использовать как значение по умолчанию). • Генерируйте
этот файл, используя mkfontdir утилиту (на всех главных компьютерах).
fontext
Сделайте копию заданного по умолчанию файла и редактируйте его.
fontmap
Сделайте копию заданного по умолчанию файла и редактируйте его. Этот файл может состоять из одиночной линии: ? =primasansbts
(Если Вы не включаете BT PrimaSans в свой образ, изменяете это на имя шрифта, Вы хотите использовать как значение по умолчанию)