arm-linux-gcc 发表于 2013-10-08 21:51

只是b        start_code这条指令不见了吗?其他的都完好?

zbhsys 发表于 2013-10-08 21:56

回复 11# arm-linux-gcc
都在,就是前面空了4个字节,刚才试了下跟uboot.lds中的 ALIGN(4)无关,我把它注释掉了

   

zbhsys 发表于 2013-10-08 21:58

回复 12# zbhsys
我上面错了,是16个字节


   

zbhsys 发表于 2013-10-08 22:02

本帖最后由 zbhsys 于 2013-10-08 22:03 编辑

回复 11# arm-linux-gcc
我错了,是16个字节      00 00 00 00
            00 00 00 00
            00 00 00 00
            00 00 00 00
            12 00 EA 14 //11111120:       ea000012      b       11111170 <reset>
            ........
            ....

heizi_liu 发表于 2013-10-08 22:19

就算了, 搞计算机的都没几个能搞明白,况且你根本就不是搞这个的,这次就不教你了。睡觉

zbhsys 发表于 2013-10-08 22:34

回复 15# heizi_liu
呵呵,还是谢谢了,不纠结这个了,我还是继续读代码了

   

钟尚明 发表于 2013-10-14 22:39

表示不明白你问的啥

zbhsys 发表于 2013-10-15 18:53

回复 17# 钟尚明
确实没说明白,不知道怎么描述好。我改了TEXT_BASE的之后,0x0000_0000F地址处的的值为零,正确的应该是跳转指令。

   

jplzl10000 发表于 2013-10-17 14:31

本帖最后由 jplzl10000 于 2013-10-17 14:37 编辑

什么叫第一条无指令呢?
第一条肯定是会跳到reset处的,在start.S文件中。
这个TEXT_BASE实际上是代码搬移地址。

通常U-BOOT是烧录在FLASH中的,以便上电就能直接运行。
但为了提高运行速度,会考虑将U-BOOT的代码搬移到RAM中运行。
因此,就需要一个在RAM中的首地址,即这个TEXT_BASE。
同时,也可以通过判断当前PC值是否与TEXT_BASE值相同来判断当前的程序代码是运行在FLASH中还是RAM中。
通常判断的语句是这样的,在start.S中:
relocate:                                /* relocate U-Boot to RAM          */
        adr        r0, _start                /* r0 <- current position of code   */
        ldr        r1, _TEXT_BASE                /* test if we run from flash or RAM */
        cmp   r0, r1                  /* don't reloc during debug         */
        beq   stack_setup


因此,即使修改了这个TEXT_BASE,也是不会影响代码搬移开始之前的程序代码的。

zbhsys 发表于 2013-10-17 20:26

0000000 0000 0000 0000 0000 0000 0000 0000 1200
      0000010 0000 14ea 9ff0 14e5 9ff0 14e5 9ff0 14e5
      0000020 9ff0 14e5 9ff0 14e5 9ff0 14e5 9ff0 60e5
      0000030 1112 c011 1112 2011 1113 8011 1113 e011
      0000040 1113 4011 1114 a011 1114 ef11 adbe 11de
      0000050 1111 2011 1111 7c11 1285 9811 12cc 0011
TEXT_BASE = 0x11111111
这个是U-BOOT.BIN 文件开头的内容,地址0处为零,根本就不能执行啊
页: 1 [2] 3
查看完整版本: uboot.bin 的第一条指令的问题,求大神解答 谢谢