嵌入式Linux2.6内核启动流程).doc

嵌入式Linux2.6内核启动流程).doc

ID:53961855

大小:390.00 KB

页数:14页

时间:2020-04-11

嵌入式Linux2.6内核启动流程).doc_第1页
嵌入式Linux2.6内核启动流程).doc_第2页
嵌入式Linux2.6内核启动流程).doc_第3页
嵌入式Linux2.6内核启动流程).doc_第4页
嵌入式Linux2.6内核启动流程).doc_第5页
资源描述:

《嵌入式Linux2.6内核启动流程).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Linux内核构成(国嵌)Linux/arch/arm/boot/compressed/head.s1.解压缩2.初始化3.启动应用程序1arch/arm/boot/compressed/Makefilearch/arm/boot/compressed/vmlinux.lds2.arch/arm/kernel/vmlinux.ldsLinux内核启动流程(国嵌)arch/arm/boot/compressed/start.S(head.s—负责解压缩)Start:.typestart,#function.re

2、pt8movr0,r0.endrb1f.word0x016f2818@Magicnumberstohelptheloader.wordstart@absoluteload/runzImageaddress.word_edata@zImageendaddress1:movr7,r1@savearchitectureIDmovr8,r2@saveatagspointer这也标志着u-boot将系统完全的交给了OS,bootloader生命终止。之后代码在133行会读取cpsr并判断是否处理器处于superviso

3、r模式——从u-boot进入kernel,系统已经处于SVC32模式;而利用angel进入则处于user模式,还需要额外两条指令。之后是再次确认中断关闭,并完成cpsr写入mrsr2,cpsr@getcurrentmodetstr2,#3@notuser?bnenot_angelmovr0,#0x17@angel_SWIreason_EnterSVCswi0x123456@angel_SWI_ARMnot_angel:mrsr2,cpsr@turnoffinterruptstoorrr2,r2,#0xc0@p

4、reventangelfromrunningmsrcpsr_c,r2然后在LC0地址处将分段信息导入r0-r6、ip、sp等寄存器,并检查代码是否运行在与链接时相同的目标地址,以决定是否进行处理。由于现在很少有人不使用loader和tags,将zImage烧写到rom直接从0x0位置执行,所以这个处理是必须的(但是zImage的头现在也保留了不用loader也可启动的能力)。arm架构下自解压头一般是链接在0x0地址而被加载到0x30008000运行,所以要修正这个变化。涉及到r5寄存器存放的zImage基地

5、址r6和r12(即ip寄存器)存放的got(globaloffsettable)r2和r3存放的bss段起止地址sp栈指针地址很简单,这些寄存器统统被加上一个你也能猜到的偏移地址0x30008000。该地址是s3c2410相关的,其他的ARM处理器可以参考下表PXA2xx是0xa0008000IXP2x00和IXP4xx是0x00008000Freescalei.MX31/37是0x80008000TIdavinciDM64xx是0x80008000TIomap系列是0x80008000AT91RM/SAM9

6、2xx系列是0x20008000CirrusEP93xx是0x00008000这些操作发生在代码172行开始的地方,下面只粘贴一部分addr5,r5,r0addr6,r6,r0addip,ip,r0后面在211行进行bss段的清零工作not_relocated:movr0,#01:strr0,[r2],#4@clearbssstrr0,[r2],#4strr0,[r2],#4strr0,[r2],#4cmpr2,r3blo1b然后224行,打开cache,并为后面解压缩设置64KB的临时malloc空间blc

7、ache_onmovr1,sp@mallocspaceabovestackaddr2,sp,#0x10000@64kmax接下来238行进行检查,确定内核解压缩后的Image目标地址是否会覆盖到zImage头,如果是则准备将zImage头转移到解压出来的内核后面cmpr4,r2bhswont_overwritesubr3,sp,r5@>compressedkernelsizeaddr0,r4,r3,lsl#2@allowfor4xexpansioncmpr0,r5blswont_overwritemovr5,

8、r2@decompressaftermallocspacemovr0,r5movr3,r7bldecompress_kernel真实情况——在大多数的应用中,内核编译都会把压缩的zImage和非压缩的Image链接到同样的地址,s3c2410平台下即是0x30008000。这样做的好处是,人们不用关心内核是Image还是zImage,放到这个位置执行就OK,所以在解压缩后zImage头必须为真正的内

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

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

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