位置:51电子网 » 技术资料 » 嵌入式系统

基于ARM-Linux嵌入式系统引导程序的设计

发布时间:2008/5/27 0:00:00 访问次数:778

刘晶晶

  摘要:本文介绍了嵌入式操作系统引导程序-bootloader的概念和作用。以加载linux操作系统内核为例,重点阐述了bootloader运行过程的具体步骤及其实现方法。
关键词:bootloader、s3c2410、引导、嵌入式系统。
debugger330元 labtool-48uxp2800元 无忧s3c2410 arm9开发板800
0.概述
  在专用的嵌入式开发板上运行操作系统(如linux)已经变得越来越流行,而bootloader就是为引导操作系统内核运行的一段代码。通过它可以初始化硬件设备、建立或检测内存空间的映射,其功能有点类似于pc机的bios(基本输入输出系统)程序。它的主要作用是为运行操作系统提供基本的运行环境,并操作系统的内核装载到存储器(ram)中的合适位置上去运行。本文将以samsung公司的s3c2410开发板为开发平台,具体阐述了bootloader的运行原理与实现分析。
  bootloader程序与cpu芯片的内核结构、具体芯片和使用的操作系统等因素有着密切关系,因此要为所有类型的嵌入式开发板建立一个通用的bootloader几乎是不可能的。尽管如此,本文将尽量对bootloader归纳出一些通用的概念,以帮助特定用户设计实现自己的bootloader。


1.系统组成
  典型的arm嵌入式系统硬件平台一般包括一个以arm为内核的处理器、存储器和必要的外部接口与设备。在本系统中,采用内嵌arm920t的samsung公司s3c2410处理器,工作频率200mhz,存储器使用2mb的norflash和64mb的sdram,外部接口除了用于下载和通信的串口,还配备有以太网接口、usb接口。
软件平台由以下部分组成:bootloader、嵌入式操作系统内核(kernel)、文件系统(filesystem)[1]。其中,嵌入式操作系统内核是嵌入式系统加电运行后的管理平台,负责实时性任务和多任务的管理。文件系统是嵌入式系统软件平台占用存储量最大的一部分,也是与用户开发最相关的一部分。它存储了系统配置文件、系统程序、用户应用程序和必需的驱动程序。

2、bootloader运行流程
  系统加电或复位后,所有的cpu通常都从某个由cpu制造商预先安排的地址上取指令。比如sansungs3c2410cpu,在系统加电或复位时就会从地址0x00000000处读取它的第一条指令。基于cpu构建的嵌入式系统则通常都会有某种类型的固态存储设备(如本例中的flash)被映射到这个预先安排的地址上,而bootloader程序一般正是被烧录或者下载到固态存储设备的0x00000000地址处,因此在系统在加电或复位后,cpu将会首先执行bootloader程序。
  由于bootloader的实现依赖于cpu的体系结构,因此bootloader功能的实现基本可分为stage1和stage2两大部分,分别运行于系统的rom和ram中。依赖于cpu体系结构的代码,比如设备初始化代码等,通常都放在stage1中,基本都用汇编语言来实现,以达到简短精练的目的。而stage2则通常用c语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性[3]。

3.1其中,bootloader的stage1通常依次执行以下主要步骤:

3.1.1硬件设备初始化。
  其目的是为执行stage2及随后的操作系统kernel准备好一些基本的硬件环境。
  (a)建立中断向量表,当程序出现异常后可跳转到相应子程序执行。如
bresetaddr;
bundefaddr;handlerforundefinedmode0x4
bswi_addr;handlerforswiinterrupt0x8
bpreabortaddr;handlerforpreabort0xc
bdataabortaddr;handlerfordataabort0x10
b.;reserved0x14
birq_addr;handlerforirqinterrupt0x18
bfiq_addr;handlerforfiqinterrupt0x1c
  (b)屏蔽所有的中断。为中断提供服务通常是操作系统设备驱动程序的责任,因此在bootloader的执行全过程中可以不必响应任何中断。可以通过写s3c2410的寄存器intmsk、intsubmsk来完成;
  (c)设置cpu的速度和时钟频率。可以通过写寄存器locktime、mpllcon、upllcon来实现;
  (d)ram初始化。包括正确地设置系统的内存控制器的功能寄存器bwscon以及各内存控制寄存器等。
  (e)初始化led。典型地,通过gpio来驱动led,其目的是表明系统的状态是正常还是出现错误。

3.1.2为加载stage2准备ram空间,拷贝stage2到ram中。
  为了获得更快的执行速度,通常把stage2加载到ram空间中来执行,因此必须为加载bootloader的stage2准备好一段可用的ram空间范围。具体的地址范围可以任意安排,比如我们习惯将stage2可执行映像安排到ram地址最顶部1mb开始的空间内执行。拷贝时要确定两点:stage2的可执行映像存放在flash中的起始地址和终止地址;以及ram空间的起始地址。

3.1.3设置堆栈指针sp。
  堆栈指针的设置是为了执行c语言代码作好准备,通常我们可以把sp(userstack)设置在上面所安排
刘晶晶

  摘要:本文介绍了嵌入式操作系统引导程序-bootloader的概念和作用。以加载linux操作系统内核为例,重点阐述了bootloader运行过程的具体步骤及其实现方法。
关键词:bootloader、s3c2410、引导、嵌入式系统。
debugger330元 labtool-48uxp2800元 无忧s3c2410 arm9开发板800
0.概述
  在专用的嵌入式开发板上运行操作系统(如linux)已经变得越来越流行,而bootloader就是为引导操作系统内核运行的一段代码。通过它可以初始化硬件设备、建立或检测内存空间的映射,其功能有点类似于pc机的bios(基本输入输出系统)程序。它的主要作用是为运行操作系统提供基本的运行环境,并操作系统的内核装载到存储器(ram)中的合适位置上去运行。本文将以samsung公司的s3c2410开发板为开发平台,具体阐述了bootloader的运行原理与实现分析。
  bootloader程序与cpu芯片的内核结构、具体芯片和使用的操作系统等因素有着密切关系,因此要为所有类型的嵌入式开发板建立一个通用的bootloader几乎是不可能的。尽管如此,本文将尽量对bootloader归纳出一些通用的概念,以帮助特定用户设计实现自己的bootloader。


1.系统组成
  典型的arm嵌入式系统硬件平台一般包括一个以arm为内核的处理器、存储器和必要的外部接口与设备。在本系统中,采用内嵌arm920t的samsung公司s3c2410处理器,工作频率200mhz,存储器使用2mb的norflash和64mb的sdram,外部接口除了用于下载和通信的串口,还配备有以太网接口、usb接口。
软件平台由以下部分组成:bootloader、嵌入式操作系统内核(kernel)、文件系统(filesystem)[1]。其中,嵌入式操作系统内核是嵌入式系统加电运行后的管理平台,负责实时性任务和多任务的管理。文件系统是嵌入式系统软件平台占用存储量最大的一部分,也是与用户开发最相关的一部分。它存储了系统配置文件、系统程序、用户应用程序和必需的驱动程序。

2、bootloader运行流程
  系统加电或复位后,所有的cpu通常都从某个由cpu制造商预先安排的地址上取指令。比如sansungs3c2410cpu,在系统加电或复位时就会从地址0x00000000处读取它的第一条指令。基于cpu构建的嵌入式系统则通常都会有某种类型的固态存储设备(如本例中的flash)被映射到这个预先安排的地址上,而bootloader程序一般正是被烧录或者下载到固态存储设备的0x00000000地址处,因此在系统在加电或复位后,cpu将会首先执行bootloader程序。
  由于bootloader的实现依赖于cpu的体系结构,因此bootloader功能的实现基本可分为stage1和stage2两大部分,分别运行于系统的rom和ram中。依赖于cpu体系结构的代码,比如设备初始化代码等,通常都放在stage1中,基本都用汇编语言来实现,以达到简短精练的目的。而stage2则通常用c语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性[3]。

3.1其中,bootloader的stage1通常依次执行以下主要步骤:

3.1.1硬件设备初始化。
  其目的是为执行stage2及随后的操作系统kernel准备好一些基本的硬件环境。
  (a)建立中断向量表,当程序出现异常后可跳转到相应子程序执行。如
bresetaddr;
bundefaddr;handlerforundefinedmode0x4
bswi_addr;handlerforswiinterrupt0x8
bpreabortaddr;handlerforpreabort0xc
bdataabortaddr;handlerfordataabort0x10
b.;reserved0x14
birq_addr;handlerforirqinterrupt0x18
bfiq_addr;handlerforfiqinterrupt0x1c
  (b)屏蔽所有的中断。为中断提供服务通常是操作系统设备驱动程序的责任,因此在bootloader的执行全过程中可以不必响应任何中断。可以通过写s3c2410的寄存器intmsk、intsubmsk来完成;
  (c)设置cpu的速度和时钟频率。可以通过写寄存器locktime、mpllcon、upllcon来实现;
  (d)ram初始化。包括正确地设置系统的内存控制器的功能寄存器bwscon以及各内存控制寄存器等。
  (e)初始化led。典型地,通过gpio来驱动led,其目的是表明系统的状态是正常还是出现错误。

3.1.2为加载stage2准备ram空间,拷贝stage2到ram中。
  为了获得更快的执行速度,通常把stage2加载到ram空间中来执行,因此必须为加载bootloader的stage2准备好一段可用的ram空间范围。具体的地址范围可以任意安排,比如我们习惯将stage2可执行映像安排到ram地址最顶部1mb开始的空间内执行。拷贝时要确定两点:stage2的可执行映像存放在flash中的起始地址和终止地址;以及ram空间的起始地址。

3.1.3设置堆栈指针sp。
  堆栈指针的设置是为了执行c语言代码作好准备,通常我们可以把sp(userstack)设置在上面所安排
相关IC型号
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!