- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
作者的话
这部分的内容,ADI没有给相关的资料,OP也没具体做过,不过OP有一个客户做完了,
写了一个小总结,我认为比较有价值,收集起来一下给大家,希望对你的开发有帮助。
正文
之前因项目需要做了一下2148x的bootloader,于是在参考几份资料后对
bootloader有所了解。这些资料包括:ADSP-214xx_hwr_rev1.1、EE345、
50_ldr_mn_rev_2.5和cces_1-0-2_loader_man_rev.1-2,其中50_ldr_mn_rev_2.5和
时纠正更改,此外,由于笔者只做过spiflash的启动,所以文档中也只会对spiflash
的启动作详细描述。
首先说说程序是如何boot起来的,主要有两部分:首先启动后,根据选定为spi
flash模式,先发送读指令从flash的0x000000地址中将一个256instructionwords
(48-bit)的小程序load进,这个小程序就是bootkernel。这个小程序在中
跑起来,然后根据一些必要信息,将真正应用程序load入,但不包括IVT
(interruptvectortable)。注意,bootkernel本身就是在sharc所对应的IVT的
位置中跑起来的,也即0x0008c000~0x0008c0ff这段地址中。load完application后,
bootkernel会用SPI的DMA将自身改写为application对应的IVT(听起来似乎很神
奇),至此,bootkernel的工作完成,加载过程结束,开始跑application。
接下来,是时候说一下在上面反复提及的bootkernel。这是一个用asm写的小程
序,由给出,用户基本上不需要进行过多修改,只是在做secondbootloader的时
候需要进行一定修改,但例程都在EE345对应的参考程序中可查看。bootkernel里面
的label主要分为3类:首先,第一部份也是最为重要,或者说用户可修改用到的是
“user_init:”这是bootkernel为用户自定义代码所预留的,我们所做的不默认地
从spiflash的0x00000地址而从其余的诸如0x010000、0x020000等地址将程序读进
来的bootloader功能就是在这里面完成的,所以,一般用户只需要修改删减该label
下对应的汇编代码,其余地方的代码不建议进行修改。更具体地说,在user_init中主
要是配置一个SPIDMA发送spiflah的读指令,并且在读指令中还指定了app在flash
中特定的存放地址。注意,此处并不关心读进来的数据是什么,甚至并不保存,只是为
了发送读指令以及flash的偏移地址,为接下来的load入flash中偏移后APP并进行
保存做准备。还需注意的是,因为bootkernel最大只能支持256instructionwords,
所以修改user_init仍需保证bootkernel的大小不超过256instructionwords。
如果用户用的不是笔者给出的参考程序,而是自己新建工程的话,对于asm编译器的编
译选项必须选择为“GenerateNormalWordcode”,选择为GenerateShortWordcode
会产生不可思议的错误,具体用户可自行尝试。
接下来的两类label不建议,或者说新手用户进行修改或者删减,所以对于这
两类label笔者只说明其功能。接上述第一类label,第二类label中主要包括了诸如:
ZERO_LDATA、ZERO_L48、INIT_L16、INIT_L32、INIT_L48、INIT_L64、ZERO_EXT8、
ZERO_EXT16、INIT_EXT8、INIT_EXT16等。这些label的存在主要是为了真正地实现load
用户的app,并放到用户app指定的相对应的地方。这是由于app的每个section都包
括了header,header中包括了:datatag(也即对应了上面所说的label)、dataaddress、
datacount,bootkernel根据sectionheader的信息循环运行以上的label,完成app
程序的加载。具体用户可详见bootkernel源码,这里不做累述。
运行完第二类label,bootkernel也行将就木来到最后的label也即第三类label:
f
您可能关注的文档
- 文稿介绍星期一maanapolish paper 1 text booklet.pdf
- unit 13课时section 1f课件大单元教学七级英语下册同步备课系列人教版.pdf
- 比例意义基本性质知识归纳典例精析拔高训练.pdf
- 2025年全国口腔主治医师资格考试口腔医学基础知识押题密卷.docx
- 2025年审计学实战案例题库及解析大全.doc
- 2025年初三化学精华知识点复习笔记大全.docx
- 2025年事业单位考试论述题高分攻略与真题演练集锦.doc
- 2025年高中政治必修二核心知识点梳理与精要总结.doc
- 2025年企业信息系统管理规范与制度攻略.doc
- 2025年医疗卫生法规与法律知识考试真题及权威答案解析.doc
文档评论(0)