基于S3C44B0X的Bootloader设计与实现

发布者:快乐心跳最新更新时间:2012-03-26 来源: 微计算机信息关键字:S3C44B0X  Bootloader  嵌入式系统 手机看文章 扫描二维码
随时随地手机看文章

1.引言

Bootloader(引[1]导加载) 程序[1]是系统加电后首先运行的一段程序代码,用来初始化硬件环境、改变处理器运行模式和重组中断向量,建立内存空间的映射图(有的CPU没有内存映射功能如 S3C44B0X ),将系统的软、硬件环境带到一个由用户定制的特定状态,然后加载操作系统内核。对于不使用操作系统的嵌入式系统而言,应用程序的运行同样也需要依赖一个准备好的软、硬件环境,因此从这个意义上来讲,BootLoader对于嵌入式系统是必需的。

Bootloader是依赖于目标硬件实现的,主要包括以下两方面[2]:

(1)每种嵌入式微处理器体系结构都有不同的Bootloader.应用比较广泛的Bootloader有VIVI、U-Boot、Blob、RedBoot 等。有些BootLoader也可以支持多种体系结构的嵌入式微处理器。如U-Boot同时支持ARM和MIPS体系结构。

(2)Bootloader依赖于具体的嵌入式板级硬件设备的配置。比如板卡的硬件地址配置、微处理器的类型和其他外设的类型等。也就是说,即使是基于相同嵌入式微处理器构建的不同嵌入式目标板,要想让运行在一个板子上的Bootloader程序同样运行在另一个板子上,仍需要修改Bootloader的源程序。

作者在参与中国民用航空总局科技基金项目“机场噪声自动监测与数据传输的研究与实

现”的研发中,设计了一款基于S3C44B0X的ARM7核心板,并实现了其引导加载程序Bootloader.

2.ARM7核心板介绍

2.1ARM7核心板的构成

作者设计的ARM7 核心板主要由CPU、电源管理、存储单元、JTAG接口和串口五部分组成。图1是其结构图。CPU这里用的是Samsung的S3C44BOX微处理器[3], 它是由Samsung Electronics Co.,Ltd为手持设备设计的低功耗、高度集成的基于ARM7TDMI核的微处理器,采用精简指令系统(RISC)和三级流水线结构,且具有丰富的内置部件。电源管理部分采用开关电源将AC220V转换成DC5V,然后采用线性稳压电源LM1085将DC5V分别转换成3.3V 的I/O口电源电压和2.5V 的S3C44B0X内核逻辑电压。存储单元由Flash存储器和SDRAM存储器构成。Flash存储器用的是SST公司的 39VF3201 CMOS FLASH,容量为4MB,16位数据宽度,可以重复擦写。Flash存储器主要用来存放已经调试好的应用程序、嵌入式操作系统和需要保存的用户数据。 SDRAM存储器选用的是SAMSUNG公司的8MB K4S641632H,16位数据宽度,工作电压3.3V。由于SDRAM执行速度比较快,其通常作为系统运行时的主要区域,用来存放系统及用户数据、堆栈等。另外,除了可用于下载和通信的串口,还包括用于调试的JTAG接口。

图1 ARM7 核心板结构图

2.2S3C44B0X的存储器映射

系统复位后,S3C44B0X的存储空间映射图[3]如图2所示。ARM处理器S3C44B0X的系统存储空间分为8段(Bank0-Bank7),因此可以配置8个存储体,其中每个存储体的大小为32MB,总共可达256MB的存储空间。可以自由配置访问存储体的数据总线宽度(8位/16位/32位),在本核心板中,FLASH和SDRAM存储器的总线宽度设置为16位,在8个可配置存储体中,Bank0-Bank5可支持ROM、SRAM类型的存储器;Bank6和Bank7可支持ROM、SRAM以及FP/EDO/SDRAM等其他类型的存储器,此处Bank0接 FLASH存储器39VF3201(采用片选信号nGCS0),地址范围为:0x00000000-0x003fffff.Bank6接8MB的 SDRAM存储芯片K4S641632H(采用片选信号nGCS6),地址范围为0x00000000-0x007fffff。其他存储空间(Bank2、Bank3、Bank4、Bank5、Bank7)暂时保留。[page]

图2 复位后的S3C44B0X 存储区地址映射

3.Bootloader 启动流程设计

系统加电或复位后,CPU通常都从CPU制造商预先安排的地址上取指令。如基于ARM7TDMI

内核的CPU在复位时都从地址0x00000000处取它的第一条指令。而嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或FLASH等)被安排在这个起始地址上。因此在系统加电或复位后,处理器将首先执行存放在起始地址处的程序。通过集成开发环境IDE可以将 BootLoader定位在起始地址开始的存储空间内。所以,BootLoader是系统加电后,操作系统内核或用户应用程序运行之前,首先必须运行的一段代码。对于ARM S3C44B0X微处理器,BootLoader是从0x00000000地址开始存放的,此地址采用了可引导的固态存储设备FLASH。

从操作系统的角度看,BootLoader的总目标就是正确的调用内核来执行。另外由于

BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为stage1和stage2两部分[4],依赖CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而stage2通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。

BootLoader的stage1通常包括以下步骤(以执行的先后顺序):

1)  硬件设备初始化。

2)  为加载BootLoader的stage2准备RAM空间。

3)  拷贝BootLoader的stage2到RAM空间

4)  设置堆栈

5)  跳转到stage2的C程序入口点

BootLoader的stage2通常包括以下步骤(以执行的先后顺序):

1)  初始化本阶段要使用到的硬件设备

2)  检测系统内存映射

3)  将内核映像和根文件系统映像从Flash读到RAM

4)  为内核设置启动参数

5)  调用内核[page]

4.Bootloader的代码实现

Bootloader的Stage1初始化流程图如图3所示. Stage1部分主要内容及其代码实现:

图3 Stage1初始化流程图

/*中断向量表用于处理异常情况,当发生异常情况时,首先要保存当前程序的返回地址和CPSR寄存器的值,然后进入到相应的异常向量地址。一般来说,在异常向量地址处放置无条件跳转指令,使程序进入相应的异常处理过程。*/

_ENTRY

B   ResetHandler        ;reset vector

    B   UndefinedHandler    ;Undefined instruction

B   SWIHandler          ;SWI

    B   PrefetchHandler     ;Prefetch abort

    B   AbortHandler        ;Data abort

    B.                     ;Address exception

    B   IRQHandler          ;IRQ

    B   FIQHandler          ;FIQ

    ……

/*复位入口,切换到超级模式并禁止中断。在整个Boot Loader的初始化过程中我们都不必响应中断,因此首先禁止系统的中断。*/

MRS     a1,CPSR            

    BIC     a1,a1,#MODE_MASK   

    ORR     a1,a1,#SUP_MODE    

    ORR     a1,a1,#LOCKOUT      ;关闭IRQ、FIQ中断

    MSR     CPSR_cxsf,a1

    LDR     r0,=INTCON          ;设置中断模式,非向量中断模式

   LDR     r1,=0x07            ;IRQ、FIQ中断禁止

   STR     r1,[r0]

    LDR     r0,=INTMSK          ;关闭所有中断

   LDR     r1,=0x07ffffff

   STR     r1,[r0]

LDR     r0,=SYSCFG          ;使能回写buffer和Cache

LDR     r1,=0xE

    STR     r1,[r0]

……[page]

/*当必要的硬件初始化设置完毕后,接下来为核心代码贮备RAM空间,包括RO、RW、ZI这3个段设置相应的内存映射向量,Bootloader先将ZI段请零,然后将RO段复制到RW段中。由于在我们采用的S3C44B0X微处理器里对于FLASH和RAM地址空间是使用的统一编址的,因此我们可以直接使用一个简单循环来完成拷贝。*/

move_data :                                                                  

LDR     a1,=Image_RW_Base       ;RW段运行时的起始地址

LDR     a2,=Image_RO_Limit      ;RO段运行时的存储区域界限

LDR     a3,=Image_ZI_Base       ;ZI段运行时的起始地址                                                                        

CMP     a1,a3                                                          

BEQ     goto_main               ;跳转到C入口函数                                                                                                       

move_loop :                             ;将RO段复制到RW段                                   

LDR     a4,[a2],#4                                                     

STR     a4,[a1],#4 

CMP     a1,a3

BNE     move_loop

在Bootloader stage1部分的最后是堆栈的设置,由于ARM有5种异常模式,每一种模式的堆栈指针寄存器(SP)都是独立的,因此,对程序中需要用到的每一种模式都要给SP定义一个堆栈地址。以中止模式SP堆栈地址的定义为例:

        ORR     r1,r0,#ABORTMODE|NOINT

        MSR     cpsr_cxsf,r1

        LDR     sp,=AbortStack

 至此,汇编语言程序段的任务基本完成,执行命令BL  Main 转到由C语言编写的核心程序,操作系统的内核就可通过该C程序加载到RAM,获得对系统的控制权。

Bootloader的Stage2部分主要用于导入操作系统内核,一般通过串口建立连接,以获取命令、打印与用户的交流信息等,这里限于篇幅不再加以详述。

5.结束语

作为嵌入式系统软件的最底层,Bootloader是系统上电后启动运行的第一个程序,类

似于PC机上的BIOS,主要负责整个硬件系统的初始化和软件系统启动的准备工作。Bootloader是嵌入式系统开发的重点和难点,也是系统运行的一个基本前提条件。设计和实现一个好的Bootloader,可以大大增强系统的稳定性,提高系统的实时性。

本论文创新观点是:设计了具有较高性价比的ARM7核心板,结合实际应用详细分析了S3C44B0X的存储空间映射,设计实现的基于S3C44B0X的 Bootloader具有典型代表性、良好的健壮性和可移植性,只须有针对性的稍加修改,就可应用到各种类似的嵌入式平台中,对进一步开发复杂系统的 Bootloader具有很好的借鉴和启发作用。

本项目经济效益(30万元),包括Internet接入设备研制、GPRS网络接入设备研制和GPRS-Internet网关软件研制三部分。 Internet接入设备由数据前端采集盒和嵌入式ARM系统构成,嵌入式ARM系统通过串口接收单片机发来的数据并将这些数据利用TCP/IP协议通过网线发送到噪声数据中心。

参考文献:

[1]白伟平等.基于ARM的嵌入式Bootloader浅析[J].微计算机信息,2006,4-2:99-100

[2]夏靖波等.嵌入式系统原理与开发[M].西安电子科技大学出版社.2006

[3]Samsung Limited. S3C44BOX RISC Microprocessor Datasheet[EB/OL]. 2001

[4]孙天泽等.嵌入式设计与Linux驱动开发指南-基于ARM9处理器[M].电子工业出版社.2006

关键字:S3C44B0X  Bootloader  嵌入式系统 引用地址:基于S3C44B0X的Bootloader设计与实现

上一篇:ENC28J60在嵌入式系统接口上的设计与实现
下一篇:ARM中基于DMA的高效UART通讯及其应用

推荐阅读最新更新时间:2024-03-16 12:56

用GNU工具开发基于ARM的嵌入式系统
摘要:介绍如何利用GNU的工具开发基于ARM的嵌入式系统,以及使用编译器、连接器和调试工具的具体方法,为广大嵌入式系统开发人员提供一种低成本的开发手段。 关键词:ARM GNU MC928MX1 gcc gdb gdbserver 当前,ARM公司的32位RISC处理器,以其内核耗电少、成本低、功能强、特有16/32位双指令集,已成为移动通信、手持计算、多媒体数字消费等嵌入式解决方案的RISC标准,市场占有率超过了75 %。多家公司都推出了自己的基于ARM内核的处理器产品,越来越多的开发人员开始了针对ARM平台的开发。通常开发人员需要购买芯片厂商或第三方提供的开发板,还需要购买开发软件,如C编译器或者集成了实时操作系统的开发环境。开
[嵌入式]
基于PXA255的嵌入式Linux应用平台的构建
1 引言 嵌入式Linux(Embedded Linux)是指对Linux经过小型化裁剪后,能够固化在容量仅有几十万字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。嵌入式Linux是由很多体积小且性能高的微内核系统组成,在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据自己的应用需要很容易地对内核进行改造,在低成本的前提下,设计和开发出真正满足自己需要的嵌入式系统。 随着电子市场的发展壮大,高性能低功耗的多媒体手提设备和无线设备越来越受到市场的欢迎,Intel XScale PXA255处理器正是针对这一情况推出的。它采用Intel XScale微结构体系框架,采用ARMV5TE的7级超流水
[单片机]
80C186XL嵌入式系统中DRAM控制器的CPLD解决方案
    摘要: 介绍怎样在嵌入式CPU 80C186XL DRAM刷新控制单元的基础上,利用CPLD技术和80C196XL的时序特征设计一个低价格、功能完整的DRAM控制器的方法,并采用VHDL语言编程实现。     关键词: 刷新控制单元(RCU) DRAM控制器 状态机 CPLD VHDL语言 80C186XL16位嵌入式微处理器 是Intel公司在嵌入式微处理器市场的上导产品之一,已广泛应用于电脑终端、程控交换和工控等领域。在该嵌入式微处理器片内,集成有DRAM RCU单元,即DRAM刷新控制单元。RCU单元可以自动产生DRAM刷新总线周期,它工作于微处理器的增益模式下。经适当编程后
[嵌入式]
基于s3c44b0x嵌入式开发平台实现移植microwindows的方法与过程
microwindows是由gregory haerr组织的一个开放源码项目,是嵌入式系统中广泛应用的一种图形用户接口(gui),该项目的目标是在嵌入式linux平台上提供与普通个人电脑类似的图形用户界面。作为x_windows的替代品,microwindows提供了和x_windows类似的功能,但是却占用很少的内存,根据用户的配置,microwindows占用的内存资源只有100kb~600kb左右。microwindows的核心是基于显示设备接口的,可移植性较强,其本身提供了多种嵌入式系统常见的显示设备驱动程序。目前新版本的microwindows已经内建了framebuffer,因此可以不局限于linux的开发平台,在ec
[单片机]
基于<font color='red'>s3c44b0x</font>嵌入式开发平台实现移植microwindows的方法与过程
助力自动化发展,德承P2100系列嵌入式系统问市
德承是专业的嵌入式计算机制造商,推出了P2100系列嵌入式计算机(含P2102 和P2102E)。P2100系列旗下的P2102是一款超薄型无风扇嵌入式计算机,而P2102E则提供了额外弹性的扩展功能。透过德承创新独特的模块化设计,只要加上德承的显示屏模块,就可使P2100系列变成即插即用的工业平板电脑。 P2100系列搭载第8代Intel® Core™ U系列处理器,提供每瓦高效能运算(最多4核心,4.10 GHz),散热设计功耗(TDP)仅为15瓦,整合Intel® HD 620绘图芯片,P2100系列支持三屏显示功能(CDS/ VGA/ DP)。P2100系列适合应用于对低功耗且高效运算有需求的领域,如工业现场、生产线、
[嵌入式]
助力自动化发展,德承P2100系列<font color='red'>嵌入式系统</font>问市
基于LPC2131嵌入式系统μCOS-II实现CAN通讯
随着信息技术技术的飞速发展,ARM技术方案架构作为一种具备低功耗、高性能、以及小体积等特性的32位嵌入式微处理器,得到了众多的知识产权授权用户,其中包括世界顶级的半导体和系统公司。目前已被广泛的用于各类电子产品,汽车、消费娱乐、影像、工业控制、海量存储、网络、安保和无线等领域。被业界人士认为,基于ARM的技术方案是最具市场前景和市场优势的解决方案。 现场总线CAN是为解决现代汽车中众多的电控模块之间的数据交换而开发的一种串行通信协议。由于其具有多主站依据优先权进行总线访问,采用非破坏性总线仲裁,可完成对通信数据的错误检验和优先级判别,数据长度最多为8个字节,传输时间短,受干扰的概率低,抗干扰能力较强,通信速率最高可达1Mbit/
[单片机]
基于LPC2131<font color='red'>嵌入式系统</font>μCOS-II实现CAN通讯
OPPO Reno系列手机支持解锁BootLoader
今天我们上OPPO旗下的ColorOS论坛发现4月份发布的OPPO Reno系列手机已经支持解锁BootLoader(OPPO方面称是深度测试),这对手持该系列手机的发烧友来说是个好消息,具体解锁操作步骤如下: 【申请加入深度测试条件】 申请必须满足以下所有条件: 1.机型上市时间必须超过3个月; 2.60天内无申请记录; 3.OPPO账号在本机最近一次连续登录时间超过60天; 4.深度测试用户数未达到名额上限; 5.非政企和运营商定制手机; 6.支持中国大陆地区上市手机。 【申请加入深度测试须知】 1.加入测试计划后可能会对手机造成不可预估的影响; 2.三方固件有可能会使手机部分功能无法正常运行,例如相机拍照。
[手机便携]
OPPO Reno系列手机支持解锁<font color='red'>BootLoader</font>!
嵌入式系统优先级反转问题的分析
  引言   VxWorks是美国Wind River(风河)公司的一个实时操作系统,具有良好的可靠性和实时性。该系统采用基于优先抢占式调度策略,系统为每一个任务分配一个优先级,调度程序保证当前运行的是优先权最高的任务。但在实际开发中,由于任务间资源共享,信号量及中断的引入,往往会出现高优先级任务被低优先级任务长时间阻塞或阻塞一段不确定时间的现象,即所谓优先级反转(Priority Inversion)。优先级反转会造成任务调度的不确定性,严重时可能导致系统崩溃。本文在参考文献的基础上,结合实际项目开发过程中遇到的优先级反转问题,对造成优先级反转的原因及其解决方法进行了探讨。   优先级反转一般性描述   优先级反转发生
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved