基于ARM9的嵌入式Linux系统分析与移植

基于ARM9的嵌入式Linux系统分析与移植


2024年4月16日发(作者:)

第23卷第4期 

甘肃科学学报 

Vo1.23 No.4 

2011年1Z月 

Journal of Gansu Sciences 

Dec.2011 

基于ARM9的嵌入式Linux系统分析与移植 

缑新科,滕永 

(兰州理工大学电气工程与信息工程学院,甘肃兰州 730050) 

摘 要: 结合¥3C2440处理器和Mini2440实验平台,进行了嵌入式Linux的移植.实施了U—Boot 

移植,解决了U—Boot中关于Nand'Flash启动问题.分析了Linux的内核结构,从而实现了内核移 

植.测试结果证明该方法是可行的. 

关键词:Linux;U-Boot;ARM9;嵌入式系统 ‘ 

中图分类号:TP316 文献标志码: A 文章编号:1004—0366(2011)04—0106—04 

Analysis and Porting of Embedded Linux System Based on ARM9 

GOU Xin—ke,TENG Yong 

(Co'lege of Electrical and Information Engineering,Lanzhou University of Science and Technology.Lanzhou 730050。China) 

Abstract: Based orI¥3C2440 processor and Mini2440 platform,the porting of the embedded Linux system 

was carried out successfully.First,based on solving the problem of Nan&Flash,the U—Boot was ported to 

the platform.Second,the kernel of the Linux was analyzed and ported too.The test results suggest that 

this method iS feasible. 

Key words:Linux;U—Boot;ARM9;embedded system 

嵌入式系统和PC系统启动的方式类似,都需 

在此基础上提出了将功能强大的U-Boot和Linux 

要有一定的引导程序.在PC机启动的时候,首先 内核结合移植到特定目标板上的思路和方法. 

运行BIOS(Basic Input/Output System).这个系统 

可以把系统从硬件启动过渡到软件管理中,为下一 

1 U-Boot分析及启动过程 

步从硬盘中将操作系统调用至内存运行做好准备. 

U—Boot(Das u-Boot)其含义为Universal Boot- 

而嵌入式系统的这种类似于B10S的系统,我们称 

Loader,是由德国DENX软件工程中心开发和维护 

之为Boot—loader[1],Boot—loader与系统的硬件息 的针对嵌入式CPU的Boot—loader,是遵循GPL条 

息相关.而在嵌入式系统中,不同结构的CPU其对 

款的开放源码项目[2]. 

应的Boot-loader也都是不同的,即便开发板所选 

1.1 U-Boot启动分析 

用的处理器是同一型号,仅仅是外设的不同,也需 

U—Boot的启动分为两个阶段.在第一个阶段主 

要进行Boot—loader的移植工作.因此想要在嵌入 

要完成以下工作: 

式世界里建立一个通用的Boot—loader几乎是不可 

(1)基本的硬件初始化; 

能的. 

(2)为下一阶段准备RAM空间; 

Linux是源代码开放的,支持多用户、多进程、 (3)将第二阶段所需数据转移至RAM中; 

多线程、实时性较好的功能强大的操作系统.它可以 

(4)设置堆栈指针和存取方式,准备好第二阶 

运行在x86,680x0,Po ̄verPC,MIPS,ARM等平台 段需C语言环境. 

上,已经是目前运行硬件平台最多的操作系统.我们 

第二阶段的主要工作: 

收稿日期:2011一O4—14 

第23卷 缑新科等:基于ARM9的嵌人式Linux系统分析与移植 107 

(1)从汇编语言跳转到main入口函数; 

(2)初始化本阶段要使用的硬件设备; 

(3)检测系统内存映射; 

(3)加载内核映像和文件系统. 

1.2 U-Boot结构分析 

添加 

¥3C2440

config:unconfig@.mkconfig¥(@:

一一 

config=)arm arm920t¥3C2440. 

配置完成后,在board中建立S3C244Oboard目 

录,并复制smdk2410目录中的内容,之后执行 

make smdk2 4 1 0config. 

为了实现U-Boot的移植,首先必须对U-Boot 

中的文件结构有一定的了解.结合本平台的需要,我 

们主要在ARM环境下对主要部分作一定分析. 

U-Boot结构如图1所示. 

其次在include/configs/中建立配置头文件,然 

后指定交叉编译工具的路径以及测试编译. 

以上的工作是U-Boot的移植前序步骤,不过 

这里存在一个问题:代码搬运.本平台是基于Nand— 

Flash启动,但U—Boot并不支持这一启动方式,这 

就需要我们对这部分进行一定的修改和完善. 

2.2 NandFlash中的代码搬移 

(1)前4 K的问题 一旦¥3C2440配置成从 

图1 U-Boot结构 

NandFlash启动,前4 K数据自动复制到4 K的内 

图1中Board目录为依赖于具体的平台;CPU 

存RAM中,并将OxO0000000作为内部RAM的起 

目录为U-Boot所支持的CPU;Lib—arm目录为针 

始地址,CPU从OxO0000000的内存位置开始运行 

对ARM结构体系的通用文件;Include目录为头文 

汇编程序.程序员要实现的就是如何在4 K大小的 

件和开发板配置文件;Common目录主要是用于实 

空间中添加最核心的系统启动程序. 

现各种命令的C文件. 

(2)启动程序的流程在启动程序的前4 K空 

间,必须完成两个任务:一是完成¥3C2440的核心 

2 U-Boot移植过程 

配置;二是如何把启动程序(UBOOT)的其余部分 

2.1系统结构与文件配置 

拷贝到RAM中. 

实验平台是由三星¥3C2440微控制器、128 M 

(3)NandFlash详细设置 首先在include/ 

NandFlash、64 M SDRAM、串口、以太网口、JTAG 

configs/smdk2410.h中力Ⅱ人CONFIG一¥3C2440一 

口等组成,其功能如图2所示. 

NAND BO0T,如下:#define CONFIG S3C2440 

NAND_B00T 1支持从NandFlash中启动.之后在 

start.S中添加操作NandFlash控制器的代码,并且 

在另一个C语言文件中实现NandFlash的读函数 

nand

read().要注意的是在Makefile中添加对这 

个文件的编译.这样就实现了U—Boot重定位功能, 

即将U—Boot从NandFlash拷贝到SDRAMY中.程 

序流程如图3所示. 

2.3 NandFlash读写命令问题 

在U-Boot下主要是通过命令行的方式来实现 

图2开发板的组成 

对NandFlash的操作.用到的主要数据结构有: 

struct nand

flash

dev、struct nand

chip.前者包括 

为了缩短开发周期,通常都是选用与自己开发 

设备的信息,诸如芯片型号、存储容量、设备ID、I/0 

板硬件相似,且已经获得U-Boot支持的平台为模 

总线宽度等信息;后者是NandFlash工作时所支持 

板来进行移植.选用SMDK2410,因此移植所要做 

的信息.U—Boot支持NandFlash命令移植主要是有 

的工作主要是针对¥3C2410和¥3C2440、S K2410 

如下的步骤:设置配置选项、加入自己的NandFlash 

和S3C2440board的外设不同做相应的修改,并添 

芯片型号、编写自己的NandFlash初始化函数.以 

加新的功能. 

上就完成了U—Boot对NandFlash的支持,使用交 

我们在执行编译之前,首先要对Makefile文件 

叉工具链编译完善之后的U—Boot,生成uboot.bin 

108 甘肃科学学报 2011年第4期 

的二进制文件.使用Jtag将编译好的U—Boot烧写 

到开发板中去. 

图3 NandFlash流程 

2.4移植结果 

U-Boot中的Makefile文件体现了U—Boot内 

部代码之间的依赖关系.而要生成相应映像文件,只 

要通过使用make命令就可以实现.之后使用交叉 

开发工具链arm-gcc-linux就可以生成二进制的文 

件.成功移植后的串口输出U—Boot信息如图4 

所示. 

U-Boot1.1.6(.Tan 6 201l—Ifi:16:So) 

DR^冀:64岫 

Flash:2岫 

N舳:l28崛 

-矗rning—bad CItc.using detamt environment 

In : serial 

Out:serial 

Err : seria1 

n 24JI∞nand{nfo 

图4 U-Boot烧写结果 

3 Linux内核移植过程 

Linux操作系统因其开放源代码、易于开发、功 

能强大、稳定、成本低等优势迅速跻身于主流嵌入式 

开发平台.对于Linux在嵌入式系统中的应用,都是 

根据各种系统的多样性,对内核进行一定的裁剪和 

修改,而不是生搬硬套. 

3.1 Linux结构分析 

Linux内核主要由5个子系统组成:进程调度、 

内存管理、虚拟文件系统、网络接口、进程间通信. 

Linux内核非常庞大,一个功能齐全,包罗万象 

的内核有数百兆之多,其整体分布如图5所示. 

图5 Linux内核组织结构 

3.2移植过程 

(1)下栽Linux内核并修改Makefile文件 ht— 

tp://www. kerne1. org/pub/linux/kerne1/v2. 6/ 

linux-2.6.29.5.tar.bz2下载linux2.6.29.5内核, 

并修改内核目录树根下的Makefile,找到ARCH和 

CROSS

C0MPILE,修改ARCH?=arm CROSS 

COMPILE?=arm-linux-gcc,然后设置路径环境 

变量,使其可以找到对应的交叉编译工具链. 

(2)指明分区信息 ①建立NandFlash分区 

表:目标板计划分4个区,分别存放U—Boot,内核, 

文件系统以及用户应用系统空间;②加人Nand— 

Flash分区;③建立NandFlash芯片支持;④加入 

支持NandFlash的驱动. 

(3)指定启动时初始化 当内核启动时,我们 

需要依据之前对分区的设置来进行初始化配置,主 

要修改arch/arm/machS3C2410/machsmdk2410.C 

文件. 

(4)禁止Flash ECC校验 由于U-Boot所使 

用的是由软件ECC算法产生ECC校验码,这与内 

核校验的ECC码不一样,所以我们在这里选择禁止 

内核ECC校验.在driver/mtd/nand/S3C2410.C这 

个文件中,我们找到¥3C2410一nand—init—chip()函 

数,在该函数体最后一行加上一条语句:chip>ecc— 

mode ̄NANDl_ECC

NONE. 

_

(5)配置并编译内核 对于内核的配置,我们 

常用的方法就是在内核目录下执行:make menu— 

config命令.图形化内核配置窗口见图6.在这里有 

选择的选取内核的部分功能,以达到缩小内核的体 

积的目的. 

在对内核配置完成后,可以通过编译工具arm— 

gcc—linux来编译刚刚保存的内核.这可以生成内核 

映像文件.通过之前已经烧写好的U—Boot,可以将 

内核也烧写到NandFlash中去. 

第23卷 缑新科等:基于ARM9的嵌入式Linux系统分析与移植 1O9 

是从NorFlash的原理,同时也给出了编写相关代码 

f’J Enable 1oadable module support…》 

的思路.并在此基础上根据硬件的特点,给出了 

Enable the b1OCk 1ayer …

S ̄-ste=T 

f s support

’ 

…, 

Linux操作系统移植的详细思路和步骤. 

参考文献: 

一一 

kerne l Feat ures ~一> 

t ot optiONS 一' 

l CPu l ower Management …' I 

Sonia Thakur,J ames M Conrad.An Embedded Linux Based 

Navigation Sy ̄em for an Autonomous Underwater Vehicle 

I 

l 

} Ioattng point emulati0n——> 

{serspace bi nary formats—一> 

图6内,lt ̄l窗口 

I 

I 

[J3.IEEE,2007:56—58. 

田泽.嵌入式系统开发与应用[M].北京t北京航空航天大学 

出版社,2005. 

4 结语 

Boot-loader是系统上电后运行的第一段代码, 

主要完成一系列初始化工作.U-Boot是比较通用的 

何景波.基于Linux的嵌入式应用系统技术研究[D].太原: 

中北大学,2009. 

Christopher Hallinan.Embedded Linux Primer[M].影印版. 

北京t人民邮电出版社,2008. 

开源Boot—loader.它功能强大,支持多种CPU架 

构,多种操作系统内核.这使得U—Boot成为主流的 

嵌入式Boot—loader,同时Linux操作系统因源码开 

颜华.基于ARM的嵌入式Linux操作系统研究与移植[D]. 

北京z北京工业大学,2007. 

Karim Yaghmour。Jon Master.Building Embedded Linux Sys- 

放、易于开发、功能强大、稳定、成本低等优势迅速称 

tems[M].2rd.0’Reilly,2008. 

Michael Barr,Anthony Massa.Programming Embe dded Sys・ 

为嵌入式系统中的主流操作系统.将这二者相结合, 

对嵌入式系统来说意义重大.在简要地介绍了 

Boot-loader和Linux操作系统的基础上,比较详细 

tems[M].影印版.南京:东南大学出版社,2007. 

ADI.ADSP_BF561 Blackfin Processor Hardware Reference 

地分析了U—Boot和Linux的性能特点. 

在具体实践中将U-Boot移植到基于 20t 

[z].2003. 

DAVICOM Semiconductor Inc.DMg000 A Ethem et Contro1. 

1et with General Processor Interface Data SheetEM].2006. 

三恒心科技有限公司编著.ARM9原理与应用设计rM-I.北 

京:电子工业出版社,2008. 

的处理器¥3C2440上并给出了其大致过程,给出了 

实现U—Boot自动识别启动Flash是NandFlash还 

作者简介: 

缑新科(1966一),男,甘肃省天水人,现任兰州理工大学电气工程与信息工程学院教授,硕士研究生导师.主要研究方向为 

智能结构及其动力学系统控制. 


发布者:admin,转转请注明出处:http://www.yc00.com/news/1713279434a2217719.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信