Chinaunix首页 | 论坛 | 博客
  • 博客访问: 530949
  • 博文数量: 118
  • 博客积分: 2575
  • 博客等级: 大尉
  • 技术积分: 1263
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-27 09:37
文章分类

全部博文(118)

文章存档

2017年(11)

2016年(8)

2015年(1)

2014年(9)

2013年(7)

2012年(38)

2011年(14)

2010年(18)

2009年(12)

分类: 系统运维

2012-02-09 16:06:41

同事最近定位问题,发现如果pc指针变成0xfffffffc时,系统就会复位。看了一下,发现0xfffffffc处是一个跳转指令,在PPC系统的启动过程中,C系统加电或者接收到复位信号之后,就会执行此处的指令。相应的BSP代码romStart.S中代码如下:
  1. .section .boot, "ax", @progbits
  2. FUNC_BEGIN(resetEntry)
  3. FUNC_LABEL(_resetEntry)

  4. 此处省略很多指令
  5. .section .reset, "ax", @progbits
  6. FUNC_BEGIN(resetVector)
  7. b resetEntry
  8. FUNC_END(resetVector)

通过.section.reset在0xfffffffc处生成
b resetEntry
的指令,达到加载的目的。当然了,调用0xfffffffc就会导致系统复位了。下面是link中的代码。
  1. .reset BIND(wrs_kernel_text_start + wrs_kernel_rom_size - 4) :
  2. {
  3. *(.reset)
  4. }

号外的是,直接调用0xfffffffc会由于一些寄存器没有初始化好,cache与tlb还有些其它寄存器如MSR没有正确初始化,会导致CPU挂死,这时,可以依赖watchdog产生复位信号,从而成功初始化CPU。


阅读(2802) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~