今天拿到牛人提供的仿真器了:山寨Multi-ICE,据说当年价值好几大千的神器!

神器不愧是神器:装好驱动立即就可以用,一番跟踪就发现程序在0x1424处陷入死循环了。

这就引出了一个问题:

eboot的0x1424处到底是哪里?

于是再次拉出IDA PRO,又是一番折腾:。。。。

 

 

有eboot.pdb但是ida没法使用,真是遗憾。

map文件的使用

mapsym.exe

 

然后IDC-》-》loadsym.idc

sym加载进来了但是还是不太正常,

 

一番查看,得到了一个大概的调用路径

Reset_Handler

       SUB_10D4

           13F4

              1424

  

IDA->EDIT->Rebase Program,根据xxx重新定位程序,这样操作的目的是为了让IDA中的地址和AXD中的一致。

 

找到对应位置,问题代码块:

INITCLKS

    ;;;;;;;;;;;;;;;;
    ; Preload r4 for the workaround located just below the next section

    ldr r4, =B0_STEPPING  ;Preload R4 for Comparison located after the next IF section
        ; ... and write the core clock config register
        ;
        ldr     r1,  =CCCR_BASE_PHYSICAL
        str     r2,  [r1]

    ;...IF :LNOT: :DEF: B0_Cotulla

;    cmp r9, r4              ; R4 should've been preloaded just before the above IF section with B0 VAL
;    beq OSCC_OON_DONE           ; If we're not running on B0 silicon, skip this work around
;by silentmj
    b OSCC_OON_DONE

    ; ~~~B0 errata: 32K OSC not functional~~~

        ; enable the 32Khz oscillator for RTC and PowerManager
        ;
        ldr     r1,  =OSCC_BASE_PHYSICAL       
        mov     r2,  #OSCC_OON 
        str     r2,  [r1]

        ;  **
        ;  **NOTE:  Spin here until OSCC.OOK get set,
        ;         meaning the 32KHz PLL has settled.
        ;  **
60       
        ldr     r2, [r1]
        ands    r2, r2, #1
        beq     %B60
        ;... ENDIF   ; B0_COTULLA
OSCC_OON_DONE       

 

回家后我反复阅读相关的源码和手头上的资料,发现BSP不少地方都对不同STEPING的PXA255进行了区别处理。 原来硬件也和软件一样会存在BUG,呵呵。

上网查了查供应信息,市面上的PXA255片子似乎基本都是A0 STEPING的。看来暂时不用考虑不同STEPING之间的差异了。

 

对比了目标板的LINUX bootloader源码之后,决定直接跳过这段代码。

重新编译EBOOT,开JFLASH准备烧写。

 

这才发现山寨Multi-ICE居然不能用jflash(和牛人确认之后得知确实不能)。于是我就只好仿真程序用山寨Multi-ICE,烧程序用简易JTAG这么来回折腾了,囧啊。

 

)GPIO初始化代码修改

XSC1BD.INC

解决了死循环的问题,顺带又对照着LINUX版的BOOTLOADER源码修改了GPIO的初始化部分。

 

)串口初始化功能代码的修改

XSBase255的调试信息输出到BTUART,而我们目标板

使用的FFUART,因此需要做相应修改。

 

忙活整整一天,快下班的时候,总算看到了EBOOT的串口输出信息。赶紧测试能否用PB下载NK.BIN,居然可以,哈哈,真把我高兴坏了!

 

最终卡在InitClock处了,明天根据原理图修改之。

 

还存在的问题:

做出修改之后需要重新编译整个系统,如何加速。

 

 

posted on 2010-03-26 10:22  silentmj  阅读(476)  评论(0编辑  收藏  举报