下载此文档

Linux2.6内核启动流程.doc


文档分类:IT计算机 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
Linux内核构成(国嵌)1arch/arm/pressed/Makefilearch/arm/pressed/(国嵌)arch/arm/pressed/:.typestart,#,.******@umberstohelptheloader.******@absoluteload/******@zImageendaddress1:movr7,******@savearchitectureIDmovr8,******@saveatagspointer这也标志着u-boot将系统完全的交给了OS,bootloader生命终止。之后代码在133行会读取cpsr并判断是否处理器处于supervisor模式——从u-boot进入kernel,系统已经处于SVC32模式;而利用angel进入则处于user模式,还需要额外两条指令。之后是再次确认中断关闭,并完成cpsr写入mrsr2,******@getcurrentmodetstr2,#******@notuser?bnenot_angelmovr0,#******@angel_SWIreason_******@angel_SWI_ARMnot_angel:mrsr2,******@turnoffinterruptstoorrr2,r2,#******@preventangelfromrunningmsrcpsr_c,r2然后在LC0地址处将分段信息导入r0-r6、ip、sp等寄存器,并检查代码是否运行在与链接时相同的目标地址,以决定是否进行处理。由于现在很少有人不使用loader和tags,将zImage烧写到rom直接从0x0位置执行,所以这个处理是必须的(但是zImage的头现在也保留了不用loader也可启动的能力)。arm架构下自解压头一般是链接在0x0地址而被加载到0x30008000运行,所以要修正这个变化。涉及到r5寄存器存放的zImage基地址r6和r12(即ip寄存器)存放的got(globaloffsettable)r2和r3存放的bss段起止地址sp栈指针地址很简单,这些寄存器统统被加上一个你也能猜到的偏移地址0x30008000。该地址是s3c2410相关的,,下面只粘贴一部分addr5,r5,r0addr6,r6,r0addip,ip,r0后面在211行进行bss段的清零工作not_relocated:movr0,#01:strr0,[r2],#******@clearbssstrr0,[r2],#4strr0,[r2],#4strr0,[r2],#4cmpr2,r3blo1b然后224行,打开cache,并为后面解压缩设置64KB的临时malloc空间blcache_onmovr1,******@mallocspaceabovestackaddr2,sp,#******@64kmax接下来238行进行检查,确定内核解压缩后的Image目标地址是否会覆盖到zImage头,如果是则准备将zImage头转移到解压出来的内核后面cmpr4,r2bhswont_overwritesubr3,sp,r5@>compressedkernelsizeaddr0,r4,r3,lsl#******@allowfor4xexpansioncmpr0,r5blswont_overwritemovr5,******@pressaftermallocspacemovr0,r5movr3,press_kernel真实情况——在大多数的应用中,内核编译都会把压缩的zImage和非压缩的Image链接到同样的地址,s3c2410平台下即是0x30008000。这样做的好处是,人们不用关心内核是Image还是zImage,放到这个位置执行就OK,所以在解压缩后zImage头必须为真正的内核让路。在250行解压完毕,内核长度返回值存放在r0寄存器里。在内核末尾空出128字节的栈空间用,并且使其长度128字节对齐。addr0,r0,#127+******@alignment+stackbicr0,r0,#******@ali

Linux2.6内核启动流程 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数12
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xxj165868
  • 文件大小0 KB
  • 时间2016-01-29