CPU上电执行的第一条指令

hinzer
博客专家认证
2018-10-23 11:02:46
今天看到讲系统移植书上说,芯片上电第一条指令应该处于Bootloader的入口。 这就有点不明白了,不是每个芯片都有厂商固化好的一段固件程序嘛,这样的话应该是上电先固件代码 Bootloader代码 再加载其他用户程序或者内核才对。 这些基础概念有些迷糊了,还望大家给指点一二,不胜感激!
...全文
770 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hinzer 2018-10-24
  • 打赏
  • 举报
回复
明白了,固件该是厂家固化的代码,对自家的硬件进行配置,可以BootLoader 替代这段代码。谢谢 谢谢!
of123 2018-10-24
  • 打赏
  • 举报
回复
每一种芯片是不一样的。共同点就是,从芯片的起始地址开始运行。至于起始地址被分配在何种非易失性存储器上,就不同了。可以是 ROM、EEPROM、FLash……。现在的芯片,多数是 Flash 了。

宽泛地说,存储在 Flash 中的可执行代码都可以叫固件,包括 Bootloader(引导代码)和 COS(应用代码)。

以往一些芯片中的引导程序(Bootloader)是固化在 ROM 中的,是在芯片制造时通过掩膜一次性生成的,不可更改。早期的社保卡就要求必须是这种 Bootloader。

现在 Flash 中的 Bootloader 也分成可覆盖的和不可覆盖的。需要反复下载更新 COS 的,一般选择不可覆盖方式。可覆盖的,国外用户用的较多,他们的 COS 一般包括初始引导操作。这种情况下,芯片起始地址(多数芯片的地址 0 和 ARM 芯片的地址 4)只是一条跳转指令,真正的 Bootloader 代码在芯片的高地址。因此,COS 下载过程覆盖并抢占了引导区。当然,如果愿意,COS 将引导区恢复为原来的跳转指令,还可以恢复 Bootloader 功能。
ckc 2018-10-24
  • 打赏
  • 举报
回复
厂商固化的这段代码就是上电引导程序,你可以用自己的代码替换掉这个代码
worldy 2018-10-23
  • 打赏
  • 举报
回复
固化程序也有一个入口点。CPU程序运行到哪里一般都是依赖于PC寄存器及相关段寄存器的当前值确定,CPU复位后,硬件会确定一个PC寄存器值及相关段寄存器一个固定值(不同的CPU不同),这个值就是入口点。固化程序的入口必须位于PC寄存器及相关段寄存器的复位值位置上,该位置一般是一个跳转指指令,将运行引导到真正的程序入口位置。
hinzer 2018-10-23
  • 打赏
  • 举报
回复
谢谢答复!照你这个说法,CPU上电后执行的第一个程序应该是固件代码,,为什么有些地方有 CPU上电首先执行引导程序的说法呢?
这方面的概念一直比较迷糊,能从先后执行顺序和作用的方面讲讲这两者的区分吗?

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧