TI中文支持网
TI专业的中文技术问题搜集分享网站

程序加密问题

产品中有两部分程序,bootloader放在FLASHA,应用程序放在FLASHD,先烧写bootloader,然后在用bootloader烧写应用程序,现在在应用程序中加密,应用程序就跑不起来了,不知道是为什么,不加密是可以运行的

Eric Ma:

检查是否有程序放在没加密区,如RAMM0,M1,却又需要访问受保护的RAM和FLASH。

Eric

产品中有两部分程序,bootloader放在FLASHA,应用程序放在FLASHD,先烧写bootloader,然后在用bootloader烧写应用程序,现在在应用程序中加密,应用程序就跑不起来了,不知道是为什么,不加密是可以运行的

xiansheng qian:

bootloader放在FLASHA?

请问你是把在线升级程序放在FlashA中? 是生成一个out文件,之后烧写到flashA中吗? 请问如何实现将bootloader单独生成一个out文件的?

产品中有两部分程序,bootloader放在FLASHA,应用程序放在FLASHD,先烧写bootloader,然后在用bootloader烧写应用程序,现在在应用程序中加密,应用程序就跑不起来了,不知道是为什么,不加密是可以运行的

Eric Ma:

回复 xiansheng qian:

自己写的bootloader可以单独成一个工程,然后放在FlashA段中。并烧写进芯片。

用户的程序就不要用FlashA段,在烧写的时候也不要去擦除和编程FlashA段。

Eric

产品中有两部分程序,bootloader放在FLASHA,应用程序放在FLASHD,先烧写bootloader,然后在用bootloader烧写应用程序,现在在应用程序中加密,应用程序就跑不起来了,不知道是为什么,不加密是可以运行的

xiansheng qian:

回复 Eric Ma:

谢谢,那还想请问一下程序的执行顺序,因为两个main函数了。 

产品中有两部分程序,bootloader放在FLASHA,应用程序放在FLASHD,先烧写bootloader,然后在用bootloader烧写应用程序,现在在应用程序中加密,应用程序就跑不起来了,不知道是为什么,不加密是可以运行的

xiansheng qian:

回复 Eric Ma:

我想的和您的思路一样,只是有一点还不确定,bootloader单独做成一个工程烧写入flashA中,里面也会有一个main函数,但是用户所做的程序中也会有main函数。这样的话如何让编译器识别这两个main函数?

我有个不太成熟的思路:是把自己写的在线升级程序bootloader(比如说函数名叫 ABC(void) ),放到codestart 中,在之前加一个是否需要升级程序的判断条件,如果需要更新程序则执行bootloader, 如果不需要则执行_c_int00函数。 但是ABC(void)必须写成main()才能在工程中编译过去。这是我搞不懂的地方,请您指点,万分感谢!!!

产品中有两部分程序,bootloader放在FLASHA,应用程序放在FLASHD,先烧写bootloader,然后在用bootloader烧写应用程序,现在在应用程序中加密,应用程序就跑不起来了,不知道是为什么,不加密是可以运行的

Eric Ma:

回复 xiansheng qian:

xiansheng

把bootloader和用户程序分开成两个工程。bootloader占用FlashA,用户程序占用其他Flash扇区。这样子,bootloader也有自己的_c_int00,即入口地址。当然用户程序也有。可以先烧写Bootloader工程的.out,然后再烧写用户程序的.out。

在设计程序时,如用户程序的主循环可以接收串口命令,当接收到升级命令后,则跳转到bootloader的_c_int00地址即可。

Eric

产品中有两部分程序,bootloader放在FLASHA,应用程序放在FLASHD,先烧写bootloader,然后在用bootloader烧写应用程序,现在在应用程序中加密,应用程序就跑不起来了,不知道是为什么,不加密是可以运行的

xiansheng qian:

回复 Eric Ma:

Eric 您好!

程序在执行的时候应该是先执行Bootloader工程,判断是否需要在线升级,如果不需要就跳转到用户应用程序。但是我不太清楚如何从bootloader的main函数跳转到用户应用程序的main函数中? 

产品中有两部分程序,bootloader放在FLASHA,应用程序放在FLASHD,先烧写bootloader,然后在用bootloader烧写应用程序,现在在应用程序中加密,应用程序就跑不起来了,不知道是为什么,不加密是可以运行的

Eric Ma:

回复 xiansheng qian:

正常来讲,上电后可以直接跑到用户程序中,在线升级只有在用户的main程序中去判断,如果收到串口升级指令,才会跳到bootloader的入口地址,bootloaderd的_c_int00。

但为了防止在线升级失败了,你需要重新升级,可以用户程序已经被擦除了,没用户代码可以跳转到bootloader了,所以这种情况下无法升级成功。解决方法是:上电的时候先跑到bootloader的codestart代码中,去判断升级成功与否的标志位,如果升级成功或是不需升级,则跳转到用户程序的codestart。

Eric

赞(0)
未经允许不得转载:TI中文支持网 » 程序加密问题
分享到: 更多 (0)