只是目前想到的,问了问老师,理论上讲应该可以,但还没有动手试,因为现在还在看从网上下下来的一些资料,过两天就下手。
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 .<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
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
用户1256840 2006-11-1 21:23
用户1256840 2006-11-1 16:34
用户1053025 2006-11-1 09:31
我已经把您的问题push出去了,不知道会有什么反馈。。。
用户1256840 2006-10-31 15:57
用户1053025 2006-10-31 15:44
用户1256840 2006-10-26 15:43
谢谢了,其实我写的也不一定对,就是放在这里想和大家交流一下。ADS我现找了本介绍使用的书,刚开始看。估计这个其实很简单吧。我觉得也不能把这个问题看得太重,也许用个很简单的办法就搞定了。
这里人气真的很旺,从学校访问速度也很快。
用户1053025 2006-10-26 10:12
我想法子帮你推广一下,看看有没有高手帮忙