- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM linux的启动部分源代码简略分析
ARM linux的启动部分源代码简略分析
?
ARM linux的启动部分源代码简略分析?以友善之臂的mini2440开发板为平台,以较新的内核linux-版本为例,仅作说明之用。当内核映像被加载到RAM之后,Bootloader的控制权被释放。内核映像并不是可直接运行的目标代码,而是一个压缩过的zImage(小内核)。但是,也并非是zImage映像中的一切均被压缩了,映像中包含未被压缩的部分,这部分中包含解压缩程序,解压缩程序会解压缩映像中被压缩的部分。zImage使用gzip压缩的,它不仅仅是一个压缩文件,而且在这个文件的开头部分内嵌有gzip解压缩代码。当zImage被调用时它从arch/arm/boot/compressed/head.S的start汇编例程开始执行。这个例程进行一些基本的硬件设置,并调用arch/arm/boot/compressed/misc.c中的decompress_kernel()解压缩内核。
?arch/arm/kernel/head.S文件是内核真正的启动入口点,一般是由解压缩内核的程序来调用的。首先先看下对于运行这个文件的要求:
MMU = off; D-cache = off; I-cache = 无所谓,开也可以,关也可以; r0 = 0;r1 = 机器号;r2 = atags 指针。
这段代码是位置无关的,所以,如果以地址0xC0008000来链接内核,那么就可以直接用__pa(0xc0008000)地址来调用这里的代码。
?
其实,在这个(Linux内核中总共有多达几十个的以head.S命名的文件)head.S文件中的一项重要工作就是设置内核的临时页表,不然mmu开起来也玩不转,但是内核怎么知道如何映射内存呢?linux的内核将映射到虚地址0xCxxx?xxxx处,但他怎么知道在4GB的地址空间中有哪一片ram是可用的,从而可以映射过去呢??因为不同的系统有不通的内存映像,所以,LINUX约定,要调用内核代码,一定要满足上面的调用要求,以为最初的内核代码提供一些最重要的关于机器的信息。内核代码开始的时候,R1存放的是系统目标平台的代号,对于一些常见的,标准的平台,内核已经提供了支持,只要在编译的时候选中就行了,例如对X86平台,内核是从物理地址1M开始映射的。
好了好了,看下面的代码。
?arch/arm/kernel/head.S
ENTRY(stext)是这个文件的入口点。最初的几行是这样的:
?? setmode? PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9
@ ensure svc mode
@ and irqs disabled
// 设置为SVC模式,关闭中断和快速中断?// 此处设定系统的工作状态为SVC,arm有7种状态每种状态
// 都有自己的堆栈,SVC为管理模式,具有完全的权限,可以执行任意指令
// 访问任意地址的内存
// setmode是一个宏,其定义为:
// .macro setmode, mode, reg
// msr?? cpsr_c, #\mode
// .endm
?? mrc?? p15, 0, r9, c0, c0??? @ get processor id
?? bl __lookup_processor_type???? @ r5=procinfo r9=cpuid
?? movs? r10, r5??????????? @ invalid processor (r5=0)?
?? beq?? __error_p?????? @ yes, error p
?
这几行是查询处理器的类型的,我们知道arm系列有很多型号,arm7、arm9、arm11、Cortex核等等类型,这么多型号要如何区分呢?其实,在arm的15号协处理器(其实ARM暂时也就这么一个协处理器)中有一个只读寄存器,存放与处理器相关信息。
?
__lookup_processor_type是arch/arm/kernel/head-common.S文件中定义的一个例程,这个head-common.S用include命令被包含在head.S文件中。其定义为:
__lookup_processor_type:
?? adr?? r3, 3f
?? ldmia r3, {r5 - r7}
?? add?? r3, r3, #8
?? sub?? r3, r3, r7???????? @ get offset between virtphys
?? add?? r5, r5, r3???????? @ convert virt addresses to
?? add?? r6, r6, r3???????? @ physica
您可能关注的文档
- 形式语言与自动机2009-11-30.ppt
- 第2章 静定结构内力计算.ppt
- 英才 必一第一章第3节蛋白质复习.ppt
- 2-1节 随机变量及其分布函数.ppt
- 山东大学威海分校通信原理课件(张遥老师)10-2.ppt
- 物理学(第四版)上册1-1质点运动的描述.ppt
- 选4-第3章-第2节-水的电离和溶液的酸碱性-第3课时-酸碱中和滴定.ppt
- 阶段一(理)_专题一_第四节_不等式.ppt
- 数学:8.2.1第1课时-代入法解方程组课件(七年级下人教新课标版).ppt
- 基础力学2总复习(2010-2011-2).ppt
- 2024年河南省漯河市源汇区阴阳赵乡招聘社区工作者真题及参考答案详解1套.docx
- 2024年河南省濮阳市濮阳县清河头乡招聘社区工作者真题附答案详解.docx
- 人教版一年级数学上册数学游戏第3课时 在教室里认一认.pptx
- 人教版数学一年级下册四 100以内的口算加、减法第1课时 口算减法(1).pptx
- 人教版一年级数学上册 第4单元 11~20的认识第2课时 11~20的认识(1).pptx
- 人教版数学一年级下册三 100以内数的认识第5课时 数的顺序.pptx
- 2025 入党积极分子预备党员考试题库(附答案).docx
- 关于入党积极分子预备党员应知应会题库(附答案).pdf
- 关于入党积极分子预备党员应知应会题库(附答案).docx
- 2025 入党积极分子预备党员考试题库(附答案).pdf
文档评论(0)