(原创)DSP Sharc 21489导出ldr文件解析

2019/09/06 DSP

导出查看LDR文件

通过CCES编辑工程属性,导出LDR文件,然后用16进制查看LDR文件分析如图:

Bootloader程序

首先说说程序是如何boot 起来的,主要有两部分:

  • 首先启动后,根据选定为spi flash模式, 先发送读指令从flash 的0x000000 地址中将一个256 instruction words(48-bit)的小程序load 进芯片,这个小程序就是boot kernel。这个小程序在芯片中跑起来,

  • 然后根据一些必要信息引导,将真正应用程序load 入芯片。

其中,256 instruction words(48-bit)刚好等于0x600字节,看上图前0x600字节即为bootlodaer程序了,默认情况下再CCES编译时会自动链接默认的bootloader程序,如果用户想改bootloader,可以自行在工程属性里面编辑更改。

Application程序

从0x600之后开始就是application程序了,这个程序也是有结构的,如下所示:

0x0000000e // tag
0x00000013 // count
0x00040100 // addr
<data0>
<data1>

其中tag的分类有如下几种:

 0x0 FINAL_INIT      
 0x1 ZERO_LDATA   
 0x2 ZERO_L48       
 0x3 INIT_L16         
 0x4 INIT_L32         
 0x5 INIT_L48         
 0x6 INIT_L64         
 0x7 ZERO_EXT8     
 0x8 ZERO_EXT16   
 0x9 INIT_EXT8       
 0xA INIT_EXT16     

另外上述的count并不是字节数,而是根据tag的类型的指令数,也就是说还要乘以tag类型的字节数才是总的字节数。

举个例子:

其中,tag为0x03(INIT_L16)为2个字节,count为0x33A,addr为0x124300。

然后打开相关的*..map.xml文件,确实找到改程序段:

现在我们再找下一个程序段,应该是0x60C+0x33A*2=0xC80,我们继续看LDR文件,如下:

确实在0xC80找到下一个段了,tag为0x03(INIT_L16 ),count为0x1117,addr为0x12463C,也确实能在*..map.xml文件找到这个段。

下一个程序段地址为:0xC80+0x1117*2 = 0x2EBA,因为4字节对齐,在0x2EBC上找到段信息:

这个段是0x01(ZERO_LDATA)段,代表用0初始化0x09个RAM数据,因此没有数据段,直接下一个程序段为03(INIT_L16),count为0x8FD,addr为0x12575C。

以此类推,可以查看全部的程序段。

CCES导出的LDR和SigmaStudio导出的BIN文件区别

使用CCES导出LDR文件,然后用sigmastudio导入并刷写,再从sigmastudio导出数据,发现两次数据不一样,数据流按位高低反了下:

两次文件对比图:

上图字节数一样,但数据完全不一样,举第一个字节分析:


知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

站内搜索

    撩我备注-博客

    joinee

    目录结构