bootstrap简单介绍

来源:互联网 发布:王力宏 唱功 知乎 编辑:程序博客网 时间:2024/06/14 07:06

bootstrap 是最初級的引導,旨在初始化CPU,簡單時鐘,堆椎,目標是讓CPU處於可以正常運行\r 
咱通常說的uboot那樣的bootloader實際上是集成了很多功能及驅動的程式,如串口,網絡等,目的是為加載和調試kernel創建一個良好環境



基于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源码打下基础。嵌入式的学习还长路漫漫,先写到这,继续学习^_^!
 


0 0
原创粉丝点击