linux 内核启动代码分析

linux 内核启动代码分析

ID:8466706

大小:44.50 KB

页数:12页

时间:2018-03-28

linux 内核启动代码分析_第1页
linux 内核启动代码分析_第2页
linux 内核启动代码分析_第3页
linux 内核启动代码分析_第4页
linux 内核启动代码分析_第5页
资源描述:

《linux 内核启动代码分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、linux内核启动代码分析(我们使用的cpu是采用xscale技术的pxa250,具体的开发板是cerfboard。这里的代码解释都是根据pxa250进行的。不过,正如我们下面会看到,大部分的代码都是和具体的pxa型号无关的。另外,我们列出代码的行号仅仅为了解释方便,并不是代码在源文件中真正的行号。1.bootloader及内核解压bootloader将内核加载到内存中,设定一些寄存器,然后就将控制权交由内核了,这时并不需要打开MMU功能。一般,我们所说的内核都是指被压缩了的内核piggy.gz,其与head.o、misc.o和head-xsc

2、ale.o一起构成最终的内核代码。启动内核的过程首先包括解压,最先执行的代码是:arch/arm/boot/compressed/head.Sarch/arm/boot/compressed/head-xscale.Sarch/arm/boot/compressed/misc.c上面代码主要任务是解压真正的内核代码,真正的内核代码是从head-armv.S开始,以后提到的内核都是指真正的内核:arch/arm/kernel/head-armv.S2.内核启动第一阶段内核启动第一阶段是从ENTRY(stext)到c语言函数start_kernel

3、,这一部分涉及的代码有arch/arm/kernel/head-armv.Sarch/arm/mm/proc-xscale.S在bootloader调用内核运行之前,要在指定的寄存器中存放参数,如下:r0=0,r1=machinetypenumber,对于MACH_TYPE_PXA_CERF是139r2=physicaladdressoftaggedlistinsystemRAM.2.1stextENTRY(stext)是整个内核的入口,其代码位于编译后生成的目标文件kernel.o中的.text.init区(section),最后被链接到内核

4、的.init区。1.section".text.init",#alloc,#execinstr@定义所属区2.typestext,#function@定义符号stext为函数符号3ENTRY(stext)4movr12,r05movr0,#F_BIT

5、I_BIT

6、MODE_SVC@makesuresvcmode6msrcpsr_c,r0@andallirqsdisabled7bl__lookup_processor_type8teqr10,#0@invalidprocessor?9moveqr0,#'p'@yes,error'p'10beq__

7、error11bl__lookup_architecture_type12teqr7,#0@invalidarchitecture?13moveqr0,#'a'@yes,error'a'14beq__error15bl__create_page_tables16adrlr,__ret@returnaddress17addpc,r10,#12@initialiseprocessor18@(returncontrolreg)第5行,准备进入SVC工作模式,同时关闭中断(I_BIT)和快速中断(F_BIT)第7行,查看处理器类型,主要是为了得到处理器

8、的ID以及页表的flags,详细说明见下。第11行,查看一些体系结构的信息,详细说明见下。第15行,建立页表。第17行,跳转到处理器的初始化函数,其函数地址是从__lookup_processor_type中得到的,需要注意的是第16行,当处理器初始化完成后,会直接跳转到__ret去执行,这是由于初始化函数最后的语句是movpc,lr。2.2__lookup_processor_type我们先来看看__lookup_processor_type函数,我们知道arm系列的处理器有arm7、arm9、arm10以及xscale等,可是如何区分呢?在

9、内核中有个结构structproc_info_list,用来记录处理器相关的信息:19structproc_info_list{20unsignedintcpu_val;21unsignedintcpu_mask;22unsignedlong__cpu_mmu_flags;/*usedbyhead-armv.S*/23unsignedlong__cpu_flush;/*usedbyhead-armv.S*/24constchar*arch_name;25constchar*elf_name;26unsignedintelf_hwcap;27st

10、ructproc_info_item*info;28structprocessor*proc;29};对于采用xscale技术pxa250,具体的处理

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。