打印
[Atmel]

转:bootstrap过程简介

[复制链接]
838|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddllxxrr|  楼主 | 2016-1-14 15:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ddllxxrr 于 2016-1-14 15:26 编辑



bootstrap 是最初級的引導,旨在初始化CPU,簡單時鐘,堆椎,目標是讓CPU處於可以正常運行

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

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6955

帖子

67

粉丝