BootLoader加载程序

本文介绍了Bootloader的工作流程和功能,包括其在嵌入式系统中的角色,启动方式,以及主要任务。Bootloader负责初始化硬件设备,创建稳定的运行环境,并为加载操作系统内核做好准备。文章详细讨论了Bootloader的两个阶段(Stage1和Stage2),以及如何在系统加电复位后触发运行。此外,还提到了ICD和ICE这两种调试工具的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


关于bootloader的工作流程及功能理解得内容整理,主要关于Bootloader存在的意义,启动方式,工作内容等等。
一、bootloader与复位程序
在嵌入式系统中没有BIOS(Basic Input /Output System)启动程序,而采用称为Bootloader程序启动,整个系统的加载启动任务就完全由Bootloader来完成。
Bootloader的主要工作可以初始化硬件设备,将整个系统的软硬件环境设定在确定的可以工作的的状态,以便为最终调用操作系统内核、运行用户应用程序做好准备。
复位程序是指系统上电或异常复位产生异常中断时调用的RESET复位异常处理程序。
 
二、bootloader是如何触发运行的
系统加电复位后,几乎所有的处理器都从由复位地址上取指令。有些内核在复位时通常都从地址0x0处取它的第一条指令。抑或从某种类型的固态存储设备被映射到这个预先设置好的地址上。因此在系统加电复位后,处理器将首先执行存放在复位地址处的程序。
系统通常的启动时,可以直接从Flash/ROM运行程序启动,也可以将内存映像文件从Flash/ROM中复制、解压到RAM,再从RAM启动。
通过开发环境可以将Bootloader定位在复位地址开始的存储空间内,将Bootloader是系统加电后首先必须运行的一段程序代码。可以通过scatter文件将之定位到硬件复位地址。
 
三、bootloader需要完成的主要工作
bootloader通常分为两个部分:引导代码和操作系统执行环境的初始化代码
引导代码又可分为两部分,常用两个stage的bootloader的工作步骤:
stage1:
硬件初始化(板级片级代码:关闭watch dog,中断禁止,初始化时钟等等);为加载bootloader stage2准备RAM空间,配置FLASH、SRAM、DRAM等 初始化栈、变量等;复制bootloader的satge2到RAM的空间;设置好堆栈,跳转到stage2执行;
stage2:
初始化硬件设备 检查内存映射,映像文件从flash到RAM中,设置参数调用内核;
最后一步跳转main函数:B __main 和B main的差别,__main调用一些初始化后再调用用户定义的main入口;
 
点点滴滴:
ICD和ICE:
In Circuit Debugger / In Circuit Emulator在线调试器和在线仿真器
ICE完全模拟CPU工作,通过外围电路捕获CPU的 各种状态信息,输送到PC端,也就是说它相当于CPU加上调试电路,可以从物理上完全替代CPU。而由于模拟问题无法跟上CPU处理速度,在处理器芯片内部加入一个EmbeddedICE单元,提供传统ICE的诸多功能。
对应EmbeddedICE调试工具极为ICD。
两者差别:ICE通过自身仿真CPU进行调试,而ICD则是利用芯片内部的EmbeddedICE单元对CPU进行调试。
关于初始入口点的设置:
-entry的设置通过ICE方式调试时直接设置PC有效,而当脱离ICE方式运行时,ARM上电后跳转到硬件复位地址,通过bootloader代码进一步跳转到入口点;
--汇编程序中的ENTRY只表示汇编入口,而非设置入口点;
根域:装载地址=执行地址 而 -entry设置的地址必须是根执行域;
包含__main的段InRoot$$Sections,必须包含在root region(根域);
FIRST/LAST指定放置在一个执行域的第一个或最后一个区域;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值