中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 嵌入系统 >>电子行业新闻正文

基于ARM的μCLinux启动引导实现的分析

时间:2005/12/19 10:34:00  作者:  来源:ic72  浏览人数:1866
 
 
摘  要:本文介绍了ARM-μCLinux嵌入式系统的结构组成,结合ARM体系结构的特点和嵌入式操作系统μCLinux的应用的普遍性,着重分析了ARM-μCLinux嵌入式系统启动引导程序的过程实现以及该系统启动引导的关键点,提出了一种有效的启动引导方案。
关键词:嵌入式系统 引导 ARM  μCLinux  嵌入式操作系统
 
引言
    32位ARM嵌入式处理器具有高性能、低功耗的特性,已被广泛应用于消费电子产品、无线通信和网络通信等领域。μCLinux是专门为无MMU处理器设计的嵌入式操作系统,支持ARM、Motorola等微处理器。目前国内外采用ARM-μCLinux作为嵌入式系统非常普遍。而嵌入式系统的启动引导技术是嵌入式系统开发的一个难点。系统启动引导的成功与否决定了应用程序的运行环境是否能正确构建,即系统启动成功是应用正确运行的前提。

    常用的嵌入式系统启动方法是先通过JTAG将嵌入式操作系统内核烧入Flash,再由其带的引导程序Bootloader完成嵌入式系统的启动引导工作。这种方法要借助昂贵的JTAG设备完成操作系统内核的烧写工作,并且不能方便地更新嵌入式系统中的软件平台。本文提出一种基于ARM-μCLinux嵌入式系统的启动引导方案,不但可以通过简易的串口方便地更新嵌入式系统内的软件平台,而且解决了这种架构的嵌入式系统的启动、初始化、操作系统内核的固化和引导等问题。本文简略说明ARM-μCLinux嵌入式系统的硬件平台和软件平台;描述系统引导程序Bootloader的设计,阐述设计时考虑的因素和需解决的技术难点,给出一套可行的引导程序流程;针对μCLinux内核的引导程序,说明μCLinux内核的加载和初始化过程。

1 系统组成
    典型的ARM嵌入式系统硬件平台一般包括一个以ARM为内核的微处理器、存储器和必要的外部接口与外设。在本系统中,微处理器采用内嵌ARM7TDMI的Samsung公司的S3C4510处理器,存储器使用2MB的Flash和16MB的SDRAM,外部接口除了用于下载和通信的串口,还配备了一个以太网接口,以支持S3C4510的网络功能。

    软件平台由以下部分组成:系统引导程序、嵌入式操作系统内核、文件系统。系统引导程序通常也称为Bootloader,该引导程序包括两个方面:引导内核的Bootloader和内核自身的引导程序部分,代码量虽少,但是作用非常大,相当于PC上的BIOS,负责将操作系统内核固化到Flash中和系统初始化工作,然后将系统控制权交给操作系统。Bootloader是CPU开机后执行的第一个程序,它的任务就是将内核(压缩或非压缩)装载到内核要求的地址。内核引导程序部分有狭义和广义之分,狭义指内核运行前的一段代码,一般在压缩的内核映像前有一段解压缩程序,负责将内核解压缩到某个地址,从开始解压缩到将控制权交给解压缩好的内核,这一段代码称为内核的引导程序部分。广义定义还要包括内核初始化部分,即直到有进程产生才算引导程序的结束。嵌入式操作系统内核是嵌入式系统加电运行后的管理平台,完成嵌入式应用的任务调度和控制等核心功能。具有内核较精简、可配置、与高层应用紧密关联等特点。嵌入式操作系统具有相对不变性。
    ARM7TDMI是一款没有MMU的处理器 ,因此采用μCLinux作为本系统的操作系统内核。μCLinux是Linux是一个分支,主要是针对无MMU的微处理器设计开发的,大多数内核的二进制代码和源代码都被重写,但继承了Linux 操作系统的主要优点:稳定性、优异的网络能力和多任务管理功能以及优秀的文件系统支持,并对内存管理和进程管理进行了改写,满足了无MMU处理器的开发要求。文件系统是嵌入式系统软件平台占用存储量最大的一部分,也是与用户开发最相关的一部分。它是负责存取和管理文件信息的机构,也可以说是负责文件的建立、撤消、组织、读写、修改、复制及对文件管理所需要的资源实施管理的软件部分。

    软件平台固化在Flash中。通常根据软件平台的内容 对Flash的地址空间进行分区,一般分三个区,分别存放Bootloader、μCLinux内核和文件系统。分区的方式一般有两种:一种是根据三个部分预定的存储空量,允许Bootloader、内核和文件系统拥有自己固定的分区和首地址;另一种就是按照这三部分的实际分配区间,一个部分紧跟着另一个部分后存储,没有固定的分区和首地址。通常采用第一种方式,虽然可能会浪费一部分Flash空间,但是方便内核的加载和文件系统的挂载,同时也利于系统的调试和开发。而如果充分利用Flash的存储区间,节约成本,那么可采用第二种方式。

2 系统引导程序的设计
    系统引导程序Bootloader是嵌入式系统加电后执行的第一个程序, Bootloader一般是被烧录或者下载到bootrom的0x0地址处,作为上电后执行的第一部分指令,Bootloader需要完成两个任务:
(1). memory remap,
(2). 把kernel装载到SDRAM里合适的位置上去。在完成这两个任务后,Bootloader就“功成身退”了。进行功能设计时首先要考虑以下问题:
(1)将μCLinux内核和文件系统固化在Flash中
    μCLinux内核和文件系统固化在Flash中的手段很多。主机可以通过JTAG口,将内核和文件系统的映像文件烧写到指定的Flash位置上;也可以通过以太网接口,将映像文件下载到Flash中;另外还可以通过串口烧写到Flash中。前两种方法的下载速度比后一种方法快得多。在本系统中,采用串口烧写Flash。这是因为一方面配置一个串口方便且廉价,而JTAG烧写还要配置昂贵的JTAG仿真器和相关的驱动程序以及协议转换程序,网口下载还要有以太网支持;另一方面μCLinux默认通过串口打印其运行的信息,那么串口不但可以提供烧写Flash的功能,还可作为调试μCLinux内核的通道。在本系统中,Flash在刚开始时,只存储了Bootloader,还没有存储μCLinux内核和文件系统。因此Bootloader在系统加电完成初始化工作后,要初始化一条链接主机和目标机的串口通道,并提供串口下载功能。

(2)系统初始化        
    因为系统刚加电时,操作系统的内核还没有被加载,系统的初始化工作由Bootloader完成。一般嵌入式设备上电后,程序寄存器首先指向ROM(Flash)的首地址,执行事先已经固化好的Bootloader程序。Bootloader程序一般首先初始化CPU的寄存器,设置处理器的工作模式,关掉中断,设置Flash和RAM让他们能够工作,并把内核从Flash中复制到RAM中,然后调用解压缩函数解压内核,最后把控制权交给解压缩好的内核,并开始内核的初始化。

(3)μCLinux内核加载方式
    μCLinux的内核有两种可选的运行方式:一是在Flash上直接运行;二是加载到内存中运行。后者可以减少内存需要。Flash运行方式是把内核的可执行映像文件烧制到Flash上, Bootloader进行系统初始化工作后系统启动时从Flash的某个地址开始逐句执行内核自带的引导程序,由该引导程序完成内核的加载工作。这种方法实际上是很多嵌入式系统采用的方法,也是本系统采用的内核加载方式。内核加载方式是把内核的压缩文件存放在Flash上,系统启动时读取压缩文件在内存里解压,然后开始执行,这种方式相对复杂一些,需要在内存中运行程序,但是其运行速度可能更快(RAM的存取速率要比Flash高),并且可以通过RAM快速引导技术实现这种加载方式,同时这也是标准Linux系统采用的启动方式。其主要是针对NAND型Flash的情况。与NOR型Flash最大的不同点是:NOR型Flash使用内存随机读取技术,与SDRAM一样,可以直接执行存储在Flash中的程序;而NAND一样,可以直接内存随机读取技术,它是一次读取一整块内存,因此不能直接执行存储在NAND型Flash中的程序,必须把NAND型Flash中的程序先拷贝到SDRAM,再在SDRAM中执行该程序。但是NAND型Flash价格比NOR型Flash廉价,所以很多嵌入式系统还是采用NOR型Flash(几百K字节)+NAND型Flash(几兆字节)的存储模式。其中NOR型Flash存放可执行的且代码量小的Bootloader和一些必要的数据,而NAND型Flash保存存储量较大的内核和文件系统。

    在本系统中,由于采用NOR型Flash存储Bootloader、内核和文件系统,所以可以直接访问内核所在地址区间的首地址,执行内核自己的引导程序,而且内核自带的引导程序功能强大,可以方便地内核的加载,向内核传递有关的硬件参数。本系统采用第一种加载方式。

(4)自举模式和内核启动模式的切换
    Bootloader一般要实现两种启动模式:自举模式和内核启动模式。自举模式也称为bootstrap模式,该模式的主要作用是目标机通过串口与主机通信,可以接收主机发送过来的映像文件,例如内核、文件系统和应用程序,并将其固化在Flash中,也可以将Flash中的映像文件上传到主机。内核启动模式允许嵌入式系统加电启动后加载μCLinux内核,然后将系统交由μCLinux操作系统管理。在本系统中,采用一个开关实现两种模式的切换。在系统的Flash中只有Bootloader时,首先将开关拔上去,提示系统进入自举模式,加电启动后,Bootloader根据开关的状态,进入自举模式,接收主机发送过来的内核和文件系统的映像文件。接着将开关拔下来,提示系统进入内核启动模式,Bootloader根据此时的开关状态进入内核启动模式,加载内核和文件系统,由操作系统接管。以后也可以根据需要,设置开关的状态,以提示系统进入不同的启动模式。

(5)地址映射表的配置和重映射
   地址映射表的配置包括设置Flash地址空间、SDRAM地址空间、外部I/O地址范围和处理器寄存器地址范围。嵌入式设备上电启动后,Flash中的程序获得控制权,Flash中的程序包括bootloader和一个压缩过的内核(另外还含有一个romfs的文件系统)。   

    Flash中的程序首先配置内存地址,将本身由原来系统默认的地址配置为0x0到0x200000(2MByte),SDRAM配置为0x1000000(16MByte)到0x2000000(32MByte)。然后把Flash的内容整体拷贝SDRAM中。拷贝完后,将SDRAM地址重新配置为0x0到0x1000000,Flash的地址改为0x1000000到0x1200000。注意,这里Flash和RAM地址是同时修改的,修改地址后,接下来的指令就将从SDRAM中获得,由于SDRAM中的程序和原来Flash中的程序一样,并且地址也一样,所以不会影响指令的执行。这需要在内核引导程序中对Flash和SDRAM的地址空间进行重映射。

3 μCLinux内核的加载和初始化
    本启动方案中采用μCLinux自带的引导程序加载内核。该引导程序代码在linux/arch/armnommu/boot/compressed目 录,其中Head.s的作用最关键,它完成了加载内核的大部分工作;Misc.c则提供加载内核所需要的子程序,其中解压内核的子程序是Head.s调用的重要程序,另外内核的加载还必须知道系统必要的硬件信息,该硬件信息在hardware.h中并被Head.s所引用。当Bootloader将控制权交给内核的引导程序时,第一个执行的程序就是Head.s。下面基于本系统介绍Head.s加载内核的主要过程。Head.s首先配置S3C4510的系统寄存器;再初始化S3C4510的ROM、RAM以及总线等控制寄存器,将Flash和SDRAM的地址范围分别设置为0x0-0x200000和0x1000000-0x2000000;接着将内核的映像文件从Flash拷贝到SDRAM,并将Flash和SDRAM的地址区间分别重映射为0x1000000-0x1200000和0x0-0x1000000;然后调用Misc.c中的解压内核函数(decompress_kernel),对拷贝到SDRAM的内核映像文件进行解压缩;最后跳转到执行调用内核函数(call_kernel),将控制权交给解压后的μCLinux系统。执行Call_kernel函数实际上是执行linux/init/main.c中的start_kernel函数,中包括处理器结构的初始化、中断的初始化、进程相关的初始化以及内存初始化等重要工作。
 
4 结论
   该启动引导方案实现了自举模式和内核启动模式以及两种模式的切换,既可以采用自举模式方便地烧写Flash,更新嵌入式系统中的软件平台,又能够切换到内核启动模式,自动安全地启动系统;其次,本方案采用简易的串口通道主机与目标系统的通信渠道,既可以方便地将操作系统内核、文件系统和其他应用程序下载到目标系统中,又可以作为调试μCLinux内核和应用程序通道;此外针对ARM7TDMI的无MMU特性,采用修改后的μCLinux内核引导程序加载操作系统和初始化操作系统环境,解决内核加载的地址重映射问题和操作系统的内存管理问题。
 
参考文献
[1] 刘安昱,温晓辉,刘志红. 基于S3C44B0的uClinux的移植. 单片机与嵌入式系统应用,2003(12)
[2王田苗.嵌入式系统设计与实例开发  清华大学出版社,2002
[3]K Wall,M Watson,M Whitis.Linux Programming Unleashed [M].Sams,1999
[4]John Goerzen. Linux Programming Bilble [M].House of Electronic Industry,1999

 
【相关文章】
·在ARM微处理器上实现Rijndael加密算法
·嵌入式操作系统FreeRTOS的原理与实现
·基于WinCE环境的CAN适配卡驱动程序的设计与实现
·瑞萨面向车辆变频控制推出32位RISC微控制器
·基于ARM的μCLinux启动引导实现的分析
·单片机在报警主机中的应用(二)
·单片机在报警主机中的应用
·SUNPLUS为变频马达控制市场引入定时器增强型单片机
·专为FPGA优化的ARM软处理器
·Tarari推出第四代内容处理器,促进网络安全
·Waves Audio推出第二代MX3000CS ASIC
·瑞萨发布带有片上闪存的单芯片微控制器 实现160MHz最高运行速度
·盛群新型微控制器具备脉波产生器
·瑞萨在单芯片LSI中嵌入爱可信IrDA协议栈
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9