嵌入式系统中QT与文件系统和应用程序的关系
前言
从硬件底层到应用程序,构建linux嵌入式系统的过程分为5部分:bootloader移植,内核移植,根文件系统构建,图形系统构建和应用程序开发。根据网络资料,我们都能够分步完成这5个部分,但有的时候总觉知其然不知其所以然,好像不知不觉都已经建立起了一个系统,但相关的概念和方法仍然很模糊,尤其是图形系统构建。本文的“图形系统”特指应用于linux嵌入式系统中的QT。本文的目的是说明在构建嵌入式系统时,已经启动了文件系统后,图形系统建立所需要做的工作。
一、与X Windows system 架构思维类比
在显示器上我们打开一个应用程序,系统就弹出该程序的窗口,考虑一下这个过程是怎么实现的。
方法一
计算机显示的图像是由像素组成的,最直接的方法就是应用程序把像素一个一个的画出来。显然这是一个旷日持久的过程。
方法二
一个一个像素点的画很麻烦,而应用程序也不需要用到单位像素点这么精细,抽象出来就是点(多个像素点)、线、圆、染色(填充)等。那就做一些函数库专门来实现这些基本操作,好处大家都可想象。看来抽象出共同的操作,然后把这些共同操作用函数库实现,使用的时候直接调用的方法确实好。
方法三
能否再进一步抽象我们应用程序需要做的工作呢?使用方法二的操作函数做出一些组件,如按钮、滑块、文本框,我们程序中用这些组件就可以实现应用程序窗口了。当然,组件化导致的是同一化问题,但是不管怎样,现在我们设计窗口更容易了。实现了这个小康,闲着闲着我们又发现每个程序有自己的窗口,可是程序之间的窗口切换缩放等问题怎么解决?
改进一
窗口管理器这个角色自然就产生了,这次算是对动作的抽象。有了它,我们开始实现初步发达。
改进二
可是有天大家一起聊天,发现大伙儿平时都需要写写文档,上网看看博客,发发邮件什么的,为什么不把这些应用和需求都抽象起来,统一实现,免得大伙儿麻烦。于是有能人就抽象抽象,建模建模,硬是把这些应用程序给开发出来。还有一些人更是再接再厉,把这些零零散散的应用程序归个类,设了个台面(桌面),把应用程序都摆上去,一目了然,谁有了新的需求,也可以抽象抽象,编写应用程序放到台面上来。为了方便大家茶前饭后聊天,还给这个包含应用程序的台面起了一个名字“桌面环境”。这时候我们就不是一般的发达了。
改进三/方法四
...
因此,对需求、动作等的抽象,然后用库函数统一实现这些抽象这种方法是实现全面发达的有效途径啊。对上文小节一下:
方法一用的是硬件底层像素显示
方法二抽象出的共同操作函数就是底层绘图函数(Graphic Library)
方法三更进一步提出控件工具包(Widget Toolkit)
改进一提出了窗口管理器(Window Manager )
改进二提出了桌面环境(如linux的GNOME,微软视窗操作系统等)
二、linux嵌入式系统的QT图形系统
针对嵌入式系统资源有限的特征,QT提出了"方法四",它直接把上文中除方法一之外的其他方法和改进全部打包,整体解决。当基本的文件系统建立起来了,linux嵌入式系统内核启动后运行的第一个用户程序设为QT,好了,大家就可以休息了,QT也提供一些基本的应用,为大伙做到了即开即用。
图1. QT在嵌入式Linux系统中的位置
(引用自http://doc.qt.nokia.com/4.7/qt-embedded-linux.html)
到此,“嵌入式系统中QT与文件系统和应用程序的关系”可以描述为:文件系统是容器,里面放了根文件系统和QT;根文件系统主要用于支持内核程序工作,属于基层工作部,而QT用于图形系统管理,属于外联部组织部;应用程序在QT的关爱下快乐的生活着,而内核在不辞辛劳的完成QT交给的任务。
三、怎样给开发板添加QT
请参考《嵌入式Linux应用开发完全手册》第512页,第25.2.6小节“在开发板上安装、运行Qtopia”。谢谢作者韦东山。