BootStrap运行流程解析

       基于ARM的嵌入式系统的启动都需要引导程序,引导过程可以有两种,一种是先运行小型的bootstrap完成所谓的low level初始化,再调用如Uboot,RedBOOT等功能强大的引导程序进行全面的初始化,设置操作系统内核的加载地址和运行参数等等;另外一种是直接使用Uboot等引导程序两步合成一步完成。bootstrap只是针对ARM CPU进行初始化,直接根据芯片的引脚打交道,不涉及norflash,nandflah,SDRAM 等设备的驱动程序,所以整个程序比较简明易懂;而UBOOT比较庞大,对于初学者而言想一下子完全弄清楚整个脉络,知道移植时候需要在何处增加什么代码是很有难度的,所以建议入门者还是先采用这种分两层引导的结构。下面对ATMEL官方提供的基于at91sam9260的bootstrap进行简要分析。

     bootstrap的结构有点类似于UBOOT,其中crt0_gnu.S完成的功能和UBOOT中cpu/arm926ejs下的start.S类似:设置ARM中断向量,如果定义了norflash启动则将bootstrap搬移到SDRAM中,然后设置始终,初始化数据段,bss段,最后跳转到main.c执行。

     main.c首先调用hw_init()完成硬件初始化,该部分主要任务完成DEBUG串口配置,这样就可以同串口输出在PC的超级中断上看到运行信息了;接下来配置禁用看门狗后配置时钟和PLL,这个部分的数据很重要,需要仔细查阅数据手册;然后是SDRAM控制器参数设定和协处理器CP15的设置;其次是SDRAM的初始化,主要是根据电路连接设置GPIO的功能。main.c的第二步是根据选择的启动方式复制印象文件到SDRAM中,根据设置的启方式初始化NORFLASH ,NANDFLASH或者是DATAFLASH。第三部分根据需要解压缩映像文件。然后跳转到定义的内核运行地址运行。到此bootstrap功德圆满。

     通过对bootstrap源码的阅读有助于理解ARM的启动过程,为裁剪和移植UBOOT源码打下基础。嵌入式的学习还长路漫漫,先写到这,继续学习^_^!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值