欢迎来到天天文库
浏览记录
ID:49410808
大小:747.00 KB
页数:24页
时间:2020-02-06
《arm启动原理及代码分析.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ARM启动代码原理和分析内容大纲映像文件ZI未初始化数据段RW数据段LoadAddress加载地址ExecutionAddress执行地址StackPointer栈空间指针内容关键字:RO代码段Boot相关硬件FlashRom(可作为bootrom的存储器)Boot相关硬件Nandflash(不可作为bootrom的存储器)Boot相关硬件Boot的主要功能建立异常向量表初始化中断初始化硬件设备初始化应用程序执行环境跳转到主应用程序BResetHandlerBHandlerUndefBHanderSWIBHanderPabo
2、rtBHanderDabortB(保留)BHandlerIRqBHandlerFIQ0x000x040x080x0c0x100x140x180x1c异常中断向量表的建立初始化硬件软件的运行离不开硬件,boot必须对硬件进行初始化。硬件的初始化主要通过配置特殊控制寄存器来完成,包括下面几部分:关闭开门狗屏蔽所有的中断初始化PLL和时钟。初始化储存系统初始化应用程序的执行环境Elf文件的类型:可执行文件、可重定位文件、共享库object(又叫做共享库)文件。Elf文件的功能:1、用作链接器的输入生成可执行的映像文件2、可装载到内
3、存里运行,完成特定功能的文件。elf文件的物理结构Elf文件头Section:.text.data.bss.symtabProgramheader可重定位文件与可执行文件的区别:区与段的概念programheaderSystemcodeSystemdataELF头main()intnn=11.symtab.debug.symtabSectionHeaderTableELF头sqr()intnum=10Uninitializeddata.symtab.debug.symtabSectionHeaderTableELF头Prog
4、ramHeadersSystemcodemain()sqr()Systemdataintnn=11intnum=10Uninitializeddata.symtab.debug.symtab.text区.data区.text区.data区.text区.data区.bss区.Text段.Data段.BSS段Hello.oExecutionimageLinkingimage可执行映像文件的逻辑结构由几个可重定位的目标文件的相同属性区组成了可执行映像的段,那么段有组成什么?在逻辑结构里,段组成了更大的组织:域SystemcodeS
5、ystemdataELF头main()intnn=11.symtab.debug.symtabSectionHeaderTableELF头main()intnn=11Uninitializeddata.symtab.debug.symtabSectionHeaderTableELF头ProgramHeadersSystemcodemain()sqr()Systemdataintnn=11intnum=10Uninitializeddata.symtab.debug.symtab输入区ro输入区rw输入区ro输入区rw输入区Z
6、I输出域ro输出域rw输出域ZI输入区ro输入区rw可执行映像文件的逻辑结构Output输出段Output输出段Output输出段域装载域和运行域域又组成什么呢?当然就是组成可执行文件了,一个映像文件可以包含一到多个域。与看起来有些多余,实际上更为重要的是用域来描述输出区运行前和运行时在存储系统上的位置。所以,域分为装载域和运行域。装载域描述运行前输出段在rom/ram中的分布状态,运行域描述运行时输出段在rom/ram中的分布状态大多数情况下,映像文件在执行前把它装载到rom中,而当运行时域里的有些输出段必须复制到ram中
7、,程序才能正常运行,所以,在装载和运行时,有些段处在不同的位置(地址空间)。Main()Sqr()SystemdataIntnum=10Uninitializeddata输出区ro输出区rw输出区ziIntnum=10SystemdataMain()Sqr()SystemcodeRAMROMUninitializeddataSystemdataIntnum=10Main()Sqr()SystemcodeziRw运行域Ro运行域拷贝输出区装载域运行域由图可以看出,映像文件zi段在装载域里是不存在的,在运行域里才建立的;映像文件
8、在运行时,第一件工作就是把rw输出段复制到ram里的正确位置,第二件工作就是建立zi输出段并初始化为0。这就是应用程序执行环境的初始化。然而,在运行时,代码和数据分布到了不同的地址空间,形成了三个运行域:ro运行域、rw运行域、zi运行域。那么这个过程是如何来实现的?
9、Image$$RO$
此文档下载收益归作者所有