0%
bootloader
8086芯片
- reset引脚跳变的时候
- CS(代码段寄存器)和IP(指令指针寄存器)分别初始化为
0xffff和0x0000,组合成一个20位的长度地址,再从这个地址跳转到其他地址ARM芯片
- PC直接复位到0地址,然后从中断向量表的
Reset位置获取下一步跳转的地址
- 直接将代码搬运到内存中执行
- 之后再以此为基础运行别的代码
- 出场写好的,用于启动用户软件的软件称为boot ROM
修改这部分代码
- 大部分芯片是用外部电路手动配置的方式
- 拨码开关的信号会被记录下来控制部分启动信息
- 对于电脑而言就是
BIOS二次至多次引导代码(bootloader)
- 一般
bootloader是说这个为什么需要
boot rom不够灵活
- 用户可控
bootloader
- MCU
- 单核或者多核同构
- 主频小于1GHz
- 没有MMU
- 最多运行RTOS
- 程序运行基本都是NOR Flash
- STM32的启动
- 启动时会固定跳转到0地址位置
- 通过两个boot引脚控制启动的代码映射
- 引脚01的时候可以映射system boot(arm中的boot rom)
- 第二位是0的时候,可以把存放用户代码的internal Flash映射到0
- 引脚11的时候将internal SRAM映射到0
- boot loader需要完成的任务
- 关闭看门狗,初始化中断和trap向量表,进行时钟和外设初始化,让芯片正常运行起来
- 提供CAN、UART、ETH等用于通讯功能的驱动,能够接收外部数据传输请求
- 提供FLASH的读写与擦除驱动,设计服务来对通讯端口接收到的更新代码进行校验、存储,以及跳转操作系统或后续应用程序代码
- 如有必要,还会开发一些基础诊断服务,串口交互程序等等
- 嵌入式Linux的SoC和计算机
- 系统一般存储在NAND Flash中(计算机一般是硬盘),运行前需要先将代码搬运到SRAM中
- 主要任务就是将代码从NAND Flash或者硬盘中搬运到SRAM中
- 转移的这部分内容就是
bootloader
- 转移的内容包括SPL和uBoot
- SPL是接力赛中的第二棒,初始化更大的外部DRAM,再将uBoot搬运到外部RAM中运行
- uBoot运行初始化程序,再将系统环境变量将OS内核搬运到DRAM中执行
- OS再完成根文件系统的加载等等
总结
- boot rom
- 自己写的boot loader
- 可以访问外部RAM,NAND Flash
- 初始化时钟,通讯等
- 接收,存储以及跳转代码
- application层