This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28075 的DSP加密

我在基于DSP 28075做程序加密时,遇到几个问题:

1、当 没有给程序加密时,BootLoader程序可以正常启动。

2、程序是基于BootLoader和应用程序两个部分,在加密完成后,程序BootLoader运行不起来,程序无法跳转到0x80000起始地址,一烧写程序总是进入非法中断。什么原因呢?

3、当在程序中连着仿真器,人为将PC指针指向0x80000地址时,程序可以正常运行;

  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好,

    在加密完成后

    您的意思是解密?

    我有几个澄清问题:

    如何实现应用解密?
    Bootloader 如何跳转到起始地址?
    这是否也在执行器件复位(解密后)并引导至闪存地址0x80000后发生?

  • 不是解密,就是程序加密。程序加密完成后,重启设备,发现程序运行不起来。查找原因是因为BootLoader没有运行成功,进入非法中断了。

    最后修改CMD文件的地址分配后,可以运行了。

    其中BootLoader的部分CMD:

    /* Allocate uninitalized data sections: */
    .stack : > RAMD1 PAGE = 1
    .ebss : > RAMLS5 PAGE = 1
    .esysmem : > RAMLS5 PAGE = 1

    /* Initalized sections go in Flash */
    .cinit : LOAD = FLASHA, PAGE = 0, ALIGN(4)
    RUN = RAMLS1, PAGE = 0
    LOAD_START(_cinit_loadstart),
    RUN_START(_cinit_runstart),
    SIZE(_cinit_size)

    .text : LOAD = FLASHA, PAGE = 0, ALIGN(4)
    RUN = RAMGS0, PAGE = 0
    LOAD_START(_text_loadstart),
    RUN_START(_text_runstart),
    SIZE(_text_size)

    BootLoader用上面的CMD运行,加密后的程序BootLoader运行不起来,我发现的原因是.cinit  和 .text 的RUN地址没有放在同一个内存中,两个都改为RAMGS0或者RAMLS5 就可以,并且.ebss必须放在RAMGSx里面,不然我的BootLoader程序初始化的那些数组变量值都是0,同时.stack不放在RAMD1 ,可以放在RAMGSx,请问为什么?

    将上述CMD修改后,我的设备断电重启后,便能正常启动。

  • 您好,

    客户是否能够在更改前后提供完整的链接器命令文件? 我不清楚两个版本之间发生了什么变化。