第25卷第6期(总第118期) Vo1.25 No.6(SUM No.1 18) 机械管理开发 MECHANICAL MANAGEMENT AND DEVEL0PMENT 2010年12月 Dec.20l0 基于ARM的嵌人式linux内核裁剪及移植 夭 j} 吴 菲 (中北大学信息与通信工程学院,山西太原030051) 【摘要】文章介绍了嵌入式Linux系统的框架、构建及其移植方法,并以¥3C2410处理器芯片为例,将Linux作 系统移植到ARM处理器上;并介绍了开发环境的搭建、Bootloader的架构及功能、内核、文件系统的编译及移植 方法。 【关键词】Linux ARM;剪裁;移植 【中图分类号】TP311.54 【文献标识码】A 【文章编号】 1003—773X(2010)06—0183—03 0引 言 目前,各种嵌入式Linux操作系统迅速发展,已形 成了能与WindowsCE等嵌入式操作系统进行有力竞 争的局面。嵌入式Linux操作系统的迅速崛起,主要 是由于人们对自由软件的渴望与嵌入式系统应用的特 制性,要求提供系统源码层次上的支持等,而嵌入式 用程序集合。它们包括诸如ar,as,objdump,objcopy 这样的实用程序;gcc则用来生成交叉编译器,主要生 成arm—linux—gcc交叉编译工具;glibc主要是提供用户 程序所使用的一些基本的函数库。所有用户应用程序 Linux正是为满足这一需求出现的。由于商业嵌入式 操作系统昂贵,系统源码封闭,需要较长时间来学习掌 握,因此许多用户采用免费和开放源码的嵌入式系统, 基于Linux的嵌入式系统是目前较为常用的一种开源 的嵌入式操作系统…。但Linux也有自己的缺点,内核 比较大,实时性能也比较差,所以它不适用于实时性要 求很高的领域。 1嵌入式Linux操作系统 嵌入式Linux(Embedded Linux)是指在标准Linux 都将链接到c库。避免使用任何c库函数的内核和其 它应用程序在没有该库的情况下进行编译。 从网上下载所需资源文件linux一2.6.27.tar.bz2、 binutils-2.15.tar.bz2、gcc一3.3.6.tar.bz2、glibc-2-3.2.tar. bz2、glibc—linuxthreads-2.3.2.tar.g和linux-libc-head— ers一2.6.12.0.tar.bz2。然后将这些工具包文件放在新 建的/home/downloadsf刚开始文件名是建立成down— load,后来改成downloads1目录下,最后在/home目录下 解压crosstool一0.42.tar.gz,修改arm.sh脚本,及配置文 件、添加环境变量后。重新启动终端即可链接成功。. 2.2 Bootloader的移植 . 基础上经过裁剪、修改,适用于嵌入式系统并应用于特 定嵌入式场合的专用Linux操作系统。与其它的嵌入 式操作系统相比,嵌入式Linux具有以下特点:具有开 放源代码,系统内核较小、效率高、内核网络结构完整, 针对嵌入式的存储方案,提供实时版本和完善的嵌入 式解决方案、具备一整套工具链,容易搭建嵌入式系统 的开发环境,裁减后的系统适用于诸如信息家电等嵌 入式系统的开发 。 2内核移植 Linux的程序源码全部公开,任何人都可以根据自 己的需要裁剪内核,以适应自己的系统。文章以linux 移植到ARM920T内核的¥3C2410处理器芯片为例,介 绍了嵌入式linux内核的裁剪以及移植过程,文中介绍 的基本原理与方法技巧也可用于其它芯片。 2.1交叉编译环境 系统加电或复位后,CPU通常都从CPU制造商 预先安排的地址上取指令,如基于ARM9内核的CPU 在复位时都从地址OxO0000000处取它的第一条指 令。而嵌入式系统通常都有某种类型的固态存储设备 f如ROM、EEPROM或FLASH等)被安排在这个起始 地址上。因此在系统加电或复位后,处理器将首先执 行存放在起始地址处的程序。通过集成开发环境IDE 可以将BootLoader定位在起始地址开始的存储空间 内。所以,BootLoader是系统加电后,操作系统内核 或用户应用程序运行之前,首先必须运行的一段代 码。通过这段小程序可以初始化硬件设备、建立内存 空间的映射图,从而将系统的软硬件环境带到一个合 适的状态,以便为最终调用操作系统内核准备好正确 的环境。 ¥3C2410用VIVI作为系统的BootLoader。VIVI是 CPU加电后运行的第一段程序,其基本功能是初始化 硬件设备,建立内存空问的映射图,继而为调用嵌入式 Linux内核做好准备。VIVI由两部分组成:一部分依 赖于CPU体系结构的、用汇编语言实现的代码。对硬 件环境的初始化,并为第二部分代码的执行做好准备, 嵌入式开发之前,首先要建立一个交叉编译环境, 这是一套编译器、连接器和libc库等组成的开发环 境。在主机上创建一个用于编译并将在目标上运行的 内核和应用程序的构建环境。交叉编译器完整的安装 涉及到多个软件安装,最重要的有binutils、gcc、glibc 三个 。其中,binutils主要用于操作二进制文件的实 另一部分是内存空间的映射,由C语言实现,并将内存 收稿日期:2010—05—26;修回日期:2010一O8—23 作者简介:吴菲(1983一),女,山西襄汾人,在读硕士研究生,研究方向:测试计量技术及仪器。 ・183・ 第25卷第6期(总第l18期) 机械管理开发 2010年12月 映像和根文件系统映像从FLASH中读取到RAM中, 可以设置好启动参数后启动内核。 VIVI的'stagel是BootLoader--开始就执行的操作, CROSSCOMPILE一/0p cr0sst00 l/gcc一3.3.6一glIhc一2.3.2/ arm—linu ̄bin/arm-linux;2)设置NAND FLASH分区; 在areh/arm/maeh s3c2410/devs.C中添加头文件;3)将 static struct mtd—partition partition—info[]中的分区和VI. VI中的分区分成一样大小;4)加入NAND FLASH分 其目的是为了stage2的执行以及随后的内核的执行设 置好一些基本的硬件环境。其步骤如下:1)硬件初始 化:当上电或复位后,VIVI启动,位于NAND中的前4 KB 程序便从NANDFLASH中由¥3C2410自动拷贝到step— pingstone的前4kB的内部RAM中,该RAM之后被映射 到地址0x00处。此时VIVI的前4kB代码开始运行,关 区;5)建立芯片支持;6)在NAND FLASH驱动里加入 NAND FLASH芯片支持;7)在arch/arm/machs3c2410/ machsmdk24 1 0.C中initdata部分增加gas3c—de— vice—nand,使内核启动时初始化NAND FLASH信息; 闭Watchdog,关闭中断,初始化PLL和时钟主频设定, 初始化存储器设定。2)配置串口:初始化串口控制 器。3)复制自身到SDRAM中:当初始化串口结束后, VIVI开始把自身从NANDFLASH中复制到SDRAM 中。4)跳转到stage2的人口点。VIVI的stage2阶段, 包括以下步骤:(1)继续初始化系统硬件;(2)内存影 射初始化,内存管理单元初始化;(3)初始化堆栈;(4) 初始化mtd设备;(5)初始化私有数据;(6)初始化内 置命令;(7)启动vIvI。 Bootloader的移植:①修改Malkefile,指定交叉编 译:ARCH—armCROSS COMPII E-/opt/crosstool/ gcc一3.3.6一glibe一2.3.2/。②修改/arch/s3c2410/smdk 文件,按照上面所指定大小指定NAND分区。③编译 生成VIVI。 2.3 Linux内核的移植 内核布局分为特定于体系结构的部分和与体系结 构无关的部分。内核中特定于体系结构的部分首先执 行,设置硬件寄存器、配置内存映射、执行特定于体系 结构的初始化,然后将控制转给内核中与体系结构无 关的部分。系统的其余部分在这第二个阶段期间进行 初始化。内核树下的目录arch/由不同的子目录组成, 每个子目录用于一个不同的体系结构(MIPS、ARM、 i386、SPARC、PPC等)。每一个这样的子目录都包含 kernel/和mm/子目录,它们包含特定于体系结构的代 码来完成象初始化内存、设置IRQ、启用高速缓存、设 置内核页面表等操作。一旦装入内核并给予其控制, 就首先调用这些函数,然后初始化系统的其余部分。 根据可用的系统资源和引导装载程序的功能,内 核可以绵译成vmlinux、Image或zlmage。vmlinux和 zImage之间的主要区别在于vndinux是实际的(未压缩 的)可执行文件,而zImage是或多或少包含相同信息 的自解压压缩文件一只是压缩它以处理(通常是Intel 强制的)640 KB引导时间的限制。 本实验系统运行的Linux版本是针对2.6.14.1进 行移植,下载内核代码在/linux下,移植按照以下步骤: 1)设置目标平台和指定交叉编译器:在最上层的根目 录/Makefile文件中,首先要指定所移植的硬件平台以 及所使用的交叉编译器。改为如下:ARCH—arm ・184・ 8)去掉NAND FLASH的ECC,修改drivers/mtd/nand/ ¥3C2410.e,在s3c2410一nand—init—chip函数里修改 NANDECC—SOFT为NAN ECC—NON;9)配置编译项: 通过在终端下输人命令make menuconfig来对Linux进 行配置,配置完成后通过输入命令:make即可在/arch/ arm/boot下生成所需要的内核文件zlmage。 2.4文件系统 目前嵌入式系统可以选择的根文件系统有: Romfs、CramFS、Ramfs、Jffs2、Ext2等等,本系统采 用CramFS作为uCLinux嵌入式系统的只读根文件系 统。Cramfs是Linus的一个文件系统,有很好的压 率,可直接从Flash上运行,不需load到RAM中, 节约了RAM。但Cramfs是只读的,对于需要运行时 修改的目录(如:/etc,/var,/tmp)多有不便。因此, 一般将这些目录做成ralnfs等可写的fs。可以利用工 具软件Busboy和MKCRAMFS制作CRAMFS文件系 统。首先在本地建立根文件系统myroot,然后在其目 录下建立所需要的子目录,bin,dev,usr,mnt,proc, lih,sbin等。建立好目录之后要各相应的目录复制相 应的文件或库,可以通过BusyBox来实现 。 创建Cramfs文件系统需要mkcramfs工具,mk. cramfs能把相应的Cramfs目录树压缩成为单一的映象 文件,Mkcramfs的命令格式为: Mkcramfs[一h】[一一e edition】[-I file]【一n name]Dir- Name OutFile #mkcram ̄root cramfs.Img 用以上的命令就可以生成我们需要的cramfs文件 系统映象文件,通过vivi或测试程序将其写入Flash中 就可以验证是否移植成功。 3结束语 Linux作为一种开放源代码的操作系统,以其优越 的性能在嵌人式系统应用领域占据了非常广阔的发展 空间。针对嵌人式Linux的构建,以¥3C2410处理器为 例,详细阐述整个Linux系统构建的原理框架和移植 的方法,对移植过程中的关键技术和重要步骤给出了 详细的说明。移植后的Linux系统在开发板上运行稳 定,性能良好。 (下转第186页) 第25卷第6期(总第118期) 机械管理开发 2010年12月 现电能测量数据的显示。 2.4通信单元 ’ 由于中央处理器自带4个UART接口,通过不同 的接口芯片分别实现GPRS、以太网、红外和RS一485 通信。 2.5电能测量单元 电能测量单元由电能测量芯片、4个电流互感器 和3个电压互感器组成。电能测量芯片为多功能防窃 电基波谐波三相电能计量芯片ATr7022B,该芯片参 数如下:精度:在输入动态工作范围内,非线性测量误 差小于0.1%;有功测量满足0.5 S,无功测量满足2级; 适用于三相三线模式和三相四线模;具有SPI接口,便 于与外部通信;单+5 V供电。 2.6供电单元 集中器使用交流三相四线供电,在断一相或两相 电压的条件下,交流电源能维持终端的正常lT作和通 信。工作电源额定电压:220V/380V,允许偏差±20%; 频率50 Hz,允许偏差一6%~2%。 功率:视在功率不大于15 w,有功功率不大于10 w。 3软件设计 图2系统软件流程图 参考文献 集中器软件实现的功能有:1)电能表数据采集; 2)电能表数据存储;3)抄表方案参数设置或查询;4) 本地事件处理和告警;5)电能表数据上传;6)本地终 端维护。 主程序软件流程框图,见图2。 马 潮.AVR单片机嵌入式系统原理与应用实践【M】.北京 北京航空航天大学出版社,2007. ATmegal28/2560单片机原理与高级应用【M].北京 [2] 霍宏伟-中国林业出版社,2006. Low——Voltage Concentrated Meter Reading Terminal Based on AVR Single-chip Microprocessor YANG Hui,QI Sui-Ping,CHU Wei-xian,WANG Dong-ming (Institute of Oceanographic Instrument of the Science of Shandong Province,Qingdao 266001) [Abstract] In the power industry,it is a trend to collect energy data of a district automatically by use of low—voltage concentrated meter reading termina1.To avr microcontroller,We develop a low—cost,stable and reliable low—voltage concentrated meter reading terminal,it can set parameters of electric meters,collect and save energy data and event data,and it can response the call of main station,report all kinds da— ta to main station. [Key words] ATMEGA1280:Low voltage concentrated meter reading;Terminal (上接第l84页) 参考文献 系统开发[DB/OL].http://www.ibm.eom/developerworks/en/ linux/embed/embdev/samsung.corn.2004—03. 【1]王志婵,李咏梅.两种嵌入式操作系统的简单分析【JJ.青 岛大学学报,2003(3):333—336. 【2】田泽.嵌入式系统开发与应用【M】.北京:北京航空航 天大学出版社,2004. [4] 周宏霖.CramFS在Linux嵌入式环境的应用[EB/OLI. 【2007—08—17]http://www.1ee一1.com/hlchou/LinuxCramFS. htm. f31 Anand K SanthaHam,Vishal Kulkarn.嵌入式设备上的Linux ARM—based Embedded Linux Kernel Cut—and—transplant WUFei fCollege ofInformation and Corm1mnication Engi¨eering.North Universit}ofChina. Faiyuan 030051,China) [Abstract]This paper introduced a method of embedded Linux system building,framework and transplanration and took the¥3C24.10 chip as an example.transplanted Linux operation system to ARM,gave a detailed introduction the development,Bootloader architecture,ker- nel and the file system compilation and transplantation method. [Key words]I.inux;ARM;Kerna]cutting;Transplantation ・l86・