李晖,陈平
(济源职业技术学院,河南济源459000)
基于嵌入式Qt电纸书阅读器的设计与实现
李晖,陈平
(济源职业技术学院,河南济源459000)
以嵌入式终端下的电纸书阅读器为实例,介绍了ARM9硬件平台的搭建和嵌入式Linux系统下Qt运行环境的配置过程。经测试,程序功能在嵌入式平台能够基本实现,运行效果良好。
嵌入式;Qt;电纸书阅读器
D01∶10.19329/j.cnki.1673-2928.2016.06.010
近年来嵌入式系统发展迅速,广泛应用于多个领域,因其便携易用的特点受到用户青睐。完全遵循GPL(通用公共许可证)条款的Qt,专门为嵌入式系统设计图形用户界面和应用程序开发而设计,提供了跨平台的工具,这使得开发变得更为速度和方便,并且便于设计出操作更方便、交互性更好的GUI和应用程序。本设计通过对基于嵌入式Qt的电纸书阅读器的设计和移植环境搭建进行分析,辅之以系统结构图和搭建环境测试图的方法来解析电纸书阅读器的功能设计和实现的过程。
本设计采用北京博创ARM9开发板。根据平台硬件要求,进行了U-boot和内核的移植以及根文件系统、触摸屏及Qte库的编辑,为基于嵌入式Qt电纸书阅读器系统软件的开发与实现做好准备。
2.1 创建交叉编译环境
嵌入式系统是对可靠性、成本、体积、功耗等方面有严格要求的专用计算机系统。由于硬件资源非常有限,需要针对嵌入式硬件目标板设定专门的Linux操作系统,这就必然需要相应的交叉开发环境。嵌入式开发过程中交叉编译是一项重要的工作,通过交叉编译器能编译出在另外一种环境下运行的代码。
要进行交叉编译,我们需要在开发平台建立交叉编译工具链,最后用交叉编译工具链编译出在目标平台上可运行的代码。刚开始编译U-boot是一件很头疼的事,因为很多编译器都不能通过,原因是U-boot是软浮点编译的,但一般的交叉编译器用的是硬浮点,最后通过使用3.3.2交叉编译器才能正常编译。本系统使用arm-linux-gcc 3.3.2交叉编译工具链编译U-boot和支持eabi提高编译效率的arm-linux-gcc 4.1.2编译Linux内核及其应用程序。
为了对交叉编译器的使用方便,一般把armlinux工具链目录加入到环境PATH中,如对gcc 4.1.2,在/etc/profile文件中,增加路径export PATH= /opt/toolchains/arm920t-eabi/bin:$PATH,用命令source/etc/profile使其路径生效。
2.2 Qt运行环境配置
Qt/Embedded具有良好的与平台无关GUI编程接口,在嵌入式系统中有着相当多的应用[1]。运行环境配置步骤如下:
1)建立Linux开发环境。
在Windows系统下安装虚拟机软件VMware Workstation,并在虚拟机软件上安装Linux操作系统。
2)安装开发工具Qt,分为两部分。
①安装LinuxPC机上的开发工具Qt。
②搭建QTE-arm环境并移植QtE到博创S3C2410开发板。
交叉编译器安装成功后,解压tslib1.4.tar.gz并编译,步骤如下:打开文件所在目录,解压文件后进入解压目录,修改脚本gedit build.sh,然后保存退出并执行./build.sh。
编译并成功安装到/usr/local/tslib目录,tslib1.4编译成功后开始编译安装qte4.6.3-arm,具体步骤如下:进入文件所在目录,解压并修改错误文件,用make install命令编译执行,则成功安装。
2.3 BootLoader的移植
本设计采用了通用性很强的U-boot作为Boot⁃loader。U-boot是以硬件为基础的引导程序,其作用就是对硬件设备初始化,预先设置软件环境,最后调用到内核。U-boot移植是嵌入式系统软件开发的首要环节,U-boot运行情况决定着应用程序
运行环境的构建和内核启动的正常与否[2]。
U-boot的移植方法∶在ARM9平台上进行uboot移植。对U-Boot源码包解压并编辑,这样就可以从Flash启动和支持NAND DM9000网卡;执行命令:
#make smdk2410_config #make
生成u-boot.bin目标文件。
2.4 Linux内核的配置
U-boot正常启动后进行Linux内核的移植。
1)准备源码包及文件:“linux-2.6.24.4.tar. bz2”、“yaffs2.tar.gz”、“dm9000.h”、“dm9000.c”
2)分别解压linux-2.6.24.4.tar.bz2和yaffs2.tar. gz,在yaffs2目录内执行命令:
#./patch-ker.sh c../linux-2.6.24.4/
3)编辑Makefile文件执行命令:
#gedit Makefile
在打开的文件中找到下面两行并修改:ARCH ?= arm
CROSS_COMPILE?= arm-linux-
4)得到.config文件:
#cp arch/arm/configs/s3c2410_defconfig.config
5)修改Nand Flash分区,之后在打开文件中修改分区信息结构体:
6)禁止ECC校验
通过U-Boot和内核产生的ECC校验码的一致性由禁止内核ECC校验解决。
修改#gedit drivers/mtd/nand/s3c2410.c文件:
chip->ecc.mode=NAND_ECC_NONE
7)添加 LCD支持:#gedit arch/arm/machs3c2410/mach-smdk2410.c在打开的文件中添加两个头文件:
#include<asm/arch/fb.h>
#include<linux/platform_device.h>
然后在“smdk2410_init”函数的最后一行添加添加结构体:
s3c24xx_fb_set_platdata(&smdk2410_fb_info)
8)添加网卡驱动:#gedit arch/arm/machs3c2410/mach-smdk2410.c
在打开文件中添加2个结构体来定义端口地址和中断号,以及设备的其他信息。然后加入网卡数据:
&s3c_device_dm9ks[3]。
9)配置内核
进入内核配置界面,进行内核配置:
#make menuconfig
10)编译内核,内核源码目录执行以下命令:
#make clean
#make
完成后就生成了所需要的要烧写到开发板上的内核映像文件uImage
2.5 根文件系统的配置
1)主机环境
准备cramfs-1.1.tar.gz和busybox-1.12.2.tar.bz2源码包,解压后,进入cramfs-1.1目录。
#apt-get install zlib1g-dev
#make
得到用来生成cramfs映像的mkcramfs工具。
2)Busybox配置
①解压busybox-1.12.2.tar.bz2。
②使用shell脚本创建根文件系统的目录结构,并运行此脚本。
③修改拷贝过来的profile文件。
④创建空的mdev.conf文件。
⑤复制shadow、group和passwd文件,将passwd文件中首末两行的bash改成ash。
⑥复制在busybox安装目录下的所有文件到根文件系统目录。
#cp-rfv/home/root/busybox-1.12.2/_install/*/ home/root/rootfs
⑦生成cramfs映像
#./mkcramfs rootfs rootfs.cramfs
3)测试根文件系统是否配置成功。
①开启tftp服务器,设置环境变量,确保开发板和windows在同一网段及开发板的tftp服务器的IP为windows的IP。
②下载并到nandflash文件系统对应的分区中。
③设置启动参数,此项是内核自动启动的参
数,如果已设置,就不用再重新设置。
④重启开发板:[up-class2410#]reset,启动目标板,串口输出显示根文件系统已经加载成功。
2.6 触摸屏软件Tslib的移植
触摸屏的软件驱动程序移植后(基于内核的移植),一般有配套的tslib通过用户层对触摸屏上的数据滤波和修正,同时也可以给大多数GUI应用的tslib接口支持。本系统tslib-1.4矫正触摸屏,具体步骤如下:
1)进入tslib-1.4解压目录修改:gedit build.sh脚本。
2)执行./build.sh编译并安装。
3)执行脚本:./touch.sh,屏幕上出现校准程序,点击十字架开始校准,成功移植tslib1.4。
3.1 功能模块设计
为了读者的阅读方便,电纸书阅读器共有以下几个功能。
①打开电纸书:提供了供你选择的文件,你可以选择你想打开的文件或电纸书阅读器。②新建:可以打开一个新的页面。③退出:退出打开的界面。④关于作者:显示作者基本信息。⑤关于Qt:显示关于Qt的简介。⑥字体:你可以根据你的需要而设置你打开的电纸书阅读器的字体的类型和大小。⑦颜色:电纸书阅读器背景界面的默认为白色,可打开颜色选项卡来选择适合颜色。⑧打印:通过打印选项来选择打印机进行打印。⑨查找:可以输入查找内容。
3.2 Qt功能的实现
本系统研究的是基于嵌入式Qt的电纸书阅读器的设计,因此需要用Qt软件实现基本的功能,然后通过嵌入式在UP-2410平台上来实现,因此Qt功能的实现起着至关重要的作用。本系统设计的Qt电纸书阅读器的基本功能。
1)打开电纸书功能的实现
功能实现需调用getopenfilename()函数来创建Open公共对话框,用户可以指定驱动器、目录和文件名。
2)新建功能的实现
新建功能的实现主要用新建一个窗体,然后调用show()函数来实现,槽函数为:
MainWindow*w=new MainWindow;//新建一个名为MainWindow的窗体。
w->show();//把这个命令传输给系统[9]。
3)退出功能的实现
退出功能实现通过调用this->close()来实现,this代表当前窗口部件对象地址,close表示关闭。
4)关于作者功能的实现
功能实现用QMessageBox∶information(this,tr("关于作者:"),tr("10090204**"))函数;
5)关于Qt功能的实现
关于Qt的介绍通过调用函数QMessageBox∶∶aboutQt()来实现,Qt提供了五种类似的对话框,要实现关于Qt功能需要的槽函数为:
QMessageBox∶aboutQt(this,tr("欢迎观看电纸书阅读器!!!"));//""里面的为对话框的标题。
6)字体功能的实现
字体的功能是通过调用函数setFont()实现。7)打印功能的实现
打印功能的实现需要用函数 doc->print (&printer)调用打印机来实现,其中printer是打印机的意思;
8)颜色功能的实现
背景颜色功能的实现需要函数setPalette(pal⁃ette)调用调色板来实现,函数名为∶setpalette,功能∶改变调色板的颜色。
9)查找功能的实现
查找功能的实现:首先需要新建一个窗体取名为findDlg,添加一个按钮PushButton改名为查找下一个,添加编辑框LineEdit用来输入需查找文件名,调用函数:
然后通过调用FindText函数来实现查找功能。
4.1 U-boot的测试
在DOS对话框中进入D盘输入命令:sjf2410-s.exe/f∶u-boot.bin,运行完后打开终端,重启开发板,然后显示如图1所示。图1表示u-boot已成功移植到了开发板上,可以继续进行内核的移植步骤。
4.2 Linunx内核的测试
测试内核的具体步骤是:
1)确认Linux虚拟机的IP地址。
①查看serverip是否与Linux虚拟机的IP地址一致。
②通过“setenv serverip+ip地址”来指定tftp服务器IP。
2)ARM开发板上运行命令。
①tftp 0x30008000 uImage
②nand erase 0x80000 0x200000
③nand write 0x30008000 0x80000 0x200000
重启ARM开发板,执行命令“bootm”,成功移植后终端如图2所示。
4.3触摸屏的测试
进行触摸屏的测试,首先写一个脚本touch.sh方便程序执行,保存退出,执行脚本:./touch.sh屏幕出现校准程序,点击十字开始校准,最终移植到开发板。
4.4 电纸书阅读器功能测试
通过以上几个测试,Qt的移植环境已搭建完成,最后,就是把设计好的Qt电纸书阅读器成功下载到开发板上并进行测试,具体步骤为:
1)首先启动tftp32.exe软件,配置IP地址:192.168.1.126。
2)在root目录下下载文件,命令为:tftp–r 6-g 192.168.1.126。
3)设置文件6的权限:chmod 777 6。
4)译qt.sh文件,命令为:./qt.sh。
这时电纸书阅读器就会在UP-2410平台上显示,如图3所示。
图1 U-boot移植测试图
图2 内核移植测试图
图3 电纸书阅读器图
随着嵌入式CPU运算能力的不断提高以及对外设接口支持的不断丰富,要求具有良好交互性GUI的嵌入式Linux系统的应用逐渐增多[4]。本设计重点介绍了Qt电纸书阅读器的编译安装以及UP-2410平台的移植,并在搭建好的环境上进行电纸书阅读器系统功能的设计和实现,并验证移植的成果,结果证明设计能够为类似的系统开发提供参考。
[1]穆煜.嵌入式应用程序设计[M].北京:人民邮电出版社,2009.
[2]周开,倪伟.基于Qt/E的嵌入式Linux GUI研究与实现[J].淮阴工学院学报,2015,24(3):10-13.
[3]谭浩强.C语言程序设计[M].北京:清华大学出版社,2008.
[4]王浩南,刘益成.基于嵌入式Linux系统的下的Qt开发[J].电脑开发与应用,2010,23(1):11-13.
Design and Implementation E-book Reader Based on Embedded Qt
LI Hui,CHEN Ping
(Jiyuan Vocational and Technical College,Jiyuan 459000,China)
This article takes the embedded terminal of E-book reader as an example,introduces the ARM9 Qt under the construction of the hardware platform and embedded Linux system running environment of the configu⁃ration process.The test program in the embedded platform can achieve the basic functions,operation effect is good.
embedded;Qt;E-book reader
TP391.1
A
1673-2928(2016)06-0030-05
(责任编辑:周小露)
2016-03-22
李晖(1982-),男,河南新乡人,济源职业技术学院助教,研究方向:嵌入式开发。