ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:28.56KB ,
资源ID:17175890      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17175890.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OA自动化bootloader代码分析报告Word格式文档下载.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

OA自动化bootloader代码分析报告Word格式文档下载.docx

1、*17 ;鯡 tasm.exe 默18 GBLL THUMBCODE19 CONFIG = 16 20 THUMBCODE SETL TRUE21 CODE3222 | 23 THUMBCODE SETL FALSE24 25 26 THUMBCODE27 CODE32 ;for start-up code for Thumb mode28 29 30 ;*31 AREA SelfBoot, CODE, READONLY32 33 IMPORT UDF_INS_VECTOR34 IMPORT SWI_SVC_VECTOR35 IMPORT INS_ABT_VECTOR36 IMPORT DAT

2、_ABT_VECTOR37 IMPORT IRQ_SVC_VECTOR38 IMPORT FIQ_SVC_VECTOR 39 40 ENTRY 41 IF :DEF: |ads$version|42 ELSE43 EXPORT _main44 _main45 ENDIF 46 ResetEntry47 b SYS_RST_HANDLER48 b UDF_INS_HANDLER49 b SWI_SVC_HANDLER50 b INS_ABT_HANDLER51 b DAT_ABT_HANDLER52 b .53 b IRQ_SVC_HANDLER54 b FIQ_SVC_HANDLER55 56

3、 ;57 MACRO 58 $Label HANDLER $Vector59 $Label60 sub lr, lr, #4 61 stmfd sp!, r0-r3, lr 62 ldr r0, =$Vector63 ldr pc, r064 ldmfd sp!, r0-r3, pc 65 MEND66 67 UDF_INS_HANDLER68 stmfd sp!, r0-r3, lr69 ldr r0, =UDF_INS_VECTOR70 mov lr, pc71 ldr pc, r072 ldmfd sp!, r0-r3, pc73 SWI_SVC_HANDLER74 stmfd sp!7

4、5 ldr r0, =SWI_SVC_VECTOR76 mov lr, pc77 ldr pc, r078 ldmfd sp!79 INS_ABT_HANDLER80 sub lr, lr, #481 stmfd sp!82 ldr r0, =INS_ABT_VECTOR83 mov lr, pc84 ldr pc, r085 ldmfd sp!86 DAT_ABT_HANDLER87 sub lr, lr, #488 stmfd sp!89 ldr r0, =DAT_ABT_VECTOR90 mov lr, pc91 ldr pc, r092 ldmfd sp!93 IRQ_SVC_HAND

5、LER94 sub lr, lr, #495 stmfd sp!, r0-r12, lr 96 mrs r0, spsr97 stmfd sp!, r098 ldr r0, =IRQ_SVC_VECTOR99 ldr pc, r0 100 FIQ_SVC_HANDLER101 sub lr, lr, #4102 stmfd sp!103 mrs r0, spsr104 stmfd sp!105 ldr r0, =IRQ_SVC_VECTOR106 ldr pc, r0107 108 ;*109 SYS_RST_HANDLER110 mrs r0, cpsr ;enter svc mode an

6、d disable irq,fiq111 bic r0, r0, #ModeMask112 orr r0, r0, #(SVC32Mode :OR: IRQ_BIT : FIQ_BIT)113 msr cpsr_c, r0114 115 IMPORT InitSystem116 bl InitSystem 117 118 adr r0, ResetEntry119 mov r3, #(RamBaseAddr16)120 ldr r1, BaseOfROM 121 ldr r2, TopOfROM 122 add r1, r1, r3123 add r2, r2, r3124 0 125 ldm

7、ia r0!, r4-r11126 stmia r1!127 cmp r1, r2128 bcc %B0129 130 sub r1, r1, r2131 sub r0, r0, r1 132 ldr r1, BaseOfBSS133 ldr r2, BaseOfZero134 add r1, r1, r3 135 add r2, r2, r3 136 1 137 cmp r1, r2 138 ldrcc r4, r0, #4139 strcc r4, r1, #4 140 bcc %B1141 142 mov r0, #0143 ldr r2, EndOfBSS144 add r2, r2,

8、 r3145 3 146 cmp r1, r2147 strcc r0, r1, #4148 bcc %B3 149 150 IMPORT RemapMemory 151 152 adr r0, ResetEntry153 ldr r1, =RemapMemory 154 ldr r2, BaseOfROM155 sub r2, r1, r2156 add r0, r0, r2157 add r1, r2, r3158 mov r2, #32159 0 160 ldr r3, r0, #4161 str r3, r1, #4162 subs r2, r2, #1163 bne %B0164 1

9、65 ldr lr, GotoMain 166 b RemapMemory 167 168 GotoMain DCD $MainEntry169 170 ;*171 IMPORT |Image$RO$Base| ; ROM code start 172 IMPORT |Image$RO$Limit| ; RAM data starts after ROM program173 IMPORT |Image$RW$Base| ; Pre-initialised variables174 IMPORT |Image$ZI$Base| ; uninitialised variables175 IMPO

10、RT |Image$ZI$Limit| ; End of variable RAM space176 177 BaseOfROM DCD |Image$RO$Base|178 TopOfROM DCD |Image$RO$Limit|179 BaseOfBSS DCD |Image$RW$Base|180 BaseOfZero DCD |Image$ZI$Base|181 EndOfBSS DCD |Image$ZI$Limit|182 183 ;184 TIP_SIZE EQU 256185 186 IMPORT ResetMemSet187 EXPORT trans_to_boot188

11、trans_to_boot189 mov lr, r1 ; a2 = r1 190 ldr r1, =ResetMemSet191 ldr r2, BaseOfROM192 sub r2, r1, r2193 add r0, r0, r2 ; a1 = r0194 mov r2, #TIP_SIZE195 0 196 ldr r3, r1, #4197 str r3, r0, #4198 subs r2, r2, #1199 bne %B0200 201 sub r0, r0, #TIP_SIZE*4202 mov pc, r0 203 204 ;205 206 END 1.1.1. 宏定义行

12、1定义了CPSR中表示模式位的5位。行2-7定义了6种处理器模式(除system模式)对应的CPSR位。行8-7定义了CPSR中FIQ与IRQ置位。行10、12为注释,行11定义了一个宏,&的意义等于DCD伪指令,其分配一个字的内存,并用100初始化该字的内存,并使用RomBaseAddr标志这段内存的实际地址。1.1.2. 宏定义行13-15声明了一个字符串变量MainEntry,并将其设置为”main”,并引入外部符号”main”。1.1.3. 判断是否是thumb指令行18声明了逻辑变量THUMBCODE行19-24执行了一个IF ELSE ENDIF指令,CONFIG变量是1中第88页

13、说明的汇编器域定义变量,如果其为32则说明本文件采用ARM汇编器,相应地把THUMBCODE设置为FALSE,若为16则是使用thumb汇编器,相应地把THUMBCODE设置为TRUE。行26-28,强制执行32位的ARM指令,感觉很奇怪,应该是用CODE16命令才对。1.1.4. 定义新程序、引入新符号行31定义了一个新的程序段SelfBoot。行33-38引入了一系列的符号,这些符号在sysinit.s中定义并导出。1.1.5. 定义新程序、引入新符号行40首先声明了程序的入口根据1中第89页的说明,行41-45判断程序是给ADS还是SDT执行的,如果是如果是SDT,则导出_main符号,

14、并开始定义_main函数的开始。1.1.6. 定义系统异常向量表行46-54定义了系统异常处理向量表,并在vector.o首次执行时首先执行行47的代码。1.1.7. 程序跳转宏定义行57-65定义了一个有1个参数的宏HANDLER,该宏实现程序跳转,跳转到$Vector所指向内存所保存的内存地址的值,执行完该函数后,恢复现场,并返回原来的状态。1.1.8. 异常处理程序定义行67-166定义了7种模式异常的处理函数具体地:UDF_INS_HANDLER 执行UDF_INS_VECTOR内存所保存的指令后,返回到异常发生之前的状态。类似,SWI_SVC_HANDLER, INS_ABT_HAN

15、DLER, DAT_ABT_HANDLER, IRQ_SVC_HANDLER, FIQ_SVC_HANDLER也执行类似的操作,执行XX_XX_VECTOR内存所保存的指令,然后返回到异常发生之前的状态。SYS_RST_HANDLER异常处理程序与其它异常处理程序有很大不同,行110-113使得处理器进入SVC模式,并且禁止FIQ与IRQ。行115-116使得程序跳转到sysinit.s中定义的InitSystem函数中执行,并在执行结束后返回。InitSystem函数的作用是进行内存、堆栈、LED端口、串口、定时器以及中断的初始化工作,具体讲解请参见sysinit.s中的分析(1.2.12)

16、。行118将异常向量表ResetEntry的地址保存入r0。行119-128将bootloader的RO段拷贝入内存。行130-140将bootloader的RW段拷贝入内存。行142-148将内存中的ZI段初始化为0。行150-163将RemapMemory函数拷贝入内存中。行165将返回地址进行设置。行166执行RemapMemory函数(在sysinit.s中定义),RemapMemory函数主要是设置ROMCON0、ROMCON1和DRAMCON0、DRAMCON1;并将IRQ_SERVICE函数的地址存入一个内存中的数组中。RemapMemory函数执行完后将跳入bios.c中定义的main函数。1.1.9. 声明C主函数程序入口行168声明了GotoMain标号,其被定义为变量$MainEntry的值“main”1.1.10. 定义vector.s中需要用到的连接器变量根据文献2第56-57页中的说明,行170-181引入了由连接器预定义的变量值。173 IMPORT

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1