Bootloader也叫做引导加载程序。在嵌入式系统上电复位后首先运行引导加载程序,它的功能主要是负责系统的上电自检、必要的硬件初始化、建立储存空间映射,并加载和启动操作系统。Bootloader一般储存在bootROM中,当前使用最多的类型是NOR flash rom,在大多数的嵌入式系统中,flash里边不仅储存了bootloader,还储存了用户程序代码。
接下来说一下bootloader如何加载操作系统,有以下四种方式:
方式一:直接在flash中运行操作系统代码
也就是说在嵌入式系统上电或者复位后,执行bootloader代码,完成必要的硬件初始化后,直接跳转到flash中操作系统的入口地址继续执行。
方式二:在RAM中运行操作系统代码
在单片机上电或者复位后,在flash中执行bootloader代码,完成必要的硬件初始化,接下来将flash中的操作系统和用户程序代码拷贝到RAM中,然后跳转到ram中的操作系统入口地址执行程序。
方式三:从外存储器加载
这种情况下,操作系统和用户程序不存在flash中了,而是存在外存中,但是bootloader还在flash中,此时在bootloader中必须要有访问外存的驱动程序,在处理器上电复位后,执行flash中的存放的bootloader代码,完成硬件初始化,通过外存驱动程序去读取外存中的用户程序和操作系统,并将其复制到RAM中,然后跳转到操作系统的入口地址。
方式四:从通信端口加载
这种方式与方式三类似,不过需要在访问外存的驱动程序中添加通信端口的驱动程序,比如串口、以太网等,一般用于固件程序的更新调试。
前三种方式属于启动加载模式,这是嵌入式系统正常工作时使用的启动方式。第四种加载方式属于下载模式,这是在调试或者维护更新阶段使用的系统启动方式。在下载模式下,bootloader会通过通信端口从上位机或者服务器上下载操作系统映像/用户程序,暂存到RAM中,然后将其烧录到flash中,也可以烧录到SRAM中运行。