您好,欢迎来到知库网。
搜索
您的当前位置:首页基于S3C2410处理器的Linux移植

基于S3C2410处理器的Linux移植

来源:知库网
维普资讯 http://www.cqvip.com 2007年第8期 中图分类号:TP316 文献标识码:A 文章编号:1009—2552(2007)o8—0O97—04 基于¥3 C2410处理器的Linux移植 杨建伟,杨燕翔 (西华大学电气信息学院,成都610039) 摘要:描述了将linux移植到基于¥3C2410处理器的目标板上的方法与过程。首先介绍嵌入式 Linux移植方法,并说明如何搭建移植环境,着重介绍Bootloader的架构和功能以及Linux内核的 移植。结果证明该方法是可行的,移植后Linux在嵌入式系统中运行良好。 关键词:嵌入式系统;¥3C2410处理器;Linux;Bootloader;移植 Linux transplant based on the processor of S3 C24 1 0 YANG Jian—wei,YANG Yah—xiang (School ofElectric and Information Engineering,Xihua University,Chengdu 610039,China) Abstract:This paper introduces the method and procedure of making Linux transplanted onto the target board based on the processor of¥3C2410.First it says the transplnated method of embedded Linux,then it describes how to build up an environment for trnasplnat,focusing on the framework and functionality of Boofloader and rtnasplnat of Linux keme1.1his method proves high effective.the trnasplnated Linux in the embedded system rtlns wel1. Key wordsi embedded system;¥3C2410 processor;Linux;Bootloader;transplant 0 引言 主要面向手持式设备以及高性价比,低功耗的应用, 嵌入式系统是以应用为中心,以计算机技术为 内部集成LCD,USB等控制器。Linux内核采用2.6 基础,并且软硬件可裁剪,适用于应用系统对功能、 版本的内核,它吸收了一些新技术,在性能,可靠性 可靠性、成本、体积、功耗有严格要求的专用计算机 和可扩展性方面有较大提高。 系统。ARM嵌入式芯片是一种高性能、低功耗的 1 嵌入式Linux移植方法 RISC芯片,世界上几乎所有的主要半导体生产商都 嵌入式Linux系统包括Bootloader(引导程序), 生产基于ARM体系结构的通用芯片,且基于ARM 内核启动参数,内核(keme1)和根文件系统四个部 内核的嵌入式处理器已经成为市场主流。而Linux 分,在Flsah中存储的示意图如图1所示。 是免费发行的、快速高效的操作系统,在过去的几年 中,基于开源组织的unux嵌入式操作系统得到了 长足的发展。嵌入式Linux是按照嵌入式操作系统 的要求设计的一种小型操作系统。由一个内核以及 一些根据需要进行定制的系统模块组成。其内核很 图l l ̄lash中存储的示意图 小,一般只有几百kb,即使加上其他必要的模块和 应用程序,所需的存储空问也很小。非常适合于移 将嵌入式Linux移植到特定的硬件平台上,一 植到嵌入式系统中去,同时它还具有多任务多进程 般需要以下五个步骤: 的系统特征。 收稿日期:2006—12—25 本文所使用的嵌入式系统日标平台是Samsung 作者简介:杨建伟(1979一)男,西华大学电气信息学院2005级硕士 公司基于ARM920T内核的嵌入式处理器¥3C2410, 研究生,主要研究方向为嵌入式系统 --——97‘--—— 维普资讯 http://www.cqvip.com (1)准备工作。包括从相关网站下载嵌入式 安装完毕后,查看/usr/local/bin目录下是否存在 Linux的源码包,搭建交叉编译开发环境,配置主机 cross等文件,如果存在,基本可以确定交叉编译器 的开发环境等工作。 安装成功。 (2)配置编译U—boot,并将其烧写到目标平台 (3)添加交叉编译器的路径,在/etc/pmfile文件 的Hash上。 中修改PATH环境变量。 (3)配置和编译Linuxkemel。必要时还要对源 export PATH=¥PATH:/usr/local/arm/3.3.2/bin 码进行一定的修改,并将其移植到目标平台上。 (4)制作RAMdisk来挂接Linux的根文件系统, 2.3主机开发环境的配置 并在RAMdisk中添加自己的应用程序。 (1)主机环境配置:首先要确认主机的网络接口 (5)部署Linux系统使目标板脱离交叉开发环 驱动成功,并且配置网络接口的II)地址。可以通过 境,直接在目标机上本地启动运行。 ifconfig命令查看所有网络接口,还可以配置网口的 本文将以Samsung公司的处理器¥3C2410为 II)地址。 例,从上述五个方面详细地分析和说明嵌入式Linux (2)串口控制台工具:串口通信接口很适合作为 系统在¥3C2410上的移植过程。 控制台,在各种操作系统上一般都有现成的控制台 2交叉开发环境的建立 操作程序可以使用。Windows操作系统有超级终端 (FlashFXP)IE具;Ijnu)【操作系统有minieom工具。 2.1交叉开发模型 (3) 服务: 是目标板下载映像所需要 由于嵌入式系统硬件上的特殊性,一般不能安 的网络服务。以root身份登录,完成下面的操作: 装发行版的Linux系统,所以需要专门为特定的目 编辑tftp配置文件 标板定制Linux操作系统,这必然需要建立交叉开 发环境,其模型如图2所示。图中TARGET是目标 ¥vi/etc/xinetd.d/trtp 板,Host是开发主机。在开发主机上安装桌面的 修改disable一行,把yes改为no; Linux操作系统(如Redhat9等),Linux引导程序、内 使用下面的命令使xinetd重新启动 服务 核和根文件系统,经过交叉编译后下载到目标板上 ¥/etc/init.d/xinetd restart 运行。目标板和主机之间通常可以使用串口,以太 网接口,USB接口以及JTAG接口等连接方式。 3 嵌入式Hnux的移植过程分析 3.1 u—boot移植 Pc主机 ¥3C241O开发板 Bootloader是在操作系统内核运行之前的一段 (HOST) (TARGET) 程序,通过这段小程序,可以初始化硬件设备,建立 Bootloader Bootloader 内存空间的映射图,从而将系统的软硬件环境带到 内核 内核映像 一根文件系统 下载剑开发板 bx 根文什系统映像 个合适的状态,以便为最终调用操作系统内核准 备好正确的环境。Bootloader的实现依赖于硬件,特 别是在嵌入式系统,ARM处理器芯片商很多,每种 图2交叉开发模型 芯片都有自己的Bootloader,而Bootloader也依赖于具 2.2交叉编译工具的安装 体的嵌入式板极设备的配置。也就是说,对于两块 现在在网上很容易就可以下载到已经做好的工 不同的嵌入式板而言,即使它们是基于同一种ARM 具链, 免费提供的工具链包括三个部分:binu. 芯片而构建的,要想让运行在一块板子上的Boot. lils,gcc和glibe,其中binutils是二进制处理工具,gcc 1oader程序也能运行在另一块板子上,通常也都需要 是编译工具, bc是链接和运行库。交叉编译工具 修改Bootloader的源程序。u—boot是遵循GPL条款 的安装步骤如下: 的开放源码项目,并且已经成为ARM平台事实上的 (1)从ARM Linux的官方站点http://alot.Linux. 标准Bootloader。 org.uk下载or( ̄s一3.3.2.tar.bz2包。 3.1.1 Boofloader启动流程 (2)在/usr/loeal/arm下解压。 Boofloader启动分为两个阶段。 ¥tar—jxvf cross一3.3.2.tar.bz2 (I)Bootloader的stagel主要完成以下工作: 基本的硬件初始化。屏蔽所有的中断,设置 ¥./cross一3.3.2 CPU的速度和时钟频率,RAM初始化,初始化,lED 一一98一 维普资讯 http://www.cqvip.com 关闭CPU内部指令/数据cache。 为加载Bootloader的stage2准备RAM空间。通 常为了获得更快的速度,将第二阶段加载到RAM空 间来执行。 拷贝Boofloader的stage2到RAM空间中,要注 意stage2的可执行映像在固态存储设备的存放起始 地址和终止地址。 设置堆栈指针sP,堆栈指针的设置是为了执行 c语言代码作好准备。 跳转到stage2的C入口点。在上述一切都就绪 后,就可以跳转到Bootloader的stage2去执行了。 (2)Boofloader的stage2主要完成以下工作: 用汇编语言跳转到main入口函数。 初始化本阶段要使用的硬件设备,包括初始化 串口,计时器等。 检测系统的内存映射,所谓内存映射就是指在 整个4GB物理地址空间中有哪些地址范围被分配 用来寻址系统的RAM单元。 加载内核映像和根文件系统映像,这里包括规 划内存布局和从Flash上拷贝数据。 设置内核的启动参数。 调用内核。 3.1。2 u—boot移植主要步骤 移植之前,需要先分析一下u—boot已经支持 的开发板,比较出硬件最接近的开发板。选择的原 则是:首先处理器核相同,其次处理器结构相同,然 后是以太网口等外围接口相同。u—boot移植主要 步骤如下。 (1)从http://www。soureforge.neffproject/u—boot 网站下载u—boot源码包:u—boot一1。1.2.tar.bz2。 uboot一1.1。2版本已经支持smdk2410板(韩国三星 的¥3C2410开发板),因此可以基于smdk2410移植。 (2)解压后配置编译smdk2410板的u—boot: ¥cd一/workspace ¥tra—jxvf u—boot一1.1.2.tar。bz2 ¥cd U—boot一1。1.2 (3)在Makefile中修改交叉编译工具链前缀 CROSSCOMPILE: 把CROSS COMPILE=arlYl—linux一改为实际编 译器的目录,即 CROSSCOMPILE:/usr/1ocal/a ̄rn/3.3.2/bin/ arlYi——linux——gcc (4)配置编译smdk2410板: ¥make smdk2410一config;make (5)移植u—boot一1.1.2支持实验板: 修改Makefile,在顶层Makefile文件添加如下两行 ¥3C2410一conflg:unconfig @/mkconflg¥(@:一conflg=)artn arm920t s3c2410 其中ARM是CPU的种类,arm920t是ARMCPU 对应的代码目录,在board目标下添加板子专用目 录,s3c2410是自己主板对应的目录。 在board目录中建立s3c2410目录,复制 smdk2410目录中的内容 ¥cp smdk2410/*s3c2410 在include/config/目录下复制smdk2410.h ¥cp smdk2410.h s3c2410.h 测试配置和编译 ¥make s3c2410一config;make (6)调试u—boot源代码,直到u—boot在开发板 上正常启动; (7)烧写u—boot到Flash。最简单方式就是通 过JTAG电缆,转接到计算机并口连接,在主机烧写 程序及并口设备驱动程序的支持下完成u—boot烧 写工作。烧写完成后,复位实验板,串口终端就显示 uboot的启动信息。 3.2内核的配置和编译 标准Ljnux内核相对于资源受到的嵌入式 系统来说过于庞大,因此要将其移植到嵌入式系统 上,就需要将Linux内核根据目标平台的情况进行 剪裁、配置,并对配置好的内核进行编译生成内核映 像文件。 3。2.1内核的配置 (1)从网站heep://www.kerne1.org下载Linux官方 发布的内核版本Linux一2.6.18.tar。gz,并下载补丁 patch一2.6.18一rmk1.gz,把源码包解压到工作目录: ¥cd~/workspace ¥tar—jxvf~/Ljnux一2.6。18.tar.gz ¥gzip~/patch一2.6.18一rmk1.gz (2)进入解压后的源码目录,通过管道把补丁内 容传递给patch命令,应用到内核源代码中去: ¥cd Linux一2.6.18 ¥patch—pl<../patch一2.6.18一rmkl (3)检查修改makefile,确认ARCH和CROSS 一99— 维普资讯 http://www.cqvip.com CIMHLER的定义: ARCH:a]n】1 CROSSEXT2格式的磁盘文件系统。RAMdisk通常使用磁 盘文件系统的压缩映像存放在Flash中,在系统初始 化时,解压到内存指定位置,然后就可把RAMdisk设 备挂载成根文件系统。显然,RAMdisk的特点之一 就是速度快,因为它是在RAM中运行。通常可以通 过下列步骤制作RAMdisk映像。 CIMPII,ER=arm—linux一 (4)配置内核:在shell命令下输入命令进行内 核配置: ¥cp arch/ann/conifgs/smdk2410一defconfig.config ¥make menuconfig (1)创建空的文件系统映像: ¥dd if=dev/zero of=i血trd.img bs=lk count= 8O92 Linux内核包允许用户对其各类功能逐项配置, 可以参见相关项的help。在配置时,大部分选项可 以使用其缺省值,只有小部分需要根据用户不同的 需求进行选择。选择的原则是将与内核其它部分关 ¥mkfs.ext2一F initrd.img 这样就创建了一个8.92k的文件系统映像,文 件名initrd.i ,并通过dev/zero设备进行初始化清 零,同时将文件格式化成EXT2格式。 (2)作为loop设备挂接RAMdisk映像: ¥mkdir/mnt/initrd ¥mount—t ext2一O lop initrd.img/mnt/initrd 系较远且不经常使用的部分功能代码编译成为可加 载模块,这样有利于减小内核的长度,减小内核消耗 的内存。不需要的功能就不要选,与内核关系紧密 且经常使用的部分功能代码直接编译到内核中。主 要是进行以下几项配置:选择处理器类型、选择板级 支持、选择对RAM disk支持、对设备驱动的支持以 及对文件系统的支持。在配置工作完成后,保存退 出,生成文件.Config,它保存了这个配置信息,就可 以进行内核编译。 3.2.2内核的编译 通常在Linux中,内核映像分为压缩的内核映 像和未压缩的内核映像,压缩的内核映像通常名为 zlmage,位于arch/ann/boot目录中。而未压缩的内核 这样/H砷t/ini耐目录 测应initrd.img存储没备了。 (3)创建目录: ¥cd/mnt/initrd ¥mkdir bin dev etc lib mnt proc sbin sys usr (4)创建设备节点,添加相应的程序。将已经创 建好的根文件系统全部复制过来: ¥cp—a~/my—rotfs/*/nmt/initrd (5)把目标板需要的文件系统内容添加上去以 映像通常名为vmlinux,位于源码树的根目录中。为 了适应嵌入式的需要,采用压缩方式编译:¥make zImage,完成这个命令后,在arch/ann/boot目录下生 成了压缩的内核映像zImage,编译好的内核映像文 件先被烧写到Hash内;启动时由引导程序将内核从 Hash里加载到系统RAM中解压,然后运行。这种 压缩方式编译出来的内核映像文件小,非常适合嵌 后,先要把lop设备卸载下来,然后用gzip命令把映 像压缩一下: ¥cd~/workspace ¥umount/mnt/initrd , 入式系统使用。 3.3制作RAMdisk ¥gzip—C initrd.img>initrd.img.gz 到此一个压缩的RAMdisk映像initrd.img.gz制 作好了。 3.4部署Linux系统 3.3.1制作根文件系统 由于ARM Linux采用RAMdisk的方式加载根文 件系统,所以还要制作根文件系统。根文件系统主 要有下面几个目录组成:/bin目录下放置init, 系统部署就是要使目标板的Linux系统脱离交 叉开发环境,直接在目标机上本地启动运行。 busybox,shell和文件管理程序等一类的文件;/dev目 录下放置Ijnux操作系统的所有设备文件;/etc目录 下放置系统配置文件;/lib目录下放置所有系统运 行所必需的库文件。 (1)制作u—boot可使用的内核映像和RAMdisk 映像。因为使用u—boot引导程序需要使用二进 制、ELF32、ulmage格式的内核映像和RAMdisk映像。 对于内核映像,一般将其拷贝到从(MEM—START+ Ox8000)这个基地址开始的大约1MB大小的内存范 围内(嵌入式Linux的内核一般都不操过1MB)。从 MEM—3.3.2制作RAMdisk RAMdisk就是用内存空间来模拟出硬甜分区 (也就是块设备),基于RAMdisk的块设备,可以建: 一START到MEMSTART+0x8000(下转第103页) 1o0… 维普资讯 http://www.cqvip.com (K)},可以通过计算式(9)K X K个方程得到。 表2所示。 表2用lVlLED方法时不同自适应数据个数时的错误率比较 3 实验与分析 本文实验使用的语音数据库是自己录制的。采 用了汉语数字和数字串语音,以及英文数字语音。 其中,数字为0 9的lO个数字,而数字串为2O个 普通话数字串,每个串包含2个数字。英文数字为 one—ten的1O个英文数字。语音主要由8个人(4 自适应数据个数 K=2 K=8 K=12 K=20 错误率,% 32.51 22.58 19.42 18.24 从表2中可以看出,当自适应数据增加时系统 男4女)提供,年龄分布在23到4o岁之间。 实验系统是基于连续密度隐马尔可夫模型 (CDHMM)的识别系统 ]。每个数字为一个HMM模 的错误识别率有显著的降低。 4 结束语 从试验结果可以看出,运用最大后验概率特征 型。每个HMM模型有4个状态,每个状态包含有3 分解(MAPED) ̄够提高系统的性能,使系统的鲁棒 个混合高斯概率密度函数,高斯函数的协方差矩阵 性有所提高。在同样的自适应系统中随着自适应数 采用对角阵形式。HMM的转移概率矩阵采用自左向 据的增加,错误率也不断降低。 右的无跳转式。试验中的非特定人系统都是使用录 参考文献: 音中的前四个人的语音训练而成,而自适应数据和测 [1]Leggetter C J,Woodland P C.Maxi—Mun likelihood linear regression for speaker adaptatino of confinu—Ous density hidden markov models 试数据则从剩下的四个人的语音中选取。为此,进行 [J].Computer Speech and Language,1995(9):171—185. 了两个试验。实验一比较了特征语音识别中传统的 [2] 吕萍,吴及,等.连续语音识别中的说话人快速自适应技术[J]. MLED均值自适应方法和MAPED均值自适应方法的 北京:清华大学学报,2OO2,42(7):977—980. 识别性能。实验一的结果如表1所示。 [3]Brina Mak,Member,IEEE,James T.Kwork,Simon Ho.Kernel eigen— 表1不同自适应方法之间的比较 voice speaker adaptaii0rI[J].IEEE TRANSACTIONS ON SPEECH AND AUDIO PROCESSING,2OO5,13(5):984—992. [4]Brina Mak,Kwork James T,Simon Ho.Using kenrel PCA to ipmrove eigen—Voice¥ ̄tker.,tpa ̄ino[j].Proc—Eedings ofthethirdinter— natimml COllference on machine Ieaming and Cybernetics,sha-sh ̄, 从表1中可以看出,系统中应用MAPED的自适 2004:3062—3067. 应方法比用传统的自适应方法正确,识别率有所提 [5]Huang Chih—Hsien,Chien Jen—Tamg,Wang Hsin—min.A nG=w 高。实验二通过不断增加自适应数据来观察用 eigenvoiceapproachto Sl3e ̄er adaptatino[J].IEEE,2004:109—112. [6]何强,何英.Matlab扩展编程[M].北京:清华大学出版社,2002. MLED自适应方法时系统的识别效果。实验结果如 责任编辑:张荣香 (上接第100页)这段32kB大小的内存用来存放Boot— Flash启动了。 loader,内核启动参数和内核页表等信息。内核映像 4 结束语 则是在生成zlmage之后,通过执行“make ulmage”而 本文通过对Linux2.6内核版本进行裁减、编 得到,而对于根文件系统映像,则一般将其拷贝到 译,并将其移植到¥3C2410处理器的目标板上成功 MEMSTART+Ox0010,0000开始的地方,如果用 运行,讨论unux向目标系统¥3C2410移植过程中的 Ramdisk作为根文件系统映像,则其解压后的大小 关键技术及其实现。移植后的Linux保留了原有的 一般是1MB。RAMdisk需通过mkimage工具手工转 工作稳定的特点。并且可以根据需要,在该系统中 换,命令如下: . 编写应用程序和运行应用程序。 ¥mkimage—n RAMdisk—A anTI—O linux—T 参考文献: ramdisk—-C gzip——a ox00100000—-e 0x40100000——d [1]孙天泽.嵌入式设计及Linux驱动开发指南[M].北京:电子工 initrd.img.gz initrd.u[xoot 业出版社,2006. (2)通过U—boot把uhnage和initrd.uboot烧写 【2]张晓林,崔迎炜.嵌入式系统设计与实践【M].北京:北京航空 航天大学出版社,2OO6. 到Flash对应分区中去。 13j陈文智.嵌入式系统开发原理与实践fM].北京:清华大学出 (3)设置u—boot环境变量让系统自动启动。 版社,2005. 系统复位后,I,inux系统完全自动地从本地 责任编辑:肖滨 一l03— 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- zicool.com 版权所有 湘ICP备2023022495号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务