Bootloader介绍
1. 什么是Bootloader
软件层次。一个嵌入式系统从软件角度来看分为三个层次:
1. 引导加载程序
包括固化在固件(fireware)中的boot程序(可选),和Bootloader两大部分。
BIOS GRUB
2. Linux内核
3. 文件系统
Flash中的空间分配如下:
Boot parameters(内核的启动参数)中有Bootloader所需的参数。
Kernel为内核映像
Root filesystem根文件系统
系统启动流程:
系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址开始执行。比如上S3C2440在复位后从地址0x00000000起开始执行。而嵌入式系统则将固态存储设备(比如:Flash)安排在这个地址上,而bootloader程序又安排在固体存储器的最前端,这样就能保证在系统上电后CPU首先执行Bootloader程序。【但Bootloader运行完后,该块内存会被当做普通的内存空间使用,我不明白这是为什么,会不会再次引导。】
对内存的理解:
CPU的最终表现形式是IO口,CPU必须通过地址总线和数据总线和外界进行数据交换。一直以来,我搞不清楚内存和flash的关系,认为二者是同级关系。CPU向外延伸的地址总线会连接到一定的器件上(这里只分析存储类的器件),这样CPU就可以任意的读取存储类器件上的数据。当然既然是总线那就有地址(其实,这就是所谓的内存空间),我们将不同的器件分别放到不同的总线地址上(这样就分配了内存空间)。这里我们也就知道了所谓的内存空间只是我们对地址总线的另一个称呼,而内存空间实际对应的是各个存储器件的存储单元。
内存可以是flash,可以是ram。
2. 为什么移植Bootloader
l 不同的CPU体系结构
l 板级配置(外设芯片、硬件地址分配)
3. Bootloader启动流程(两阶段)
a) Stage1
l 硬件设备初始化(内部寄存器)【有待实际完善】
l 为加载Bootloader的stage2准备RAM空间
l 拷贝Bootloader的stage2到RAM空间
l 设置好堆栈(C中使用)
l 跳转到stage2的C入口点
b) Stage2
l 初始化本阶段要使用的硬件设备(比如串口、网卡)(外部寄存器)。
l 将内核映像和根文件系统映像从flash上读到RAM中。
l 调用内核(启动操作系统)
内存分布图
当完成步骤2后,所有的bootloader操作完成,开始在内核下工作。
文章评论(0条评论)
登录后参与讨论