标签:
无标签
只是目前想到的,问了问老师,理论上讲应该可以,但还没有动手试,因为现在还在看从网上下下来的一些资料,过两天就下手。
9315的headerID检查是这样的,在flash启动模式下由芯片内部的16KB的bootrom内固化代码完成,流程如下:
先检测Flash的0x0地址处是否有CRUS或SURC的ASCII码;
如果有,从Flash的0x4地址处读取代码执行;
如果没有,检测Flash的0x1000处是否有CRUS或SURC的ASCII码;
如果有,从Flash的0x0地址处读取代码执行;
这就我们要求在0x0或者0x1000处加入CRUSASCII码,(这么自恋的公司),就这两处加ASCII码分别来说一下我是怎么想的
1〉在0x0处加
汇编方式:根据我对编译器生成最终代码的理解,使用汇编手段在0x0这个特殊地址存ASCCII码比较困难
直接修改:因为bin文件是二进制文件,没有特定结构格式,全凭使用方自己来弄,所以在生成bin后使用winhex一类的软件直接在0x0处插入后,指令段就会后移32位,到0x4的地方去,理论上讲应该不会有问题。
2〉在0x1000处加
汇编方式:这个是群里一个高手告诉我的,代码如下
b .
ENDIF
ALIGN 0x1000
DCB "CRUS"
END
首先对齐到0x1000地址,然后写入CRUS,现在问题是这个代码放到汇编程序的什么地方,
如果放在开头,那么编译器器指针会不会直接跳到1000呢?接下来得代码再生成最终目标代码的时候会不会都在1000以后,而在0x0地址就什么都没有了呢?或者编译器会自动在0x0处添加一条跳转指令呢?都是比较困惑的问题。
如果先在开头加入一条跳转指令,目标地址大于0x1000,然后是这段代码,再然后是对其目标地址代码,接着是我们的引导代码,不知道这样行不行。
如果放到整个引导代码的最后,那么估计编译器会怎么操作呢?关键是从0x0到0x1000之间的这部分代码,得看编译器的效果了。
直接修改:首先在汇编的时候开头是一句跳转指令,目标地址是1000以后,然后再目标地址处接着写,这样从理论上讲目标代码在0x1到0x1000之间会全是0,然后我们再使用工具在bin文件的0x1000处编辑而不是插入CRUS,万事大吉。
我的分析完了,如果有对这个比较在行的朋友一定要帮忙哦,
qq: 9006204
msn:maxiaoyuzdz@hotmail.com
email:maxiaoyuzdz@gmail.com
系统分类:
ARM | 用户分类:
杂谈 | 来源:
无分类 | 【推荐给朋友】 | 【添加到收藏夹】