内核启动过程分析(自解压后到startkernel)

内核启动过程分析(自解压后到startkernel)

ID:27678811

大小:284.18 KB

页数:20页

时间:2018-12-05

内核启动过程分析(自解压后到startkernel)_第1页
内核启动过程分析(自解压后到startkernel)_第2页
内核启动过程分析(自解压后到startkernel)_第3页
内核启动过程分析(自解压后到startkernel)_第4页
内核启动过程分析(自解压后到startkernel)_第5页
资源描述:

《内核启动过程分析(自解压后到startkernel)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、内核启动过程分析在学习过程中“行走的流云”的博文给了我很大的帮助,我也复制了很多他的总结,在这里感谢他!本文件的代码主要是讲内核开始工作前的准备工作,其工作主要有一下几点:1.进入管理模式,判断处理器ID是否匹配,判断机器ID是否匹配,判断atags指针是否合法。2.建立页表,实现虚拟地址和物理地址的映射。3.关闭Icache、Dcache、清空writebuffer、使TLB无效4.使能MMU、使能cache跳转到startkernel开始真正的内核运行。对于经过压缩的内核(zlmage),先运行解压缩decompress_

2、kernel,然后还盂要笊定位,然后调用内核,就象跳到未压缩的内核中的开始处,内核的startup在arch/arm/kernel/head.S屮,进行页表初始化和处理器缓存初始化等工作,然后跳到C代码init/main.c中的start_kernel,接下來的事情就是大众化工作了,在这.1,我们继续分析解压缩后的工作,即是arch/arm/kernel/head.S的工作内容。首先先说下内核的启动条件:1.CPU必须处于SVC(supervisor)模式,并且IRQ和FIQ中断都是禁止的;2.MMU(内存管理单元)必须是关闭

3、的,此时虚拟地址对物理地址;3.数掘cache(Datacache)必须足关闭的4.指令cache(lnstructioncache)可以是打开的,也可以足关闭的,这个没宥强制要求;5.CPU通用寄存器0(rO)必须是0;6.CPU通用寄存器1(r1)必须是ARMLinuxmachinetype7.CPU通用寄存器2(r2)必须是kernelparameterlist的物理地址/**linux/arch/arm/kernel/head.S*Copyright(C)1994-2002RussellKing*Copyright(c

4、)2003ARMLimited*AllRightsReserved*Thisprogramisfreesoftware;youcanredistributeitand/ormodify*itunderthetermsoftheGNUGeneralPublicLicenseversion2as*publishedbytheFreeSoftwareFoundation.*Kernelstartupcodeforall32-bitCPUs#include#include#

5、include#include#include#include#include#include#include#if(PHYS—OFFSET&OxOOlfffff)#error*PHYS_OFFSETmustbeataneven2MiBboundary!"//boundary(分界线)#endif#defi

6、neKERNEL_RAM_VADDR(PAGE.OFFSET+TEXT_OFFSET)#defineKERNEL_RAM_PADDR(PHYS.OFFSET+TEXT_OFFSET)*swapper_pg_diristhevirtualaddressoftheinitialpage*Weplacethepagetables16KbelowKERNEL_RAM_VADDR.Therefore,wemust*makesurethatKERNEL_RAM_VADDRiscorrectlyset.Currently,weexpect*

7、theleastsignificant16bitstobe0x8000,butwecouldprobably*relaxthisrestrictiontoKERNELRAMVADDR>=PAGEOFFSET+0x4000.*/swapper_pg_dir是初始页表的虚拟地址.我们将页表放在KERNEL_RAM_VADDR以下16K的空间中.因此我们必须保证KERNEL_RAM_VADDR已经被正常设置.当前,我们期望的是这个地址的最后16bits为0x8000,但我们或许可以放宽这项限制到KERNEL_RAM_VADDR〉=P

8、AGEOFFSET+0x4000.#if(KERNEL_RAM_VADDR&Oxffff)!=0x8000#errorKERNEL_RAM_VADDRmuststartatOxXXXXSOOO//内核的起始地址必须是32k对齐#endif•globlswapper_pg_di

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

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

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