首页 » 技术文章 » ARM-Linux嵌入式系统的BootLoader分析与设计

ARM-Linux嵌入式系统的BootLoader分析与设计

作者:  时间:2011-07-18 20:48  来源:EDN

  23 堆栈指针的设置

  用户使用哪些中断决定了系统堆栈的初始化,以及系统需要处理的哪些错误类型。一般情况下,堆栈设置是必须,而且是由管理者自己设置的。如果需要使用IRQ中断,那么IRQ堆栈的设置也是必须的,下面是IRQ堆栈的设置:

  3 Stage2的设计

  31 可执行映像Stage2的入口

  由于Glibc库支持的函数不能用于编译和链接Boot Loader这样用C语言编写的程序,因此把main()函数的起始地址作为第二阶段的入口点是最直接的想法。可以用汇编编写一段Trampoline小程序,用CPU跳转指令跳到main()函数去执行,当函数返回时会再次回到Trampoline程序,代码如下:

  程序顺利时就不会再回到开始的Trampoline程序,不然就会回到最后的语句,系统就会重新启动。

  32 内存影射

  一般S3C2410上配置的SDRSAM大小为64 MB,该SDRAM的物理地址范围是Ox30000000Ox33FFFFFF(属于Bank 6)。由Section的大小可知,该物理空间可被分成64个物理段。因为ARM体系结构中数据缓冲必须通过MMU开启,因此Boot Loader效率不是很高,但是MMU可以通过平板映射(虚拟地址和物理地址相同)方式被开启,这样使用内存空间Dcache,从而使Boot Loader的运行速度得到有效的提高。映射关系代码如下:

  33 装载内核映像和根文件系统映像

  像ARM这样的嵌入式CPU通常都是在统一的内存地址空间中寻址FLASH等固态存储设备的,因此从Flash上读取数据与从RAM单元中读取数据一样,用一个简单的循环就可以完成从FLASH设备上拷贝映像的工作:其中count为根文件系统映像的大小或内核映像的大小。

  34 内核的启动参数的设置

  内核启动可以从NAND FLASH(NOR FLASH)中启动运行Linux,需要修改启动命令如下:

  LCD启动参数一般都包括rootinitconsolenoinitrd不使用ramdiskroot根文件系统在MTD分区。Init内核运行入口命令文件。co-nsol内核信息控制台,ttys0表示串行口0tty0表示虚拟终端。

  4 结语

  通过对Boot Loader的分析可以看出,设计一个性能优良的Boot Loader可以提高系统的稳定性及实时性,它是嵌入式开发中不可或缺的一部分。只有设计出一个稳定的Boot Loader,才能进行下一步的系统开发工作,直至完成整个嵌入式系统的开发。设计Boot Loader是一项很复杂的工作,需要对硬件资源和所用的操作系统有很深的理解。在实际开发中可以根据需要简化设计,去除不必要的系统功能,这样可以大大提高程序执行的效率和稳定性。这里给出的Boot Loader已经顺利通过了调试,可以正常加载操作系统。

相关推荐

从TI“蝗虫战略”到雷军“芯片免费”

芯片  嵌入式系统  2013-11-07

Linux将进军汽车智能系统领域

Linux  汽车智能系统  2013-07-09

嵌入式系统领域迎来创新与转型时代

嵌入式系统  通信  2013-05-30

VDC:物联网将改写嵌入式系统开发趋势

物联网  嵌入式系统  2013-05-14

Android回归Linux核心怀抱

Google  Linux  Android  2012-11-01

EXT4数据损失bug影响Linux稳定版内核

EXT4  Linux  2012-10-25
在线研讨会
焦点