内核启动过程分析(自解压后到start_kernel)
内核启动过程分析
在学习过程中“行走的流云”的博文给了我很大的帮助,我也复制了很多他的总结,在这里感谢他!
本文件的代码主要是讲内核开始工作前的准备工作,其工作主要有一下几点:
进入管理模式,判断处理器ID是否匹配,判断机器ID是否匹配,判断atags指针是否合法。
建立页表,实现虚拟地址和物理地址的映射。
关闭Icache、Dcache、清空write buffer、使TLB无效
使能MMU、使能cache跳转到start kernel开始真正的内核运行。
对于经过压缩的内核(zImage),先运行解压缩decompress_kernel,然后还需要重定位,然后调用内核,就象跳到未压缩的内核中的开始处,内核的startup在arch/arm/kernel/head.S中,进行页表初始化和处理器缓存初始化等工作,然后跳到C代码init/main.c中的start_kernel,接下来的事情就是大众化工作了,在这里,我们继续分析解压缩后的工作,即是arch/arm/kernel/head.S的工作内容。首先先说下内核的启动条件:1. CPU必须处于SVC(supervisor)模式,并且IRQ和FIQ中断都是禁止的;2. MMU(内存管理单元)必须是关闭的, 此时虚拟地址对物理地址;3. 数据cache(Data cache)必须是关闭的4. 指令cache(Instruc
原创力文档

文档评论(0)