共2条
1/1 1 跳转至页
IAP 请教:如下思路是否可行?(IAP,固件升级,分散加载)
问
需求是这样的:编译生成axf Image文件中能够对指定的源文件的代码进行定位(或者是说对指定的函数,数据进行定位),烧录到flash中后就可以知道该文件(或者函数,数据)在flash中的地址。然后下一次如果有个别文件的代码发生了变动,我可以只编译连接个别文件,然后把生成的二进制文件以IAP的方式写到Flash指定的位置,从而实现个别的文件功能升级更新。
以上,如果在LPC2200, 系统UC OS II的,主要文件使用的语言为C环境下,是否理论上可以实现?
是否有什么特别需要注意的地方?
汇编中的com,bin文件的org定位,是否在C中有类似的功能呢?
还有整个axf文件的校验和问题是否也对此构成困扰?
以上为个人一点比较初始的想法,请大家不吝赐教。
想法的来源:以前做过的是主板bios中添加user rom,只要保证自己添加的代码段checksum和为0,就可以添加特定结构的代码到已经发布的BIOS bin文件中,并且了解到某些CPU的微代码,logo等等,都可以直接添加或者替换到bios bin文件中,从而实现代码的局部升级,而不用重新编译整个源文件。最近做嵌入系统的东西,想请教下类似的功能实现。
thx,thx.....
mail:tmd781224@etang.com
msn: tmd781224@hotmail.com
答 1: 自己顶一下吧,没人说话也。。。看到 ADS_LinkerGuide.pdf中介绍“Accessing symbols in another image on page”说 “This CAN be used, for example, if you have one image that always resides in ROM and multiple images that are loaded into RAM. The images loaded into RAM CAN access global functions and data from the image located in ROM.”
这一段的实现机制哪里有比较详细的文档啊?
按照文章中说的,那么如下做应该可以实现吧?
以LPC 2104为例:
片内Flash分区域存放俩个image文件,主Image文件Image1放在启动地址处,一些会涉及到的功能函数调用放在Image2文件中,在需要升级的时候,直接将新的Image2文件更新到Flash相应区域,而保证Image1不用做任何变动。
俩个独立的Image文件,Image1可以访问Image2中的全局变量和函数,How?
是否哪里有稍微详细或者带实现例子的文档啊?
答 2: 顶一下,想法不错。在GPRS终端产品中看到有人实现了此功能不过具体怎么实现的,我也不知道。请问怎么进行代码定位啊,代码的位置不是由编译器控制的吗? 答 3: 担心安全性,整个系统代码一起升级不好吗? 答 4: 续集搁下几天,今天又在LPC 2210上测试了一下,用的片外bank0-ram(存放主Image文件image1),bank1-flash(存放image2),根据相应的内存映射修改下分散加载文件。
Image1中会调用Image2中的一个函数BeepOn.
先编译image2,倒出其中的symbol definication文件为beep.o,用easyjtag把image2烧写到flash中(0x81000000);将beep.o添加到Image1的工程文件中参与Link.然后将image1加载到片外ram中,跟踪执行了一下。。
一切OK了。。
没用前觉得好多不可理解,玩起来回头看才觉得也很简单,希望对有类似做法的兄弟有点帮助。
以上,如果在LPC2200, 系统UC OS II的,主要文件使用的语言为C环境下,是否理论上可以实现?
是否有什么特别需要注意的地方?
汇编中的com,bin文件的org定位,是否在C中有类似的功能呢?
还有整个axf文件的校验和问题是否也对此构成困扰?
以上为个人一点比较初始的想法,请大家不吝赐教。
想法的来源:以前做过的是主板bios中添加user rom,只要保证自己添加的代码段checksum和为0,就可以添加特定结构的代码到已经发布的BIOS bin文件中,并且了解到某些CPU的微代码,logo等等,都可以直接添加或者替换到bios bin文件中,从而实现代码的局部升级,而不用重新编译整个源文件。最近做嵌入系统的东西,想请教下类似的功能实现。
thx,thx.....
mail:tmd781224@etang.com
msn: tmd781224@hotmail.com
答 1: 自己顶一下吧,没人说话也。。。看到 ADS_LinkerGuide.pdf中介绍“Accessing symbols in another image on page”说 “This CAN be used, for example, if you have one image that always resides in ROM and multiple images that are loaded into RAM. The images loaded into RAM CAN access global functions and data from the image located in ROM.”
这一段的实现机制哪里有比较详细的文档啊?
按照文章中说的,那么如下做应该可以实现吧?
以LPC 2104为例:
片内Flash分区域存放俩个image文件,主Image文件Image1放在启动地址处,一些会涉及到的功能函数调用放在Image2文件中,在需要升级的时候,直接将新的Image2文件更新到Flash相应区域,而保证Image1不用做任何变动。
俩个独立的Image文件,Image1可以访问Image2中的全局变量和函数,How?
是否哪里有稍微详细或者带实现例子的文档啊?
答 2: 顶一下,想法不错。在GPRS终端产品中看到有人实现了此功能不过具体怎么实现的,我也不知道。请问怎么进行代码定位啊,代码的位置不是由编译器控制的吗? 答 3: 担心安全性,整个系统代码一起升级不好吗? 答 4: 续集搁下几天,今天又在LPC 2210上测试了一下,用的片外bank0-ram(存放主Image文件image1),bank1-flash(存放image2),根据相应的内存映射修改下分散加载文件。
Image1中会调用Image2中的一个函数BeepOn.
先编译image2,倒出其中的symbol definication文件为beep.o,用easyjtag把image2烧写到flash中(0x81000000);将beep.o添加到Image1的工程文件中参与Link.然后将image1加载到片外ram中,跟踪执行了一下。。
一切OK了。。
没用前觉得好多不可理解,玩起来回头看才觉得也很简单,希望对有类似做法的兄弟有点帮助。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |