ARM
阐述了Linux在嵌入式系统上的实现方法,针对嵌入式圈形用户界面QtE进行了简要介绍,并简单描述了Linux操作平台的建立,着重分析了qtopia移植到S3C2410的过程。
1、Qt/Embedded简介
Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计的图形用户界面(Graphical Uset Interface简称Gin)的工具包。Qt是挪成Trolltech软件公司的产品,它为各种系统提供图形用户界面的工具包,QtE是嵌入式版本。
QtE拥有同Qt一样的API,开发者只需了解Qt的API,不用关心程序所用到的系统和平台。QtE是模块化和可剪裁的,它的结构很好的优化了内存和资源的利用。同时它拥有自己的窗口系统,可以直接对底层的图形驱动进行操作。QtE可以应用在所有主流平台和CPU上,支持所有主流的嵌入式Linux,对于在Linux上的QtE的基本要求只不过是Frame Buffer设备和一个C++编译器。而且QtE还提供压缩字体俄格式,即使在很小的内存中,也可以提供一流的字体支持,支持多种的硬件和软件的输入,支持Unicode、反锯齿文本和Alpha混合的图片。
2 Qtopia简介
Qtopia是Trolltech公司在QtE的基础上开发的一个应用环境,这个应用环境特为移动和手持设备开发,其特点就是拥有完全的、美观的GUI,同时它也提供可上百个应用程序用于管理用户信息、办公、娱乐、Internet交流等。
Qtopia是一种全方位的应用开发平台,它可用于基于嵌入式linux的PDA,移动电话,web pads,以及其他移动计算设备。Qtopia构建于Qt/Embedded之上,是专为基于linux的消费电子产品提供和创建图形用户界面而设计的。常见的有两种版本:
Qtopia Phone版:专为基于linux的智能电话和多功能电话设计。
Qtopia PDA版:专为基于linux的PDA设计 ;
Qtopia的特点是,视窗操作系统;同l步窗口;开发环境;本地化支持;游戏和多媒体.PIM应用程输入法;个性化选项;intemet应用程序;java集成;无线支持。
3、Ot/Embedded开发
QT/Embedded通过Qt API与LinuxI/O设施直接交互,成为嵌入式linux端口。同Qt/Xl 1相比,QT/Embedded很节省内存,其不需要一个X服务器或是Xlib库,它在底层摈弃了xⅡb,采用framebuffer(帧缓存)作为底层图形接口。
同时, 将外部输入设备抽象为keyboard和mouse输入事件。 QT/Embedded的应用程序可以直接写内核缓冲帧,这可避免开发者使用繁琐的Xlib/Server系统。
嵌入式软件开发通常都采用交叉编译的方式进行,基于Qt/Embedded;fIJ Qtopia的GUI应用开发也采用这样的模式。先在宿主机上调试应用程序,调试通过后,经过j交叉编译移植到目标板上。
Qt/Embedded直接写入帧缓存,在宿主机上则是通过q v f b (v i r t u a 1 .framebuffer)来模拟帧缓存。qvfb是x窗J口用来运行和测试Qtopia应用程序的系统程序。qvfb使用了共享内存存储区域(虚拟的帧缓存)来模拟帧缓存并且在一个窗口中模拟一个应用程序来显示帧缓存,显f示的区域被周期性的改变和更新。
4、建立Linux操作平台
4.1安装交叉编译器
由于Linux内核对交叉编译器有很大的依赖,所以不同版本的Linux需要相应的编译器,在这里所用的是Redhat 9,内核是2.4的,用cross一2.95.3是可以的。利用SSH工具~gWindows下的交叉编译器的安装包拷到Linux的/usr/local/arm下,如果没有则需要新逢目录。进入该目录输入以下命令进行加压安装:
# tar jxvf croSS 2.95.3.tar.bz2
解压完后新建路径,输入:
# export PATH=$PATH :/usr/
local/arm/2.95.3/bin
因为编译QT需要更高版本的编译器,所以这里再安装cross一3.3.2方法同上。
4.2编译内核
在根目录下新建$3C2410,把内核源码拷到该目录下,解压,生成目录2。4.18一rmk7,进入该目录,配置内核,一般用的较多的是菜单配置,输入:
# make menuconfig
配置完以后选择默认保存,输入以下命令进行编译:
# make dep (建立依赖关系,如果要重新编译,则需用make clean命令)
# make zImage
编译完后在2.4.18-rmk7/arch/arm/boot下生成zlmage镜像文件,烧写到板子Flash的1分区中。
4.3 Bootloader
Bootloader简单的说就是在操作系统内核运行之前运行的一小段程序,通过这小段程序我们可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,其主要任务是将内核映像从硬盘读到ARM中,然后跳转到内核的入口点去运行,即开始启动操作系统。在这里所用的Bootloader是U—boot-1.1.4。
把U boot—1.1.4.tar.bz2拷到根目录的S3C2410中,解压后生成u—boot一1.1.4目录,进入该目录,进行编译。输入:
# make smdk2410 config
# make cross—C0MPILE=armlinux一(由于已经能够生成路径,如果编译不通则输入完整路径:m a k ecross COMPILE=/usr/local/arm/bin/arm—linux )
生成U boot.bin文件烧制到ARM板子里。
5、移植qtopia
5.I所用资源
硬件:恒丰HFRK 24i 0B,三星$3C2410 ARM 920t
软件:cross-2.95.3.tar.bz2
cross-3.3.2.切r.bz2
Linux 2.4.18.tar.gz
qt—xl1—2.3.2.tar.gz
qt—embedded一2.3.7.tar.gz
qtopia free一1.7.0.tar.gz
tmake一1.11.tar.gz
jpegsrc.v6b.tar.gz
e2fsprogs 1.35.tar.gz
5.2移植qtopia
以上创建了Linux操作平台,可以移植QT了,首先在根目录下新建一个目录这里假设为Q T,可以利用S S H 远实现windows和Linux下的文件按共享,上传和下载资料和文件,假设所用源文件已经下载flwindows中,从SSH拷贝fIJLinux/Qt下,在Qt下建立两个新目录。
mkdir qt——x86
mkdir qt—am
qt—x86存放宿主机上虚拟Qt环境,qt—arm存放目标板Qt环境。
5.2.1宿主机移植所需工具及环境变量声明
①Tmake一1.1l 生成Makefile文件环境变量:T M A K E D I R /TMAKEPATH/PATH
②Qt—xl1—2.3.2 Qvfb一虚拟帧缓存工具器
Uic一用户界面编辑器
Designer Qt图形设计器
环境变量:LD— LIBRARY— PATH一/PATH
③Qt—embedded一2.3.7 Qt库支持libqte.so
环境变量:Q T E D I R /LD— — LIBRARY— — PATH— — /PATH
④Qtopia free一1.7.0 应用程序开发包、桌面环境
环境变量:Q P E D I R /LD— LIBRARY— PATH/PATH
5.2.2建立宿主机上Qt虚拟环境
(1)解压qt—xl1 2.3.2.tar.gZ并将生成的qt一2.3.2一xll文件改名为qt
cd /Qt/qt——x86
tar zxvf../qt—xl 1-2.3.2.tar.gz
mv qt-2.3.2 qt
解压qt-embedded 2.3.7.tar.gz并将生成的文件改名为qte
tar zxvf ../ qt-embedded 2.3.7.tar.gz
mv qt-embedded一2.3.7 qte
解压qtopia—fre 1.7.0.tar.gz,并改名为qpe
tar zxvf ../qtopia free—1.7.0.切r.gz
mv qtopia—free一1.7.0 qtp
解压tmake-1.11.tar.gz,并改名为tmake
tar zxvf../tmake-1.11.切r.gz
mv tmake 1.I1 tmake
交叉编译jpegsrc.v6b.tar.gz得到libuuid
tar zxvf../jpegsrc.v6b.tar.gz. /configure
m ake
make install
交叉编译e2fsprogs一1.35.tar.gz,生成libjpeg.8o
. /configure
make
得到libtools程序
. /configure
修改生成的Makefle文件:
prefix = /arm——target/qte
C C /usr/local/arm/2.95.3/bin/arm—linux-gcc
AR= /usr/local/arm/2.95.3/bin/arm—linux -ar rc
AR2= /usr/local/arm/2.95.3/bin/arm—linux-ranlib
cp jconfig.doc jconfig.h
mkdir -p /arm——targetqte/man/man1
make
cpⅡbjpeg.so/usr/local/arm /2.95.3/arm linux/lib
(2)设置环境变量
cd /Qt/qt——x86
export QTDIR=$PWD/qt
export QTEDIR=$PWD/qte
export QPEDIR--$PWD/qpe
export PATH=$QPEDIR/bin:$QTEDIR/bin:$QTDIR/bin:$PATH
expert PATH=$QTEDIR/tmake/bin:$PATH
export TMAKEPATH=QTEDIR/tmake/lib/qws/linux-generic-g++
e x P o r tLD LIBRARY—PATH=$QPEDIR/lib:$QTEDIR/lib:
$QTDIR/lib:$LD—LIBRARY—PATH
(3)编译
① qt
cd$QTDIR
ls
运行configure文件,中间提示,输入yes即可,可用以下命令跳过echo yes I./configure(后面可以加一些参数)
make
生成运行qvfb的tools
make—C tools/qvfb
mv tools/qvfb/qvfb bin
cp bin/uic$QTEDIR/bin
cd ..
② qte
export QTDIR=$QTEDIR
export QTEDIR=$QTEDIR
export QPEDIR=$QPEDIR
cd $QTEDIR
cp $QPEDIR/src/qt/qconfig—qpe.h
src/tools/
echo yes I./configure-qconfig qpe
— — system——jpeg ——gif——qvfb ——thread
depths\ 4,8,16,32
make sub-src
③ qpe
expo rt QTDIR=$REAL—QTEDIR
expo rt QTEDIR=$REAL—QTEDIR
expo rt QPEDIR=$REAL—QPEDIR
cd $QPEDIR/sre
./configure
make
以上就完成宿主机上的虚拟环境构建,启动一下虚拟帧缓存,在sheH里运行:
cd QTDIR/bin
. /qvfb depth 32 width 640一height 480
就可以调出xl l下虚拟镇缓冲的设备。其中一depth32参数表示颜色深度为32位,一width 640一height 480参数表示镇缓冲分辨率为640(宽) 480(高)。
. /qpe
5.2.3移植
cd/Qt/qt-arm
tar zxvf../qt-embedded一2.3.7.tar.gz
mv qt-2.3.7 qt
tar zxvf ../qtopia—free 1.7.0.tar.gz
mv qtopia-fre-1.7.0 qpe
tar zxvf ../tmake-1.11.tar.gz
mv tmake-1.11 tmake
export QTDIR=$PWD/at
export QPEDIR=$PW D/qpe
expo rt TMAKEDIR=$PW D/tmake
e x P o r t TM AKEPATH=$TMAKEDIR/lib/aws/linux arm—g++
export PATH=SQTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
e x P o r t LD LIBRARY— PATH=$QPEDIR/lib:$QEDIR/lib:$LD LIBRARY—PATH
cD bin/uic $REAL—QTEDIR/bin
cd SQTDIR
cp$QPEDIR/src/qt/qconfig qpe.hsrc/tools/
make sub-src
移植QT中的相关设备接El、鼠标、触摸屏、移植qtopia相关设备接口。
编译Qtopia
cd/Qt/qt——arm
expo rt QTDIR=$PWD/qte
expo rt QPEDIR二$PWD/(Ⅱ)e
expo rt
PATH=$QPEDIR/bin:$QTDIR/bin:/home/mic/control—project/daq—roodule/tools/bin:$PATH
export PATH $QTDIR/tmake/bin:$PATH
export TMAKEPATH=$QTDIR/tmake/lib/qws/linux—arm—g++
e x P o r tLD— LIBRARY PATH:$QPEDIR/lib:$QTDIR/lib:$LD—LIBRARY—PATH
cd$QPEDIR/src
. /configure
make
进人qtopia—free一1.7.0目录下,将目录apps,bin,etc,il8n,lib,pics,plugin拷贝到根文件系统的/qtdemo下,增加环境变量
export QTDIR-/qtdemo
将qt embedded和qtopia的库拷贝到/qtdemo/lib目录下,将字体目录fonts拷贝到/qtdemo/lib目录下,就可以运行/qtdemo/bin目录下的qpe。
6 结束语
嵌入式系统已经,一泛的应用到电子产业中,它的开源、模块化和可剪裁极大的节l省了资源,QtE作为嵌入式GUI也倍受青!睐,它不但延续了Qt桌面系统的所有功能,而且节省空间和内存。qtopia专为linux的消费电子产品提供和创建图形用户界面而设计的,具有美观的GUI。本文主要介绍了它移植到S3C2410-ARM9开发板的过程,利用宿主机搭建的虚拟环境,再对qtopia进行编译,完成到三星HFRK2410 j的移植。Qtopia良好的图形用户界面和它紧凑的模块化结构在电子产品界一定会得到迅速的发展。
全部0条评论
快来发表一下你的评论吧 !