新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > ARM+Linux嵌入式系统的BootLoader设计

ARM+Linux嵌入式系统的BootLoader设计

作者:时间:2011-06-27来源:网络收藏
2.2 第二阶段拷贝到RAM

本文引用地址:http://www.eepw.com.cn/article/150562.htm

  把第二阶段Stage2拷贝到RAM地址的最顶大小为1 MB的开始空间,RAM的起始地址为0x30000000。代码如下所示:

  

程序

  2.3 堆栈指针的设置

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

  

程序

  3 Stage2的

  3.1 可执行映像Stage2的入口

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

  

程序

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

  3.2 内存影射

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

  

程序 linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭