您好,欢迎来到欧得旅游网。
搜索
您的当前位置:首页基于S3C44B0X的uClinux操作系统内核移植

基于S3C44B0X的uClinux操作系统内核移植

来源:欧得旅游网
维普资讯 http://www.cqvip.com 第11卷第2期 哈尔滨理工大学学 报 Vo1.1l No.2 2006年4月 JOURNAL HARBIN UNIV.SCI. &rI1ECtt. Apr.,2006 !==== = = =========== ===:==========:========;:=======:: 基于S3 C44BOX的uClinux操作系统内核移植 李 岩 , 王卫兵 , 孙永春 (1.哈尔滨理工大学计算机科学与技术学院,黑龙江哈尔滨150080; 2.黑龙江省天伦置业股份有限公司,黑龙江哈尔滨150090) 摘要:与uClinux内核体系结构相关部分,主要完成硬件寄存器设置,内存映射等初始工作, 它是代码移植的主要部分.介绍了实验进行的硬件环境,从交叉环境的建立,源代码的修改,内核的 编译,内核的下栽与执行等方面,系统描述了将uClinux操作系统移植到¥3C44B0的过程. 关键词:ARM;¥3C44B0X;uClinux;Boofloader;移植 中图分类号:TP31I.54 文献标识码:A 文章编号:1007—2683(2006)02—0073—03 Transplant of uClinux in S3 C44 B0X Board LI Yah ,WANG Wei.bing ,SUN Yong.chun (1.College of Computer Science,Harbin Univ.Sei.Tech.,Harbin 150080,China; 2.Tianlun Real Estate Development Co.。Ltd.Harbin 150080,China) Abstract:The correlative parts of uClinux kernel system architecture finish hardware register setting,the hard— ware environment of the experiment is introduced in this paper.Then the process of transplanting uClinux to ¥3 C44B0 board,including building of cross development enviornment、modiifcation of source code,compilation of kernel,downloading and execution of Kernel,etc is systemically described. Key words:ARM;¥3 C44BOX;uClinux;bootloader;transplant 针对目标平台的交叉编译,生成一个内核映像文件, 1 引 言 最后把该映像文件烧写到目标平台中.本目标平 台-2 采用¥3C44B0作为处理器;采用2MB ARM系列是一种32位的嵌入式RISC处理器. (0x000000—0xlf脏)线性FLAStt作为引导代码、 它具有低电压、低功耗和低集成度等特点,并具有开 uClinux镜像文件和ROMFS文件系统的存储器;采 放性和可扩性,已经成为嵌入式系统首选的处理器 用8MB(0xc000000—0xc7fff)SDRAM作为引导代 架构….¥3C44B0是三星公司推出的一款为手持设 码、Linux映像文件和应用程序的可读写存储器. 备或其他通用设备而开发的16/32位处理器,它基 于ARM7TDMI核,没有内存管理单元(MMU). 2 内核的编译 uClinux是专门应用于无MMU微处理器的Linux衍 生操作系统.具有支持多任务、内核精简、高效、稳定 2.1交叉环境的建立 等优点.移植基本内容是:获取某一版本的Linux内 交叉编译是利用运行在某机器上的编译器编译 核源码,根据目标平台对源码中与体系结构相关部 某个源程序生成在另一台机器上运行的目标代码的 分进行修改,然后添加一些外设驱动,对该系统进行 过程 .开发工具主要有IDE集成开发环境和 收稿日期:2005—12—28 基金项目:黑龙江省自然科学基金项目(F200505) 作者简介:李岩(1966一)。男。哈尔滨理工大学副教授 维普资讯 http://www.cqvip.com 74 哈尔滨理工大学学报 第11卷 Makefile方式,前者如Windows中的Linux View和 在uClinux源文件目录下,执行make menuconfig CodeWarrior等,有良好的用户界面,并且易于管理 和控制项目的开发.后者如Linux Kernel的开发,支 命令,程序会依次出现开发平台、内核、文件系统、应 用程序的配置界面,可以根据自己的需要进行配置. 配置时大部分选项可以使用其缺省值,只有小部分需 要根据用户不同的需要选择.例如,若需要内核支持 DOS分区的文件系统,则要在文件系统部分选择FAT 或DOS系统支持;系统如果配有网卡、PCMCIA卡等, 持脚本的功能非常强大.通常应用程序的开发使用 集成开发环境,内核的编译使用Makefile方式. 建立编译内核的交叉编译环境主要用到的开发 工具包括3部分:binutils、gcc、glibe.其中,binutils是 二进制文件的处理工具;gcc是编译工具;glibe是链 需要在网络配置中选择相应卡的类型. 接和运行库.若网上下载的是源代码包,需要经过 进行内核配置时.有3种选择,它们分别代表的 GCC的编译才能应用;若是应用程序包,安装后即 含义为:①“Y''一将该功能编译进内核;②“N”一 可使用.为了快速建立交叉环境,可以从网上直接下 不将该功能编译进内核;③“M”一将该功能编泽成 载alTll—elf—binutils一2.11—3.i386.rpm、am'l—elf 可以在需要时动态插入到内核中的模块. —gcc-2.95.3—2.i386.rpm、arm—elf—gdb一5.0— 将与核心其他部分关系较远且不经常使用的部 1.i386.rpm、genromfs一0.5.1一1.i386.rpm、al'm— 分功能代码编译成为可加载模块,有利于减小内核 elf—tools一20030314.sh文件. 的长度,减小内核消耗的内存,简少该功能相应环境 在Linux下运行rpm—ivh水.rpm命令,安装 改变时对内核的影响. gee、binutils等交叉编泽工具,在Linux下运行./arm 2.4 uCfinux内核编译 —efl—tols一20030314.sh命令,在开发主机上便会 在完成内核的裁减之后,内核的编译就是一个 自动建立一个uClinux—ARM的交叉编译环境. 非常简单的过程.你只要执行以下几条命令就行: 2.2 uClinux内核源码的修改 1)make clean是在正式编译你的内核之前先把 对uClinux内核的移植修改主要包括启动代码 环境给清理干净.也可以用make realclean或make 的修改,内核的链接及装入,参数传递,内核引导4 mrproper来彻底清除相关依赖(与Makeifle文件支 部分.uClinux内核分为体系结构相关部分和体系结 持有关),保证没有不正确的.O文件存在. 构无关部分.在Linux启动的第一阶段,内核与体系 2)make dep是编译相关依赖文件.2.6.X以上 结构相关部分(arch目录下)首先执行,完成硬件寄 版本已经被整合到make中,所以不再单独执行. 存器设置,内存映射等初始化工作.然后,控制权转 3)make是最终的编译命令.2.6.X版本上可以 给与系统结构无关部分.在移植工作中要改动的代 直接用make或make bzImage. 码主要集中在与体系结构相关部分.对于流行的 最后,在image目录中产生了image.tom和im— ARM平台,与体系结构相关的部分汇编源码的修改 age.ram,它们分别为内核的映像和内核的调试文件. 工作是由英国ARM公司的工程师完成的.例如可 以从flp://hp.arm.1inux.org.uk网站上下载 3 uClinux内核的下载与执行 Linux2.4.0内核及其关于ARM平台的补丁,利用 zcat../patch一2.4.0一rmk1.gz I patch--pl(../表 uClinux的内核可以通过FLASH烧写工具写入 示补丁文件放在内核文件上一层目录)命令,修补 FLASH中.嵌入式系统引导过程通常可以分为 Linux2.4.0内核,再进行交叉编译即可. boot、系统初始化和uClinux内核引导3个阶段.通 2.3 uClinux内核裁剪 常情况下,boot阶段和系统初始化阶段的工作由一 Linux的运行开销,主要包括静态映像体积、动态 段被称为bootloader的代码完成H ,而内核引导则 运行的内存和CPU等开销.通常在嵌入式系统中都 是由事先编译好了的uClinux可执行镜像来实现. 显得比较大.由于嵌入式系统的资源比桌面系统少, 3.1 boot阶段 必须先对Linux进行裁剪,控制开销,才能使之运行 boot阶段的主要工作是设置系统中断向量、完 于嵌入式系统硬件平台上.静态映像主要由Linux系 成对CPU内部寄存器的初始化、系统RAM初始化、 统内核、应用程序、应用库等的二进制映像组成;动态 为运行C程序组织堆栈、拷贝初始化阶段代码到 运行的开销和CPU开销主要与Linux实现有关,需要 RAM、跳转到C程序人口.该阶段代码直接在Flash 针对嵌入式应用系统的特点进行优化 J. 中运行,为提高执行效率采用汇编语言编写. 维普资讯 http://www.cqvip.com 第2期 李岩等:基于S3C44BOX的uClinux操作系统内核移植 3.2系统初始化阶段 75 1)设置中断向量.设置¥3C44B0芯片的8种系 统中断的中断向量地址(包括复位中断、未定义指 系统初始化阶段的主要工作是建立与主机间的 令中断、软件中断、指令预取异常中断、数据异常中 断、地址异常中断、IRQ中断和F IQ中断),该地址 通信、初始化定时器、检灏4内存映射、加载uClinux 内核镜像和配置内核启动参数等.加载uClinux内 空间从系统RAM的起始地址开始安排.通常情况 下,在Flash的起始部分,存放的就是针对各中断向 量地址的无条件跳转指令. 核工作实际上是完成将Flash中uClinux内核代码 拷贝到RAM指定地址单元的工作,在拷贝前必须 在第二阶段RAM启动代码和该部分代码之间预留 一entry: 定的空间,用来存放uClinux的全局结构变量, B ResetHandler/¥复位中断向量地址¥/ LDR PC,=OxOcO0000c/ 未定义指令中断向 量地址 / 如:启动参数、内核页表、ARM的页目录等信息.地 址空间的分配情况如图1所示. 初始化代码 中断向量表 启动配置参数 未分配空间 LDR PC,=0x0c000024/半FIQ中断向量地址 / 2)CPU内部寄存器初始化.通过配置.CPU运 行于SVC模式(采用改变CPSC寄存器中CPU运行 模式位的方式来实现),并设置相关寄存器,以实现 对基本硬件的初始化工作,包括关闭中断、初始化 CPU通用端口和设置CPU频率等. 3)系统RAM初始化.首先,根据系统配置的存 .uClinux内核 — ........,..........初始化镜像代码 堆栈区 _-一 FL SH 图1地址空间的分配示意图 3.3 uClinux内核引导 储器特性,初始化相关存储块控制寄存器的值,在 ¥3C44B0中存储空间被分为BANK0到BANK7共8 个块,分别由BANKCON0到BANKCON7控制各块 存储器的读写时钟数和片选时钟数等信号参数,对 于采取不同存储芯片的嵌入式系统,可以通过查阅 芯片手册来获取该信息,并写入相关寄存器.然后, 对存储器空间中需要清零的区域进行清零操作,该 区域的范围往往是由开发人员通知编译器的,主要 是用来存放c语言中全局变量等. 4)为运行C程序组织堆栈.由于在系统引导的 下一阶段,通常会使用C语言来完成如建立主机通 在初始化阶段完成uClinux启动参数设置后, 控制权交由uClinux内核接管,并调用解压内核函 数decompress kernel,对拷贝到SDRAM的内核映像 文件进行解压缩,然后跳转到内核调用函数cal1 kernel,该函数实际上是执行start.kernel(),其中包 括了处理器结构的初始化、中断的初始化、进程相关 的初始化以及内存初始化等重要工作.最后,将控制 权交给解压后的uClinux系统,进而完成整个 uClinux内核引导过程. 4 结 语 由于Linux操作系统的源码开放性及ARM微 处理器的低价位、低功耗、高集成度的特点,将二者 结合进行嵌入式开发已经是人们越来越多的选择. 而操作系统的移植是构建基于ARM微处理器的嵌 入式产品的前提,掌握移植的方法和思路是必要的. 信、驱动外部端口的工作,故必须调整sP指针到堆 栈顶,为c程序配置合适的堆栈环境.在具体实现 过程中为避免堆栈数据被程序运行代码破坏,往往 会把堆栈设置在RAM的高端地址,并把堆栈的生 长方向设为向下生长,这样可以最大限度地利用 RAM空间,同时可以避免上述问题发生. 参考文献: [1]王田苗.嵌入式系统设计与实例开发[M].北京:清华大学出版社,2003. [2]LI Yah。LI Xiao.wei,CUI Lin.hai.The Application of Embedded Proce88or S3CA4BOX in Data Acquisiti0n System[C].ISTM,[出版地不详], 2005. [3]李岩.基于¥3C44BOX嵌入式uClinux系统原理及应用[M].北京:清华大学出版社,2005. [4]王东,李哲英.U-Boot在¥3C44B0上的移植方法[J].北京交通大学学报。2005,29(2):76—8O. (编辑:董 晶) 

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

Copyright © 2019- ovod.cn 版权所有

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

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