17、Bootloader(1) ---Bootloader的结构

来源:互联网 发布:德拉蒙德格林数据 编辑:程序博客网 时间:2024/04/30 13:21
 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序:

1)Bootloader

   系统启动或复位以后执行的第一段代码,它主要用来初始化处理器及外设,然后调用 Linux 内核。

2)Linux内核

  是特定于嵌入式板子的定制内核以及内核的启动参数。内核的启动参数是默认的或者是Bootloader传递给它的

3)根文件系统

    Linux 内核在完成系统的初始化之后需要挂载某个文件系统做为根文件系统(Root Filesystem)。根文件系统是 Linux 系统的核心组成部分,它可以做为Linux 系统中文件和数据的存储区域,通常它还包括系统配置文件和运行应用软件所需要的库。

4)应用程序  

   应用程序可以说是嵌入式系统的“灵魂”,它所实现的功能通常就是设计该嵌入式系统所要达到的目标

               

                        嵌入式LINUX系统中的典型分区结构   

“Boot parameters”分区中存放一些可设置的参数,比如IP地址、串口波特率、要传递给内核的命令行参数等  

    启动过程:正常启动过程中,Bootloader首先运行,然后它将内核复制到内存中,并且在内存某个固定的地址设置好要传递给内核的参数,最后运行内核。在内核启动后,它会挂接(mount)根文件系统(“Root filesystem”),启动文件系统中的应用程序 

 

2.Bootloader的两个阶段

Bootloader第一阶段的功能:(运行在Flash当中)

        -- 硬件设备初始化

        -- 为加载Bootloader的第二阶段代码准备RAM空间

        -- 复制Bootloader的第二阶段代码到RAM空间中

        -- 设置好栈(原因:为下一步准备的,因为C语言的运行需要堆栈)

        -- 跳转到第二阶段代码的C入口点

  硬件初始化包括:关闭WATCHDOG、关中断、设置CPU的速度和时钟频率、RAM初始化

Bootloader第二阶段的功能:(运行在内存当中)

         -- 初始化本阶段要使用到的硬件设备(串口、网口类的硬件)

         -- 检测系统内存映射(memory map)

         -- 将内核映象和根文件系统映象从Flash上读到RAM空间中

         -- 为内核设置启动参数

         -- 调用内核

   调用内核前,下列条件要满足:

        (1)CPU寄存器的设置

              R0 = 0

              R1 = 机器类型ID

              R2 = 启动参数标记列表在RAM中起始基地址

        (2)CPU工作模式

              必须禁止中断(IRQs和FIQs)

              CPU必须为SVC模式

        (3)Cache和MMU的设置

              MMU必须关闭

              指令Cache可以打开也可以关闭,数据Cache必须关闭

原创粉丝点击