Android系统启动(二)
zImage是经过高压缩之后和解压缩程序合并在一起生成的。知道这些之后,我们可以把Linux的启动大致分为3段:zImage解压缩、kernel的汇编启动阶段和kernel的c启动阶段。
1、zImage解压缩
2、汇编启动
(1)确定 processor type
(2)确定 machine type
(3)手动创建页表
(4)调用平台特定的cpu setup函数,设置中断地址,刷新Cache,开启Cache
(在struct proc_info_list中,in proc-arm920.S)
(5)开启mmu I、D cache ,设置cp15的控制寄存器,设置TTB寄存器为0x30004000
(6)切换数据(根据需要赋值数据段,清bss段,保存processor ID 和 machine type
和 cp15的控制寄存器值)
(7)最终跳转到start_kernel
(在__switch_data的结束的时候,调用了 b start_kernel)
3、C启动阶段
(1)操作系统的一些基本初始化动作,这个阶段会释放前面提到的ramdisk.img,释放出来的ramdisk呈现出来的目录就是android编译出来之后,在out/…/root的目录一样了,这个目录下有一个init可执行程序,下面就准备启动它。
(2)启动init进程,init进程是linux起来之后启动的第一个用户进程,android系统也就是在这个进程的基础上启动的。进程号是1。切换到用户态
浙公网安备 33010602011771号