文档库 最新最全的文档下载
当前位置:文档库 › 基于ARM9的嵌入式linux系统移植

基于ARM9的嵌入式linux系统移植

-116-

引言

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、

功耗有严格要求的专用计算机系统。[1]

嵌入式Linux系统资源有限、专用性强,在部署到嵌入式平台之前必须对其进行裁剪、定制,减小嵌入式Linux系统体积,提高运行效率。

由于Linux具有内核小、效率高、源代码开放和强大的网络支持等一系列独特优势,嵌入式Linux将在未来的嵌入式发展中占最大的优势,其巨大的市场潜力已经吸引了众多的厂商进入这一领域。目前,国外的著名厂商,例如IBM、DELL等,几乎都在嵌入式Linux操作系统的研究、开发和推广方面投入了巨资。国内

有一些公司,例如华恒、共创软件联盟、中软、红旗、万禾等,也开始积极从事嵌入式Linux操作系统的研究、开发和推广。随着微电子技术的不断创新和发展,嵌入式系统(EmbeddedSystems)作为计算机应用的一个重要领域,已深入到社会的方方面面,越来越被人们所关注。嵌入式系统出现于60年代晚期,它最初被用于控制机电电话交换机,如今已经广泛地应用于工业制造、过程控制、通讯、航空航海、军事装备等相关行业,而且深入到信息家电、娱乐、社会文化等各个领域,掀起了一场数字化的技术革命。随着多媒体技术与Internet应用的迅速普及,消费电子(Consumptive electron)、计算机(Computer)、通讯(Comunication)等3C一体化趋势日趋明显,极大地推进了嵌入式技术的发展,使嵌入式技术再度成为研究与应用的热点。

1交叉编译环境的创建

基于Linux 操作系统的应用开发环境一般是由目标系统硬件(开发板) 和宿主PC机所构成。目标硬件开发板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主PC 机来完成(所以称为交叉编译) 。双方之间一般通过串口、并口或以太网接口建立连接关系。交叉编译工具是嵌入式开发的基础,完善的工具链可以保证项目开发的进度和质量。交叉编译工具可以通过两种方式获得,一种是直接从网上下载已经制作好的交叉编译工具,另一种就是自己制作交叉编译工具,制作方式是:(1)下载源码,准备补丁;(2)设置环境变量,指定交叉编译器的安装目录;(3)内核头文件的设置;(4)二进制工具包binutils的设置;(5)编译器gcc的设置;(6)C链接库glibc的设置;最后是完整编译器的设置。本文用的交叉编译工具为arm-linux-gcc4.0.2,将交叉编译器解压到相应的目录下,命令为# tar-zxcfarmlinuxgcc4.0.2.tar.bz2,要注意解压后的路径。

本文所使用的嵌入式系统目标平台是

SamSung公司基于ARM920T 内核的嵌入式处理S3C2410,ARM2410开发板支持WINCE、Linux、UCOS以及NUCLEUS嵌入操作系统。面向手持式设备以及高性价比,低功耗的应用,内部集成LCD,USB等控制器。Linux内核采用2.6版本的内核,它吸收了一些新技术,在性能,可靠性和可扩展性方面有较大提高。本设计基于fedora -12进行开发。

2 嵌入式linux系统组成

嵌入式Linux系统从软件方面来说主要包括以下几个部分,Bootloader(引导程序),内核启动参数,内核(kernel)和根文件系统四个部分,在Flash中存储的示意

图如图1所示。

[2]

图1系统组成

2.1bootloader的移植

Bootloader指系统启动后,在操作系统内核之前运行的一小段程序。Bootloader主要完成硬件检测和系统引导,操作系统的主要功能之一是管理系统硬件设备,屏蔽硬件细节,向其上的应用提供标准接口,易于应用程序的编写和移植。我们可以初始化硬件设备,建立内存空间的映射图,从而为最终调用操作系统内核准备好正确的环境。Bootloader是依赖于硬件而实现的,但是不管事什么样的开发板,都是遵循以下流程:先关闭中断,设置cpu的速度和时钟频率,初始化RAM,将代码从FLASH中复制到RAM中,设置堆栈,这样就搭建了一个C运行环境,之后跳转到C入口点,就是初始化驱动设备,设置

linux内核参数,启动linux。[3]

下载u-boot压缩包,经过解压修改和设置一些参数后,通过JTAG接口烧写到开发板的Flash 中。

DOI:10.3969/j.issn.1001-8972.2011.07.061

基于ARM9的嵌入式linux系统移植

李胜琴 许岩

西北师范大学数学与信息科学学院,

 甘肃 兰州 730070

-117-

2.2 linux内核的移植linux内核源码树[4]

/include子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其他模块重建内核。

/init子目录包含了内核的初始化代码,这是内核工作开始的起点。

/arch子目录包含了所有硬件结构特定的内核代码,如i386和alpha。

/drivers子目录包含了内核中所有的设备驱动程序,如块设备和SCSI设备。

/fs子目录包含了所有的文件系统的代码,如ext2和vfat等。

/net子目录包含了内核的联网代码。/mm子目录包含了所有内存管理代码。

/ipc子目录包含了进程间通信代码。/kernel子目录包含了主内核代码2.2.1内核源码下载

标准的linux内核源码可以从http://www.kernel.org/pub/linux/kernel/v2.6/下载,也可以从镜像ftp站点获得,笔者用的是linux-2.6.26.tar.gz,将其解压到相应的目录下,命令为#tar–zxvflinux-2.6.26.tar.gz。armlinux是针对标准linux内核为arm做的补丁,也可以直接下载针对linux内核打好arm补丁的源码。

2.2.2 内核配置

内核配置通常是对内核的各个功能进行取舍配置,将配置的方案保存到configure文件中。在交叉编译内核之前,对编译选项的配置是很重要的,本文中选择对S3C2410开发板的支持,选择FileSystem支持,对于File System应确保如下支持:

(1)proc file system support(2)ROM file system support(3)Second extended fs support然后配置块设备,使其支持RAMdisk。在编译内核的时候,就会根据此配置进行取舍编译。在编译目录下通过make menuconfig命令进入内核配置界面。

修改内核目录树根下的Makefile时,指定目标平台为arm,指定交叉编译器, 可向Makefile中添加如下内容:

ARCH ?= arm

CROSS_COMPILE ?= /usr/local/arm_cross/4.0.2/bin/arm-linux-

2.2.3 内核编译

编译内核使其生成内核映像,编译

内核有非压缩和压缩两种方式。[5]

压缩方式,内核从ROM中启动,将被压缩的内核压缩到RAM,然后再执行内核,有点是可以将内核事先烧写至flash中,而无需手工下载,这种方式使用makezimage来编译内核。

#make dep //设置依赖关系

#make zIamge //编译内核交叉编译内核时间相对较长,编译完成后会形成一个文件zImage,这就是编译成功后的ARMLinux内核。

2.3根文件系统的制作

根文件系统一直是linux系统不可或缺的组件,在嵌入式linux中,内核在启动期间进行的最后操作之一就是安装根文件系统。Busybox是构建嵌入式根文件的软件,用它制作根文件系统简单,设置灵活。根文件系统一般都包括:1)基本的文件系统结构,包含一些必需的目录,比如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp;2)基本运行程序所需要的库函数,如:lib/uc-libc;3)基本的系统配置文件,如:rc,inittab等脚本文件;4)必要的设备文件,如:/dev/tty,/dev/fd0;5)基本的应用程序,如:sh,ls,cp,mv等;根文件系统制作就是生成包含上述各种文

件系统的过程。

[6]

2.3.1安装busybox

从网站http://www.busybox.net/下载busybox-1.17.4.tar.bz2,使用tar-zxvf busybox-1.17.4.tar.bz2解压,进入busybox-1.17.4.o目录后执行 makemunuconfig命令可进入配置界面。修改busybox根目录下的makefile使用交叉编译器。将ARCH?=¥(SUBARCH)修改为ARCH?=arm,将CROSS_COMILE?修改为CROSS_COMILE?=arm_linux-,修改后执行make命令编译busybox。然后安装busybox。

2.3.2创建根文件

开发板的根文件系统在主机上的目录为/home/work/lsq,在此目录下使用mkdir命令创建dev,etc,home,lib,mnt,proc,root,sys,tmp目录。在/etc目录下存放配置文件;创建etc/inittab文件,init进程根据/etc/inittab文件来创建其他子进程;创建etc/fstab文件,fstab文件描述系统中各种文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作。

2.3.3制作yaffs2文件系统映像文件制作文件系统映像文件,就是将一个目录下的所有内容按照一定的格式存放到一个文件中,这个文件可以直接烧写到存储设备中。

在yaffs源码中有个utils目录,里面有mkyaffsimage和mkyaffs2image的源代

码,前者制作yaffs映像文件,后者制作yaffs2映像文件,将下载的yaffs2解压,在目录/Dovelopment下有两个文件夹;进入yaffs2/utils目录,加入两个文件:nand-ecc.c和yaffs_packed-tagsl.c;修改makefile文件

MKYAFFSSOURCES=mkyaffsimage.c yaffs_packedtagsl.c nand-ecc.c然后执行make生成mkyaffs2image工具,复制工具到/usr/local/bin目录下,执行#mkyaffsimage2 lsq/pyaffs2.img命令可生成文件系统映像文件,执行#gzip –pyaffs2img最终生成嵌入式linux根文件系统的映像文件为pyaffs2-.img.gz。根文件系统制作完成。

3下载并执行映像文件

下载linux内核映像和根文件系统映像文件到目标板

#tftp 30008000 zImage /*下载linux内核映像到目标板内存*/

#fftp 300800000 pyaffs2.img.gz /*下载根文件系统映像到目标板内存*/

#go 30008000 /*启动目标板linux*/。

重启开发板,能看到嵌入式linux系统在超级终端完整的打印信息,说明嵌入式linux系统成功的移植到S3C2410上去了。

4总结

文章研究了基于arm-linux和S3C2410的嵌入式系统设计,详细地介绍了移植的基本方法,重点说明了移植过程的关键步骤。这对于嵌入式linux系统的

应用以后的发展具有重要意义。

相关文档
相关文档 最新文档