Photon的嵌入过程 在桌面环境中Photon的运行是通过脚本“ph”实现的[35]。ph脚本主要做如下一些工作: l 启动Photon服务 l 检测输入硬件设备 l 启动输入硬件设备驱动 l 启动显卡驱动,初始化视频硬件为合适的模式 l 启动字体管理器 l 启动windows管理器 l 启动各个桌面服务程序,比如shelf、桌面背景管理器等。 在嵌入式环境中,需要手工启动上述各个服务。这样做有很多好处,比如可以自己决定系统需要的文件,合理配置自己的嵌入式运行环境。下面详细阐述Photon的嵌入过程: 1、设置PHOTON_PATH环境变量 PHOTON_PATH环境变量是为了保存Photon安装的基本目录。缺省情况下是目录/usr/photon。该目录下一般至少存在一下几个子目录: l bin:存放Photon的可执行程序 l font_repository :Photon的字体以及字体配置文件(OS independent) l palette:图形调色板 (OS independent) l translations:Photon 语言翻译支持 (OS independent) PHOTON_PATH环境变量的设置可以通过export进行,如下所示: export PHOTON_PATH=/usr/photon 2、启动Photon服务器 如果不需要给Photon服务进程传递任何参数,可以简单的启动如下: Photon & 但是,如果嵌入式环境中有触摸屏,需要增加Photon的参数-D,-R,-U等。因为人的手指比一个象素大的多,为阻止触摸位置的任意变化就需要指定-U选项。需要注意的是Photon必须包含在PATH环境变量下。在QNX Neutrino中,该位置是/usr/photon/bin。可以通过 export PATH=:/bin:/usr/bin:/usr/photon/bin 来设置PATH环境变量。 3、启动输入设备驱动 在桌面环境中,一般通过inputtrap工具来自动搜索输入设备(鼠标、键盘、触摸屏等)并为其启动合适的驱动程序。在嵌入式环境中,由于存储空间的限制一般不用inputtrap,因为inputtrap比较大而且嵌入式环境中输入设备可能在一个特殊的位置或者不被已存在的devi-*驱动支持。当然,如果情况允许也可以利用inputtrap,毕竟方便省事的多。手工加载驱动需要用devi-*系列驱动,具体见后面的实例。devi-*系列驱动的位置是/usr/photon/bin。 4、启动字体管理器 在建立嵌入式系统时要根据自己的情况决定需要支持什么样的字体以及是否需要矢量字体等。字体的确定主要有以下几个方面: l 一般都需要cursor font(phcursor.phf)。 l 如果嵌入式系统中包括了pterm(Photon的一个终端程序),则需PC Terminal(pcterm*.phf),PC Serif(pcs*.phf),或者PC Sanserif (pcss*.phf)字体族。而且需要建立一个$HOME/.photon/pterm.rc文件或$PHOTON_PATH/config/pterm.rc文件来配置终端字体。 l 大多数基于widget应用程序需要如下几个定义在fontmap文件里的别名字体: n TextFont n MenuFont n FixedFont n BalloonFont n TitleFont l Web浏览器需要如下几种字体: n Body字体(例如PrimaSans BT、Dutch 801 Rm BT等) n Heading字体(例如Swis721 BT等) n Nonproportional字体(例如Courier10 BT、PrimaSansMono BT等) QNX Photon的字体管理器主要有以下几种: l phfontphf:只支持Bitmap字体。 l phfontpfr:支持Scalable Bitstream PFR,和TrueType Collection字体。 l phfontFF:支持Scalable TrueType, Type 1, Type 2, Bitstream Speedo (retail encryption),以及Bitstream Stroke等字体。 l phfontFA:支持以上所有字体。 我们要根据自己所使用字体的实际情况选择合适的字体管理器。字体管理器的启动很简单,如: /usr/photon/bin/phfontphf & 如果启动映象里没有包括使用的字体文件,在启动字体管理器时需要指定包括这些字体文件的路径,比如: /usr/photon/bin/phfontphf -d /my_dir/font_repository 必须注意的是my_dir必须与$PHOTON_PATH一致。 5、启动显卡驱动 Photon图形子系统的启动通过io-graphics实现。例如: io-graphics -g640x480x8 -dldevg-vga.so -P/usr/photon/palette/vga4.pal io-graphics -g1024x768x16 -dldevg-vesabios.so io-graphics -g1024x768x16 -dldevg-rage.so -d0x1002,0x4755 -I0 其中,-g指定图形的显示分辨率和颜色深度,-dl指明硬件的驱动程序,-d指明驱动唯一确定硬件所需要的PCI制造商以及设备ID,如果有两个具有相同的制造商和ID的图形卡的话需要用-I指明是哪块卡,-P指定使用的palette文件。 这一部分需要的文件主要有: l /usr/photon/bin/io-graphics:启动图形子系统 l /lib/dll/devg-*:设备驱动 l /usr/lib/libdisputil.so.2:devg*驱动使用的库 l /usr/lib/libffb.so.2:devg*驱动使用的库 l /usr/lib/libgui.so:io-graphics使用的库 l /lib/dll/gri-photon.so:Photon DLL l /usr/lib/libphrender.so:The software rendering routines。 6、启动windows管理器(可选) QNX Photon Window管理器是pwm(the Photon Window Manager),它提供了标准的窗口管理功能,包括move、resize、minimize、maximize、raise、lower和close。应用程序可以根据需要定制由pwm提供的标准windows框架。在QNX中,可以通过Ctrl-Alt-Backspace结束图形模式回到终端模式。但在嵌入式运行环境中往往不提倡最终用户这样做,我们可以通过pwm来阻止该情况的发生。例如: /usr/photon/bin/pwm –k 7、启动自己的GUI程序 如果自己设计的图形界面程序是一个单个的可执行程序且不需要window管理器的话,可以静态编译。如果需要窗口管理器或者有不止一个Photon程序在运行的话最好连接动态链接库编译。 只要好好把握以上这七步,很容易就可以定制出优异的QNX图形运行系统。下面修改开发案例一中的Buildfile,使图形界面程序可以在目标系统上执行。在Buildfile中增加如下部分,重新编译Buildfile,并把mydoc.ifs复制到目标系统的/ .altboot,重新启动目标系统。注意启动时按Esc使系统以altboot启动。 waitfor /usr/photon Photon & waitfor /dev/photon phfontFA & io-graphics -g800x600x15 -dldevg-geode.so -I0 -d0x100b,0x504 & devi-hirun kbd kbddev ps2 mousedev & #PS/2 键盘和鼠标驱动 myph-program # 执行自己的图形界面程序程序 libm.so.2 # 包含图形显示文件 devg-geode.so # 显卡驱动
|