2024年4月16日发(作者:)
2011年第20卷第10期 http://www.C—S—a.org.cn 计算机系统应用
基于ARM的嵌
许勇 ,陈蜀宇
(重庆大学计算机学院,重庆4OQO'30)
(重庆大学软件学院,重庆400O30)
/
Linux图形界面的研究与实
摘要:主要针对基于 平台的嵌入式Linux图形界面的研究与实现。通过裁剪定制在ARM9上构建一个基
本的Linux系统,然后在此Linux系统上移植了X协议和一个小型的窗口管理器Matchbox,最后在此之上移植
了GTK图形库和基于GTK的应用程序。
关键词:嵌入式;Linux ̄ARM;GTK
Research and Implementation of the Embedded Linux Graphic on ARM
XU Yong .CHEN shu—Yu ,
(Computer Science Departme)d,Chongqing University,Chongqing 400043,China)
(Software Engineer Departr ̄enL Chongqing University,Chongqing 400043,China)
,
Abstract:This paper ̄mnly researches the embedded linux graphic.In this paper.we ifrst construct a basic Linux
system on the AI 压9,then transplant X protocol into he systtem.After that,a small window manager MatchBox is
transplanted into/this system,too.At last,we transplant he GTK+graphitcs library and the GTK+appHcafions.
Key words: ̄bedded system;Linux;ARM:GTK
1 引言
传统的嵌入式系统由于硬件资源方面的限制,往
往没有图形界面或者只有很简单的图形界面。近年来
以ARM,MIPS等为主的嵌入式处理器性能的提高,
以大大缩短了开发周期和成本,并且可以运用于各种
嵌入式终端。
本论文首先在开发板上构建了一个基本的Linux
系统。然后通过Scratchbox构建了一个模拟本地开发
的交叉编译环境用于后面的的x协议的移植和GTK+
库的移植,最后通过修改少量源码,移植了桌面系统
的应用程序至本系统中。
为嵌入式软件的发展提供了必要的基础。Linux作为一
个非常优秀的开源操作系统已经被广泛应用到大多数
常见的处理器上。桌面Linux的图形界面采用基于X
协议的图形库,一般可分为两种:第一,基于GTK图
形库的GNOME;第二,基于KDE库的QT。以往嵌
入式Linux的图形界面往往是采用没有x协议的嵌入
式QT图形界面。但QT是商业模式,并且其嵌入式应
用程序和桌面的应用程序开发有较大的差异,程序的
移植性不好。
2嵌入式Linux系统构建
嵌入Linux系统软件的构成一般分成四个部分
Boofloader、Linux内核、根文件系统、图形界面。其
中前三个是系统运行所必须的部分,图形界面则一般
根据实际应用的情况来决定。本节将从Bootloader移
植、Linux内核裁剪定制、根文件系统构建三个方面进
行阐述如何构建一个基本的Linux系统。
2.1 Bootloader移植
本系统硬件平台采用ARM9内核的¥3C2440处理
器,该处理器硬件性能可以运行基于x的图形界面。
由于基于x的桌面系统软件非常丰富,其经过少量修
改便可移植到基于x的嵌入式Linux系统中。从而可
①基金项目:重庆市自然科学 ̄(CSTC2010AB2001)
Bootloader所起的作用是当系统上电以后初始化
收稿时间:201 1-02.1 8:收到修改稿时间:201 I-03—19
Application Case实用案例l 37
计算机系统应用 http://www.C-S-a.org.ca 201 1年第2O卷第10期
各个硬件的各个模块,例如首先会初始化时钟,关闭
中断,配置SDRAM,以及获取其他硬件信息,并且
以某种格式将操作系统所需要的各种信息存放在一一个
固定的地址供操作系统读取。
Bootloader种类非常多,常见的有U.Boot,GRUB,
Vivi等,其中U.Boot在嵌入式范围内使用较多,Vivi
是三星正对其自己的ARM芯片设计的引导程序,
GRUB在PC机上用得非常广泛,Ubuntu、Fedora等
都是用GRUB。
本系统中采用U.Boot 1.6版本作为Bootloader,
它直接支持¥3C2410芯片,要移植到¥3C2440只需做
~
些小改动,例如时钟设置,NANDFlash读写设置等。
在U.Boot顶层Makefile添加目标板的信息(目标
板的名称定义为xy24x0):
xy24x0
_
config:unconfig
@¥(MKCONFIG)¥(@:_config=)arm arm920t xy
24x0NULL s3c24x0
然后在Board文件夹下面新建相应的目标板信息
xy24x0,其内容参照SMDK2410,修改SDRAM配置信
息,系统时钟设置,NANDFlash,网络等做相应的修
改【 , 。修改完成后通过交叉编译生成U.boot.bin文件。
make xys3c24x0
config
_
make
编译成功后会在U.Boot的根目录下产生U.boot.
bin,使用sjf240x软件通过JTAG接口烧写至目标板
N0R Flash.的零地址。
2.2 Linux内核移植
Linux是可以裁剪、功能非常强大的开源操作系
统,包含进程调度,进程通信,文件系统,网络等模
块。
本系统采用Linux2.6.22版本,其主要修改容如下:
在顶层Makefile添加以下内容
ARCH?=¥(SUBARCH)
CROSS
_
COMPILE?=
ARCH?=arm
CROSS
_
COMPILE?=arm—linux-
然后再源码根目录执行make menuconfig通过图
形界面对Linux进行配置和裁剪【2-4 :如图1所示。
最后在根目录执行make ulmage既可以生成内核
文件,在此编译过程中可能会出现一个错误,原因是
uImage是按U.Boot启动格式的内核文件,需要将
1 38实用案例Application Case
U—Boot下的mkimage拷贝至Linux内核根目录下的
scripts文件夹下才能成功生成ulmage。通过tirp将
ulmage下载至开发板RAM中,并烧写至Nand F1ash
中的0地址。其中uImage大小一般不超过2M,所以
只用擦出前2M的地址。具体操作如下:
tftp 0x32000000 ulrnage
nand erase 0 0x20000
nand write.jffs2 0x32000000 0¥(iflesize)
设置U.boot环境变量
set bootcmd‘nboot 0x32000000 0 0;bootm
0x32()( 000’
图1 Linux内核裁剪与定制
2-3根文件系统的构建
只有Linux内核还不能成为一个完整的系统,必
须还有根文件系统、配置文件、基本命令等。.通常一
个基本的根文件系统应该包括shell命令,配置文件,
设备文件,必要的库文件系统。根文件的构建,就是
创建这些文件和目录。例如在/bin、/sbin下的各种可
执行文件/etc下的各种配置文件等。BusyBox是一个
开源项目,并且它将Linux很多命令集合到一个很小
的可执行文件中。通过BusyBox创建根文件系统,只
需要在/dev目录下创建必要的设备节点,/etc目录下创
建一些配置文件即可【 。
编译安装BusyBox-
#tar xjvf busybox一1.7.0.tra,bz2
#cd/busybox—1.7.0
撑makemenuconfig
然后修改Busybox根目录下的Makefile文件,
ARCH?m ̄..arm
2011年第2O卷第l0期 http://www.c-S・a.org.cn 计算机系统应用
cross
_
COMPILE?=arm-linux一
— ——
然后安装交叉编译工具链,解压scratchbox—arm.
1inux—gcc.tar.gz
#make CONFIGPREFIX=/nfsroot install
即可在nfs—root目录下生成根文件系统的基本文
至/scratchbox/compilers中即可
件。
为了方便开发在整个移植过程中只将U—boot和
Linux内核烧写入Flash。文件系统包括后面移植的图
安装其它依赖软件:
①安装ncurses
②安装libtool
登陆scratchbox以后设置环境变量>export GCC— 形库等都通过nfs网络文件系统映射到开发板。并设
置如下:
setenv bootargs console=ttySAC0 root=/dev/nfs
nfsroot=192.168.0.10:/nfs
_
root
ip=192.168.0.9:192.168.0.10:192.168.0.1:255.255.255.0
mem=30M
至此一个基本的Linux系统已经构造完成,上电
即可运行。
3嵌入式linux图形界面的移植
3.1 Scratchbox开发环境的构建
前面构建基本Linux系统直接使用交叉编译工具
arrfl。linux.gcc即可,在本节及以后的图形界面移植有
很多依赖软件,所以采用模拟目标系统的开发环境方
式来开发,以方便依赖软件的安装和图形库的移植。
Scratchbox是一个提供模拟目标系统的开发开发
环境的跨平台开发工具,它提供了完整的集成工具链
以用来跨平台编译集成出一个Linux发行版 们。
Scratchbox主要有两个功能:
①包装交叉工具链,以“本地工具链”的形式运
行。
②在主机上模拟目标机器运行。
Scratchbox主要有以下核心文件scratchbox—core,
scratchbox・devkit・cputransp,scratchbox—devkit-debian,SC
ratchbox—devkit-doctols,scratchbox—devkit—perl,scratchbo
X-ifbs,scratchbox-toolchain—host—gcc.Scratchbox安装:
首先使用以下命令将其文件解压 ̄lJ/scratchbox
中:
拌for fin¥(1s .tar.gz);do tar xzfSf--C/;done;
运行Scratchbox,第一次运行需要进行一些设置,
默认即可。然后增加一个用户xy并登陆,命令如下:
#sudo/scratchbox/run
me
ifrst.sh
—.—.
#sudo/scratchbox/sbin/sbox
—.
adduser xy
#sudo/scratchbox/sbin/sbox
_
ctl start
¥sudo/scratchbox/login
EXEC
PREFIX=/usr/lib//
_
这样才能让编译器正确找到路径。到此为止
scratchbox开发环境全部完成 。
3.2 X的移植
Linux的图形界面完全是在用户态实现:包括窗口
的管理,桌面,文件浏览器等,都是由一个应用程序
来实现的。x协议就是来管理这些应用程序的。当很
多程序需要操作屏幕,键盘,鼠标等输入输出设备时
则由一个名为X Server的程序来统一管理,其他的应
用程序被称为X Client。X是一种协议,实现x协议
的代码有很多种,其中XFree86和Xorgt 是使用最广
泛的。
下面分别介绍各个依赖软件的作用,并以zlib安
装为例:
zlib:通用压缩解压函数库
tar XZV zlib-1.2.3一tar.gz
cd zlib.1.2.3
.
/configure-shared-prefix=/usr
Make
make install
其余安装方法与zlib安装方法类似。
libpng:png图形编码解码程序库
expat:解析xml的C语言库
freetype:跨平台的字体绘制引擎
libxml一2.0:fontconfig依赖的软件
fontconfig:用于字体的配置和访问
libdrm:提供直接访问显示设备的接口
openssl:编译X server时用到的库
本系统移植Xorg做为X协议的实现,在网站上
可以下到Xorg最新的源码,然后根据实际开发板的硬
件,修改其参数和去掉一些不用的软件包。主要修改
如下:
①修改util/modulra文件夹中的build.sh文件其中
build
_
lib()表示对哪些库进行编译。
Application Case实用案例1 39
计算机系统应用 http://www.c—s・a.org.cn 2011年第20卷第10期
build
lib()
—
译scratchbox。然后将编译的结果复制到前面制作的根
目录下,并改变其读属性:
cp-rf/scratchbox/users/xy/targets/arm/usr/nfs
{
build lib libxtrans
build lib libxau
build lib libXdmcp
Ssudo chown book:book nfs——R
构建字符目录
cd/nfs
root
_
)
②修改支持开发板LCD的分辨率,修改xserveff
hw/kdrive/src/kmode.C。例如分辨率是320 X 240则按
ln—s/usr/lib/X1 1/fonts usr/share/
照其它的格式添加如下信息。其中用到的参数只有前
运行Matchbox,使用脚本matchbox.session启动
所有程序 , 】:
三个。
{
320,240,64,16256,
】
修改完以上文件以后则进行编译
#cd Xorg
#/util/modular/build.sh-b/usr
执行以上命令以后,编译的结果放在scratchbox
里面的usr文件夹下。里面包含了x的所有部件:库,
应用程序,X server,字库,头文件等[7l。
将以上内容拷贝至nfs_root目录,则X协议移植
完毕。
3.3 Matchbox的移植
Matchbox为嵌入式设备提供了一个开放源代码
的基于x协议的GUI环境,相比GNOME,KDE等
环境具有小巧,易于裁剪等功能。Matchbox核心是一
个小型的窗12管理器,是基于PDA风格的t 。
①安装依赖的库jpeg库
编译前先修改其configure文件,添加如下类容
¥srcdir/ltconfig
¥disable_shared
¥disable_static
¥srcdir/ltmain.sh arln
然后配置并编译
>./configure-enable—shared-enable—stafic-prefix=/us
r
>make
>make install
②编译并运行matchbox:
修改文件matchbox.autobuild.sh:
DEST修改成”lusr'’,该值作为安装时候的路径。
在scratchbox中运行matchbox.autobuild.sh即可编
140实用案例Application Case
#Xfbdev-mouse mouse-keybd keyboard&
#export DISPLAY=:0
#export HOME=/root
#matchbox—session&
LCD屏幕上会显示图像,则matchbox移植成功。
3.4GTK库的移植
GTK一般用来泛指GTK。如果将GTK+和GTK
比较,则GTK表示以前的GTK库,GTK+表示目前
应用比较广泛的新GTK库。本系统则采用GTK+库。
(在本论文中,如未特别说明的GTK库是指广泛意义
上的GTK库,并非是和GTK+相对的旧版本的GTK
库)
GTK+的结构如图2所示:
图2 GTK+图形库的层次关系
X library则直接与X server通信,GLIB是GTK+
的基础底层核心库。GDK是X library函数调用的一个
基本封装。GTK+不会直接与x通信,而是通过中间
层GDK。GDK屏蔽了不同窗口的系统差异,提高了
移植性【 。
①GTK+的依赖库及其安装
GlibC语言函数库
Cairo二维图形库
Pango国际化文本处理
ATK可访问 具箱
2011年第20卷第1O期 http://www.c—s-a.org.ell 计算机系统应用
以上软件类似于3.2节的zlib,以上依赖库安装好
以后就可以安装gtk+库了。
②编译安装GTK+库
>tar xjf gtk+一2.10.9.tra.bz2
>cd gtk+一2.10.9/
>./configure-prefix=/usr
>ma=ke
>make instal1
最后编译的结果存放在scratchbox的/usr里面,将
以上/usr中的文件复制到nfs_root的/usr中,至此GTK+
库已经移植完毕。此时可启动系统,系统启动后的界
面如图3所示:
图3基于GTK库的图形
4实验结果
本节移植基于x和GTK库的应用程序xterm,这
个应用程序直接可以运行于基于GTK库的桌面Linux
系统之上。
Xterm是一个X Window上的标准虚拟终端。用
户可以在同一个显示器上开启许多xterm,每一个都为
其中运行的进程提供独立的输入输出。通过简单的配
置和编译即可使xterm运行于本系统上。
>tar xzf xterm.tar.gz
>cd/xterm一229/
>./configure-x-includes=/usr/include-x-libraries=/us
r/lib-prefix=/usr
>make
>ma=ke install
将其解压后复StJ ̄lJ/nfs_root/usr/bin目录下,即可启
动。
本实验成功地移植了x协议和GTK+库至ARM9
处理器上,最后将xterm成功地运行在该系统之上。
如图4所示:
图4 xterm运行结果
5结语
本论文将Linux系统的移植和构建作为一个基础
的部分,重点研究了在嵌入式Linux系统上移植x协
议和GTK库。最后通过少量修改移植了一个在桌面
Linux系统应用非常广泛的应用程序xterm。而基于
QT的应用程序移植要比这个复杂的多,其开发成本和
时间都要多于基于GTK库的应用程序。目前从嵌入式
Linux所发展的程度来看,X和GTK运行在嵌入式
Linux之上是发展的必然趋势。
参考文献
1冷玉林,钟将.基于ARM的嵌入式Linux系统构建.计算机
系统应用,2010,19(1 1):23-26.
2李宗海,陈蜀宇,李海伟.嵌入式Linux系统在ARM平台上
的构建.计算机系统应用,2010,19(10):153-157.
3商斌.Linux设备驱动开发入门于编程实践.北京:电子工业
出版社,2009.
4陈莉君.Linux内核设计与实现.第2版.北京:机械工业出版
社,2006.
5韩存兵.构建嵌入式Linux系统.北京:中国电力出版社,
2004.
6 Scratchbox.http://www.scratchbox.ore,/
7韦东山.嵌入式Linux应用开发完全手册.北京:人民邮电出
版社。2008.
8 Xorg.[2010—12—21].http://www.x.org/wiki/Matcbbox,[2007】,
http://matchbox—project.ore,/
Application Case实用案例141
发布者:admin,转转请注明出处:http://www.yc00.com/news/1713279022a2217630.html
评论列表(0条)