韦东山Linux嵌入式课程社区
直播中

李妍

7年用户 216经验值
私信 关注

请问uboot加载SMRDATA文字池烧写地址错误该怎么办?

注意:如果点击空白处无法输入,则点击字会有输入提示符 | 则可以使用键盘进行输入!
此板块为 [uboot开发]

  • 问题所在章节:
  • 发生问题的运行环境:
  • 问题发生描述:
  • lowlevel_init:
  •         /* memory control configuration */
  •         /* make r0 relative the current location so that it */
  •         /* reads SMRDATA out of FLASH rather than memory ! */
  •         ldr     r0, =SMRDATA
  •         ldr        r1, _TEXT_BASE
  •         sub        r0, r0, r1
  •         ldr        r1, =BWSCON        /* Bus Width Status Controller */
  •         add     r2, r0, #13*4
  • 0:
  •         ldr     r3, [r0], #4 //将r0的内容存到r3的内容中,同时r0地址+=4;
  •         str     r3, [r1], #4
  •         cmp     r2, r0
  •         bne     0b
  •         /* everything is fine now */
  •         mov        pc, lr
  •         .ltorg
  • /* the literal pools origin */
  • SMRDATA:
  • .......

ldr     r0, =SMRDATA是将SMRDATA的绝对地址付给R0,也就是他链接的时候确定下来的地址,ldr        r1, _TEXT_BASE,是把链接地址的值付给r1,然后他们两个相减,得到一个偏移的值。如果说是吧uboot从内存的0地址烧写,那么执行是没有问题的,但如果不是烧写在0地址那岂不是要出错了,这根老师上课说的位置无关,uboot烧写在那个位置都能正常跑岂不是有冲突。这个到底是uboot的缺陷还是说我在自己理解的有偏差,请老师解答一下。


  • 输出的错误信息:

回帖(1)

王赛

2019-9-24 11:21:05
2440平台uboot必须烧到nand的0地址,这是硬件决定的~
位置无关是说的代码角度,那些指令在哪都可以正常执行,前提是PC得从你放的地方开始执行啊
举报

更多回帖

发帖
×
20
完善资料,
赚取积分