一个能够移植到多种硬件平台上的嵌入式GUI系统至少需要抽象出两类设备, 即负责显示图形界面的图形抽象层GAL (Graphic Abstract Layer)和负责接收及处理输入(一般输入设备为键盘、触摸屏)的输入抽象层IAL (Input Abstract Layer)。
目前在Qt/EmbeddedGAL层技术使用的是FrameBufer。
FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。这种接口将显示设
备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地
址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。该驱动
程序的设备文件一般是 /dev/fb0、/dev/fb1 等等。比如,假设现在的显示模式是
1024x768-8 位色,则可以通过如下的命令清空屏幕:
$ dd if=/dev/zero of=/dev/fb0 bs=1024 count=768
在应用程序中,一般通过将 FrameBuffer 设备映射到进程地址空间的方式使用,
比如下面的程序就打开 /dev/fb0 设备,并通过 mmap 系统调用进行地址映射,随
后用 memset 将屏幕清空(这里假设显示模式是 1024x768-8 位色模式,线性内存
模式):
int fb;
unsigned char* fb_mem;
fb = open ("/dev/fb0", O_RDWR);
fb_mem = mmap (NULL, 1024*768, PROT_READ|PROT_WRITE,MAP_SHARED,fb,0);
memset (fb_mem, 0, 1024*768);
FrameBuffer 设备还提供了若干 ioctl 命令,通过这些命令,可以获得显示设备
的一些固定信息(比如显示内存大小)、与显示模式相关的可变信息(比如分辨
率、象素结构、每扫描线的字节宽度),以及伪彩色模式下的调色板信息等等。
Qt/Embedded (下文中简称为qt/e)是Qt的嵌入式Linux版本。qt/e延续了Qt的强大功能,与Qt类似,qt/e类库也完全采用C++ 封装, 但在底层舍弃了X-Window ,而是采用Frame Buffer作为底层图形接口。因此,qt/e具有丰富的控件资源和良好的可移植性。从Trolltech公司的网站上可以下载到qt-embedded-opensource-4.0.0-b2.tar.gz和qtopia-core-opensource-src-4.1.1.tar.gz安装包