打印
[PIC®/AVR®/dsPIC®产品]

单片机电路——BootLoader

[复制链接]
1369|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
classroom|  楼主 | 2024-5-14 11:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pzsh 于 2024-5-21 09:54 编辑

1.什么是BootLoader

    BootLoader是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。

⒈ Boot Loader 所支持的 CPU 和嵌入式板

每种不同的 CPU 体系结构都有不同的Boot Loader。有些 Boot Loader 也支持多种 体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS 体系结构。除了依赖于 CPU的 体系结构外,Boot Loader 实际上也依赖于具体的 嵌入式板级设备的配置。这也就是说,对于两块不同的 嵌入式板而言,即使它们是基于同一种 CPU 而构建的,要想让运行在一块板子上的 Boot Loader 程序也能运行在另一块板子上,通常也都需要修改 Boot Loader 的 源程序。

⒉ Boot Loader 的安装媒介(Installation Medium)

系统加电或复位后,所有的CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。比如,基于 ARM7TDMI core 的 CPU 在复位时通常都从地址 0x00000000 取它的第一条指令。而基于CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上。因此在系统加电后,CPU 将首先执行Boot Loader 程序。

⒊ 用来控制 Boot Loader 的设备或机制

主机和目标机之间一般通过串口建立连接,Boot Loader 软件在执行时通常会通过串口来进行输入、输出,比如:输出打印信息到串口,从串口读取用户 控制字符等。

⒋ Boot Loader 的启动过程

BootLoader 的启动过程可分为单阶段(Single-Stage)和多阶段(Multi-Stage)两种。通常多阶段的Boot Loader 具有更复杂的功能,更好的可移植性。从固态存储设备上启动的Boot Loader 大多采用两阶段,即启动过程可以分为 stage1和stage2:stage1完成初始化硬件,为stage2准备内存空间,并将stage2复制到内存中,设置堆栈,然后跳转到stage2。

⒌ Boot Loader 的操作模式 (Operation Mode)

大多数Boot Loader都包含两种不同的操作模式。启动加载模式和下载模式。

(1)启动加载(Boot loading)模式:这种模式也称为“自主”模式,也即Boot Loader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是Boot Loader的正常工作模式。

(2)下载(Down loading)模式:在这种模式下目标机上的Boot Loader将通过串口连接或网络连接等通信手段从主机下载文件。从主机下载的文件通常首先被Boot Loader保存到目标机的RAM中然后再被Boot Loader写到目标机上的固态存储设备中。

⒍ Boot Loader 与主机之间进行 文件传输所用的通信设备及协议

分为两种情况。一种是目标机使用串口与主机相连。这时的传输协议通常是xmodem/ymodem/zmodem中的一种。第二种可以用网络连接的方式传输文件,这时使用的协议多为tftp。

2.配置SDK和编译环境,进行Bootloader的编译和烧录。

使用brew install scons ,安装scons编译工具。

下载SEGGER J-Link software,用于烧录调试。

使用git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32h750-realthread-artpi克隆ART-Pi SDK到本地目录。

下载解压Arm GUN 工具链。

(可选)克隆RT-Thread Env到本地目录,主要用于开发阶段pkgs管理等操作。

设置环境变量,建议添加到.zshrc 或.bashrc

使用特权

评论回复
沙发
LEDyyds| | 2024-5-14 13:34 | 只看该作者
BootLoader算是一个很容易被忽略但是总能虐你的东西

使用特权

评论回复
板凳
gejigeji521| | 2024-5-18 18:00 | 只看该作者
这是一种电路吗,这不是一个固件吗

使用特权

评论回复
评论
forgot 2024-5-20 15:44 回复TA
确实跟电路没什么关系 
地板
gejigeji521| | 2024-5-18 18:00 | 只看该作者
这应该是一个引导程序吧。

使用特权

评论回复
5
xuanhuanzi| | 2024-5-19 16:51 | 只看该作者
BL的实现原理是什么

使用特权

评论回复
评论
forgot 2024-5-20 15:44 回复TA
引导程序 
6
forgot| | 2024-5-20 15:44 | 只看该作者
BootLoader是在操作系统内核运行之前运行的一段小程序,跟电路其实没什么关系吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

430

主题

2092

帖子

1

粉丝