EDN首页   博客首页

日志档案

发表于 2006-10-25 11:09:26

0

标签: 无标签

9315引导的解决办法,不一定对哦

只是目前想到的,问了问老师,理论上讲应该可以,但还没有动手试,因为现在还在看从网上下下来的一些资料,过两天就下手。

9315的headerID检查是这样的,在flash启动模式下由芯片内部的16KB的bootrom内固化代码完成,流程如下:

先检测Flash0x0地址处是否有CRUSSURCASCII码;
如果有,从Flash0x4地址处读取代码执行;
如果没有,检测Flash0x1000处是否有CRUSSURCASCII码;
如果有,从Flash0x0地址处读取代码执行;

这就我们要求在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   |   用户分类: 杂谈   |   来源: 无分类   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(707)    回复(7)  

投一票您将和博主都有获奖机会!

最新评论

  • cocappjj

    2006-10-31 15:44:21

    哈,谢谢您的鼓励!

  • maxiaoyuzdz

    2006-10-31 15:57:23

    恩。不过可要帮帮我这个新手,早知道这么麻烦就不买这么贵的了,现在想起来就对卖板子的一肚子火。

  • cocappjj

    2006-11-1 9:31:35

    我已经把您的问题push出去了,不知道会有什么反馈。。。

  • maxiaoyuzdz

    2006-11-1 21:23:20

    我现在用的是在1000处加的,将代码放在开头处实现的,但如果地址对齐是0x0的话,将会抱错,估计编译器在对齐后会自动调整指针以保证程序的正常运行。

  • maxiaoyuzdz

    2006-11-1 16:34:45

    恩,谢谢了,昨天晚上已经快搞定了,现在用汇编的方式在1000处加上了CRUS,但是不知道这样加的对不对,感觉上应该是正确的。

  • maxiaoyuzdz

    2006-10-26 15:43:58

    谢谢了,其实我写的也不一定对,就是放在这里想和大家交流一下。ADS我现找了本介绍使用的书,刚开始看。估计这个其实很简单吧。我觉得也不能把这个问题看得太重,也许用个很简单的办法就搞定了。

    这里人气真的很旺,从学校访问速度也很快。

  • cocappjj

    2006-10-26 10:12:49

    我想法子帮你推广一下,看看有没有高手帮忙