两阶段bootloader, 什么时候在内存中运行?

Cline 2012-10-23 04:51:50
1.reset后从0x00000000运行.
2.....
3.Copy代码(自己/第二阶段)到内存中.
4.....
5.ldr pc, _start_armboot
6.运行于内存中?

难道就是因为_start_armboot的link 地址在_TEXT_BASE 之后?
...全文
322 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿晔sir 2012-10-30
  • 打赏
  • 举报
回复
ldr pc, _start_armboot
这是位置相关代码。前面的都是位置无关的,前面的是的SRAM里或者norflash里面(地址为0x0开始)运行,然后遇到位置相关代码就根据 链接脚本里的 链接地址 处接着运行代码(一般是sdram ,比如0x30000000)
zhengmeifu 2012-10-24
  • 打赏
  • 举报
回复
顶4楼的。各个CPU的启动过程都不一样。
Cline 2012-10-24
  • 打赏
  • 举报
回复
我的板子是TQ2240.
codeos 2012-10-24
  • 打赏
  • 举报
回复
我大概跟LZ有相同的问题,也在探索中,
我用的是三星的S3C2450,关于开机后 从IROM到step stone到外部SDRAM的跳转过程以及他们各自的内存编址感觉很困惑,发了帐帖子:http://topic.csdn.net/u/20121024/09/d223b0a2-62f6-4601-8702-d11698a481a7.html?85149
希望大侠赐教
chinayangbo2011 2012-10-23
  • 打赏
  • 举报
回复
像我用的LPC3250的开发板,当上电启动后会有一个映射,是把IROM映射到地址0x0000000还是把IRAM映射到地址0x0000000,默认都是IROM,然后会拷贝flash里面的程序到RAM中,之后跳转到RAM中去执行,这个是LPC3250的开发板启动过程和别的可能不太一样。

像S3c6410上电就把flash里面前4K的程序考到RAM中,然后跳转到RAM中,1.reset后从0x00000000运行的东西并不是RAM的地址。
wanghuanabc 2012-10-23
  • 打赏
  • 举报
回复
不知道你说的是哪一个片子,在S5pv210中无论是NAND还是SD卡启动,都依赖于CPU中的一段内部代码进行过度启动,这段代码存在于iROM中。iROM有64K被映射到boot区,而96K的iRAM就是用于过渡启动的内部缓存区,与iROM一起被映射到iROM的后面。iROM会将第一段的启动代码从外部存储介质拷贝到iRAM这个这个区域中。(第一阶段的Bootloader是从0xD0020010处开始执行的)
曹大夯 2012-10-23
  • 打赏
  • 举报
回复
_start_armboot指向哪了?是你自己的代码么?

感觉你理解没问题啊,将pc指向新的内存地址,CPU开始跑_start_armboot指向的代码段。
Cline 2012-10-23
  • 打赏
  • 举报
回复
正在学习。有些地方想不明白。

上电后跑Flash中代码(0x00000000), 最后为什么跳到主存中执行? 因为ldr pc, _start_armboot?
曹大夯 2012-10-23
  • 打赏
  • 举报
回复
不太理解你碰到的问题。
bootloader跑出错拉,需要修改?

还是你在学习某个开发板?

21,616

社区成员

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

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