Руководство программиста в Photon (953920), страница 72
Текст из файла (страница 72)
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
Теперь вернёмся к шрифтам. В нашем примере мы хотим использовать шрифт primasansbts TrueType почти во всех случаях. Для наших (необязательных) окон терминала pterm мы будем использовать шрифт фиксированной ширины pcterm. Также время от времени нам понадобится использовать мышь, так что мы подключим файл 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, чтобы отразить шрифты и отображения (mappings), которые нужны нам в нашей встроенной системе.
Вот модифицированный файл 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 – одноразмерный обычный шрифт (не-пропорциональный)
-
tt20011 – жирный одноразмерный
Шрифты 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, phcursor
Службы шрифтов
Существует несколько доступных служб шрифтов:
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.1 смотрят в .so, работали нормально. Выполните следующее:
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 -IO -d0x1002, 0x4c42
(Мы говорили об этом при обсуждении выхода pidin arg).
Если у Вас имеется другой графический драйвер, Вы должны его скопировать в /phembed/lib.
Теперь мы можем снова взглянуть на шрифты. У Вас имеется директория /phembed/font_repository, заполненная нужными Вам файлами .ttf и содержащая файлы fontmap, fontdir и fontext, модифицированные так, как это описано выше.
Теперь у нас есть все кусочки, необходимые нам для того, чтобы попытаться собрать нашу встроенную систему Photon. Простейшим способом попробовать это выполнить – использовать вторую машину, соединённую с первой по telnet или нуль-модемному последовательному кабелю.
Если Вы используете нуль-модемный кабель, Вы можете запустить оболочку shell на Вашей терминальной машине, набрав –t /dev/ser1 Ksh на машинке с QNX Neutrino. Если скорость передачи (baud rate) и управление потоком на последовательных портах согласованы, на Вашем терминале появится приглашение оболочки (#). Мы предполагаем, что вы добились работы этого соединения и что у вас доступно приглашение оболочки на каком-то терминале, который связан с Вашей машиной QNX Neutrino.
Полезно было бы иметь для запуска Photon'а какой-то скрипт – основной сценарий. Вот основной сценарий, который запускает Photon, использующийся в приведенном выше примере:
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, чтобы ограничить использование памяти. Для подробностей см. описание использования phfontFF (напр., use /usr/photon/bin/phfontFF).
-
Графический драйвер запускается именно так, как мы увидели в опциях, напечатанных командой pidin arg. Если у Вас другой графический драйвер с другими опциями, Вам надо изменить эту строку.
-
Мы запускаем несколько копий программы-калькулятора phcalc, просто чтобы показать, что Photon запущен.
До тех пор, пока не доступно имя требуемого устройства, для прекращения сценария мы используем команду on. Более подробно см. "Справочник утилит QNX Neutrino".
Если Вы всё выполнили удачно, Вы можете (из Вашего терминала) запустить основной сценарий ph-start и увидеть Photon с двумя окнами калькуляторов бок о бок на экране. Убедитесь, что Вы вышли из какой-либо сессии Phonon'а перед тем, как запустить сценарий ph-start.
Полезные советы
Вот несколько полезных советов относительно отладки Вашей встроенной системы Phonon:
-
По умолчанию оконный менеджер pwm не запускается, так что у Ваших приложений нет никаких окаймляющих рамок, и вы не можете использовать мышь для перемещения окон по экрану. Но ничего не мешает Вам запускать и останавливать pwm "на лету". Например, после запуска основного сценария
ph-start наберите в терминальном окне pwm &
-
По умолчанию не запускается драйвер мыши/клавиатуры. Он также может быть запущен и остановлен "на лету". Например, в нашей встроенной системе драйвер devi запускается следующей командной строкой:
/asr/photon/bin/devi-hirum kbd fd -d/dev/kbd ps2 kb -2 &
Мы можем выполнить эту команду по запросу оболочки с терминала и увидим появившийся указатель мыши, а также получим для использования клавиатуру. В полном смысле встроенной системе у Вас может не оказаться в наличии устройства устройства /dev/kbd, так что Вам понадобится-таки почитать документацию по семейству драйверов devi-. Например, если у Вас имеется только PS2-порт:
devi-hirum kbd kb ps2 kb -2
-
Вы можете запустить любую Photon'овскую программу по Вашему желанию и потом убить её. Например, если Вам нужно окно терминала, Вы могли бы запустить:
/usr/photon/bin/pterm &
И впоследствии завершить работу окна терминала.
Приложение 5. Использование PhAB под Microsoft Windows
В этом приложении описываются основные отличия между Windows'овской и натуральной QNX'овской версиями PhAB.
-
Photon в одиночном окне
-
Завершение PhAB
-
Дополнительные опции
-
Файловые имена с буквами в обоих регистрах
-
DDD – Отладчик Отображения Данных (Data Display Debugger)
-
Строка запуска отладчика
-
Функциональность панели управления ресурсами
-
Разработка индивидуальных виджетов и PhAB
Photon в одиночном окне
Как и натуральная QNX-версия PhAB, Windows-версия использует Photon и оконный менеджер Photon'а (pwm) для управления его окнами и диалогами. Основное отличие состоит в том что под Windows Photon выполняется внутри одного окна.
Когда Вы запускаете PhAB, он вначале запускает окно консоли, использующееся только для сообщений состояния. Затем создаётся основное окно Photon'а. Все окна и диалоги PhAB появляются внутри этого основного окна, и все последующие приложения, запущенные PhAB, располагаются внутри этого окна. Заметьте, что Вы можете запустить несколько сессий PhAB внутри одного окна Photon'а.
Вы можете минимизировать окно приложения внутри окна Photon'а, но поскольку здесь не запущено приложение shelf, к правой кнопке мыши привязан список всех запущенных приложений, что позволяет Вам вытащить их из фонового режима. Чтобы это сделать, просто щёлкните правой кнопкой мыши на свободной области основного окна Photon'а и затем выберите то приложение, которое Вы хотите поднять из фонового режима.
Завершение PhAB
Когда Вы завершаете PhAB, тот пытается закрыть все компоненты Photon'а, если при этом в окне Photon'а не запущены какие-то другие приложения (такие, как другая сессия PhAB или редактор языка).
Если не все компоненты Photon'а завершаются автоматически или если Вы просто хотите принудительно закрыть всё в случае, когда у системы проблемы с запуском PhAB или компонентов Photon'а, Вы можете набрать команду