1-4 bootloader初探

来源:互联网 发布:网络教育不能考公务员 编辑:程序博客网 时间:2024/06/05 04:03

一、  bootloader简介

        1.  bootloader相当于台式机的BIOS,用来在操作系统启动前对硬件进行初始化以及自检,然后把控制权交给操作系统。

             嵌入式操作系统的启动流程一般是bootloader->boot parameters->kernel->rootfilesystem

        2.  其设计方法可参考U-BOOT,U-BOOT可用于多种嵌入式CPU(MIPS,X86,ARM等),并支持多种OS(Linux,VxWorks,QNX等)。

        3.  U-BOOT包含两种模式,自主模式一般用于自动启动操作系统,开发模式(按“q”进入),可以对U-BOOT进行设置,便于对OS和Filesystem进行调试。

        4.  对于U-BOOT的源码分析方法,可以通过SourceInsight软件来进行,SourceInsight建立工程的基本方法如下:

            Project->New Project,选择project has its own configuration file->OK

            (而因为在源码里,文件名是区分大小写的,若是在windows系统中进行解压,将会丢失文件,建议把U-BOOT源码丢到Linux系统中进行解压,用SourceInsight通过samba在windows系统中对Linux系统建立系统磁盘映射,用此方法对源码进行分析。)

            添加代码:Project->Add and remove...  ->Add All两个都勾上,加入.S汇编文件:Options->Document Options中,在Document Type选中C Source File,在右边File添加变成:*.c;*.h;*.s;*.S,然后直接close。Project->Add and Remove->Add Tree

            最后添加函数联系,同步文件,就能使用鼠标单击函数,便自动显示函数内容,双击自动跳转到函数所在位置


二、  ARM处理器的启动流程

        1.  对于S3C2440处理器的启动流程分析(参考2440芯片手册里“mapping stepping stone”一节)

            S3C2440处理器可以设置为从2MB的norflash启动,也可以设置从256MB的nandflash启动,在CPU启动后,会把bootloader的前4K代码自动复制到CPU的最开始的4k被称为stepping stone中,而这部分代码的工作就是负责把bootloader剩余的代码从nandflash中复制到位于内存BANK6,也就是从0x30000000开始的空间里,然后继续运行内存中的代码,继续做余下的初始化以及把控制权移交给OS等工作。

            启动流程一般分为两个阶段,第一阶段(BL1),一般只初始化CPU,第二阶段(BL2),初始化其他硬件、堆栈等。

        2.  对于S3C6410处理器的启动流程分析(参考6410芯片手册中的3.3.3表,内存布局memory mapping一节)

            S3C6410所支持的启动方式有三种,分别是SROM(Norflash)、OneNand(具有Norflsh和Nandflash特性)以及IROM,地址0x000000为Mirrolred Region的镜像区域,根据选择,能把镜像映射到不同区域的启动方式(参考S3C6410_internal_ROM_Booting一节)

        3.  对于S5PV210的启动流程分析(参考S5PV210_UM_RE芯片手册的6.2.4节)

            S5PV210支持IROM启动,IROM为0xD0000000,IRAM(stepping stone)为0xD0020000,内存起始地址为0x20000000


三、  关于U-Boot的工作流程分析

    1.  程序入口:打开顶层Makefile,搜索/2440,得知smdk2440;

                              打开/board/samsung/smdk2440,可找到链接器文件u-boot.lds;

                              打开u-boot.lds,得知程序入口为start.o;

                              最后找到/cpu/s3c24xx/start.S

                              分析Makefile可知,可以通过make smdk2440_config然后make,来生成u-boot和u-boot.bin文件

    2.  对S3C2440的BL1和BL2的粗略分析(/cpu/s3c24xx/start.S的工作流程)

        1.  设置中断向量表

        2.  设置处理器为SVC模式

        3.  刷新I/D cache

        4.  关闭mmu和cache

        5.  关闭看门狗

        6.  关闭所有中断

        7.  初始化系统时钟

        8.  初始化串口

        9.  初始化nandflash

       10.  初始化内存

       11.  复制nandflash中的bootloader到内存

       12.  设置堆栈

       13.  清除bss段

       14.  LED初始化

       15.  网口初始化

       16.  LCD初始化

       17.  解析执行用户命令


四、  Bootloader的架构设计

  1.  第一阶段程序设计

    1.1  核心初始化

        1.1.1  设置中断向量表

        1.1.2  设置处理器为SVC模式

        1.1.3  关闭看门狗

        1.1.4  关闭所有中断

        1.1.5  关闭mmu和cache

        1.1.6  外设基地址初始化(针对6410处理器)

    1.2  C语言环境编程设置

        1.2.1  设置堆栈

        1.2.2  清除bss段

    1.3  LED初始化

    1.4  系统时钟初始化

    1.5  内存初始化

        1.5.1  内存初始化

        1.5.2  取消存储保护区(针对210处理器)

        1.5.3  iram-irom初始化(针对210处理器)

    1.6  复制Nandflash中的bootloader到内存中

        1.6.1  简单初始化NandFlash

        1.6.2  复制代码到内存中

        1.6.3  跳转到第二阶段


2.  第二阶段程序设计

    2.1  mmu初始化

    2.2  中断初始化

        2.2.1  中断初始化

        2.2.2  按键初始化

    2.3  串口初始化

        2.3.1  串口初始化

        2.3.2  一直printf函数

    2.4  网卡初始化

    2.5  LCD初始化

        2.5.1  触摸板初始化

        2.5.2  LCD初始化

    2.6  解析执行用户命令

        2.6.1  移植tftp命令

        2.6.2  移植bootm命令



0 0