我在基于DSP 28075做程序加密时,遇到几个问题:
1、当 没有给程序加密时,BootLoader程序可以正常启动。
2、程序是基于BootLoader和应用程序两个部分,在加密完成后,程序BootLoader运行不起来,程序无法跳转到0x80000起始地址,一烧写程序总是进入非法中断。什么原因呢?
3、当在程序中连着仿真器,人为将PC指针指向0x80000地址时,程序可以正常运行;
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.
我在基于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修改后,我的设备断电重启后,便能正常启动。