基于ARM的嵌入式Linux图形界面的研究与实现

基于ARM的嵌入式Linux图形界面的研究与实现


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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信