系统上电之后,需要一段代码来初始化,为所有的代码运行搭建环境,可以将操作系统内核复制到内存中运行,我们称这段代码为Bootloader.
Bootloader的作用(2种模式)
1.启动加载模式:上电后,Bootloader从板子上某块存储设备上将操作系统加载到RAM运行。比如我们拿到一台装好了操作系统的电脑。系统启动先从C盘将操作系统加载出来到RAM运行。完成这个功能的代码就叫Bootloader。
2.下载模式:开发人员通过串口网络等通信手段从PC下载文件,将文件放在内存运行或是烧录到Flash中。
- 典型例子
又比如单片机:我们下载程序到板子上,1.上电烧录:当单片机的烧录口检测到启动信号(电脑点了下载),于是进入下载模式:其实是通过St-link或者USB转TTL将代码(可执行hex/bin文件)发给单片机,但此时单片机收到文件后,通过Bootloader这段代码将收到的文件依次拷贝到FLASH规定的位置,直到拷贝结束。2.掉电重启:此时烧录口没有启动信号,不进入下载模式,进入正常运行模式运行代码。
- 小结:BootLoader是板子上电的第一部分运行的代码,它可用来烧录文件,也可为我们写的代码搭建好环境。
Bootloader的两个阶段
(1)第一阶段:
硬件设备初始化(关闭Watchdog,关中断)
为加载bootloader第二阶段代码准备好RAM空间。
复制Bootloader第二阶段代码到RAM。
设置好栈
跳到第二阶段代码入口点
(2)第二阶段
初始化硬件设备(比如初始化串口,用于下载模式的人机交互)
检测系统内存映射(memory map)(即确定板上用了多少内存,它们的地址空间是什么)
将内核映像和根文件系统(Linux系统能够运行所需的必要库,程序等等)从Flash读到RAM空间。
为内核启动设置参数
调用内核