BootLoader 内核 文件系统
时间:2026-01-21
时间:2026-01-21
内
核
文
件
系
统
学院:计算机与通信工程学院
班级: 嵌入式软件11-01
学号
姓名: 杨战强
BootLoader:
一个嵌入式系统从软件角度来看分为三个层次:
引导加载程序
包括固化在固件(firmware)中的boot程序(可选),和BootLoader两大部分。 Linux内核
特定于嵌入式平台的定制内核。
文件系统
包括了系统命令和应用程序。
在嵌入式系统中,通常没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时都从地址0X00000000开始执行。而在这个地址处安排的通常就是系统的BootLoader程序。
定义:简单地说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。
安装:系统加电或复位后,所有的CPU通常都从CPU制造商预先安排地址开始执行。比如,S3C2410在复位后从地址0X00000000起开始执行。而嵌入式系统则将固态存储设备(比如:FLASH)安排在这个地址上,而BootLoader程序又安排在固态存储器的最前端,这样就能保证在系统加电后,CPU首先执行BootLoader程序。
为什么要进行BootLoader移植?
每种不同的CPU体系结构都有不同的BootLoader。除了依赖于CPU的体系结构外,BootLoader还依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,外设芯片的类型等。这就是说,对于两块不同的开发板而言,即使他们是基于同一种CPU而构建的,但如果他们的硬件资源或配置不一致的话,要想在一块开发板上运行的BootLoader程序也能在另一块板子上运行,还是需要作修改。 BootLoader的stage1通常包括以下步骤:
硬件设备初始化
为加载BootLoader的stage2准备RAM空间
拷贝BootLoader的stage2到RAM空间中
设置好堆栈
跳转到stage2的C入口点
BootLoader的stage2通常包括以下步骤:
初始化本阶段要使用到的硬件设备
将内核映像和根文件系统映像从flash上读到RAM中
调用内核
Bootloader需要具备以下几个功能:
1:初始化RAM
Bootloader必须能够初始化RAM,因为将来系统要通过它来保存一些Volatile数据
2:初始化串口
Bootloader应该要初始化以及使能至少一个串口,通过它与控制台通信
3:启动内核镜像
根据内核镜像保存的介质不同,可从FLASH以及RAM启动,下面系统状态必须得到满足
(1) CPU寄存器设置
R0=0;
R1=机器类型
R2=启动参数标记列表在RAM中的起始地址
这3个寄存器的设置是在最后启动内核时通过启动参数传递完成的
(2) CPU模式
关闭中断,属于SVC(管理模式)
Bootloader中没有必要支持中断的实现,这属于内核机制以及设备驱动管理的管理范畴;SVC模式是系统的一种保护模式,这样就可以进行一些只能在SVC模式下的操作(比如一些特定寄存器的访问操作)
(3) Cache和MMU的设置
MMU必须关闭
数据cache必须关闭
指令cache可以关闭也可以启动
Bootloader中所有对地址的操作都是物理地址,不存在虚拟地址,因此MMU必须关闭,Bootloader主要是装载内核镜像,镜像数据必须真实写回SDRAM中,所以数据cache必须关闭,而对于指令cache,不存在强制性的规定,但在一般情况下,推荐关闭cache
Bootloader启动流程:
一:stage1
1》:完成基本硬件初始化
软件运行离不开硬件,BOOT必须要对硬件进行初始化.硬件的初始化通过配置特殊控制寄存器来完成,包括下面几个部分:
(1) 关Watchdog Timer
(2) 屏蔽所有的中断
为中断提供服务通常是 OS 设备驱动程序的责任. 因此Boot的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写 CPU 的中断屏蔽寄存器及状态寄存器(ARM的 CPSR 寄存器)来完成
(3) 初始化PLL(锁相环)和时钟(设置CPU的速度)
PLL的输出频率要就是处理器的工作主频.
(4)初始化RAM
使用一组专用的特殊功能寄存器来控制外部存储器的读/写操作,通过对该组特殊功能寄存器编程,可以设定外部数据总线宽度,访问周期,定时的控制信号(例如RAS和CAS)等参数.这些主要要通过设置13 个从0x1C80000(BWSCON)开始的寄存(MEMORYCONTROLLER SPECIAL REGISGERS)来完成.
(4)初始化LED
(5)关闭CPU内部指令和数据cache等
2》:为加载stage2准备RAM空间
为了获得更快的执行速度,通常把stage2加载到RAM空间中来执行,因此必须为加载Bootloader的stage2准备一段可用的RAM空间
3》:复制stage2到RAM中
确定stage2的可执行映像文件在存储设备的存放起始地址和终止地址及RAM空间的起始地址
4》:设置堆栈指针
这是为执行stage2的C语言代码作好准备(BOOT需要为每种模式建立堆栈,这需要初始化其程序状态寄存器(SPSR)和堆栈指针.系统需要初始化哪些堆栈取决于用户使用了那些中断,以及系统需要处理哪些错误类型.一般来说管理者堆栈必须设置(内核运行于此模式下),如果使用了IRQ中断,则IRQ堆栈也必须初始化.)
二:stage2
(1) 用汇编语言跳转到main入口 …… 此处隐藏:5026字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:误差与测量不确定度(part2)
下一篇:常见问题解决方案——腾讯通软件