从head.s到start_kernel

内核映像被加载到内存并获得控制权之后,内核阶段开始工作。通常,内核映像以压缩形式存储,并不是一个可执行的内核。因此,内核阶段的首要工作是自解压内核映像。内核编译生成vmlinux后,通常会对其再进行压缩,成为zImage(小内核,小于512KB)或bzImage(大内核,大于512KB)。在zImage和bzImage的头部都内嵌有解压缩程序。
然后调用boot/compressed/misc.c中的C函数decompress_kernel来解压内核。decompress_kernel函数打印出信息"Uncompressing Linux..."后,调用gunzip函数将内核解压到内存的指定位置。最后通过kernel/head.s中的 j   start_kernel指令调用init/main.c中的start_kernel()函数,进入内核的初始化过程。

内核的初始化过程由start_kernel函数开始,至第一个用户进程init结束,调用了一系列的初始化函数对所有的内核组件进行初始化。其中,start_kernel、rest_init、kernel_init、init_post等4个函数构成了整个初始化过程的主线。从start_kernel函数开始,内核即进入了C语言部分,它完成了内核的大部分初始化工作。实际上,可以将start_kernel函数看做内核的main函数。

Linux内核修炼之道     任桥伟     http://book.51cto.com/art/201007/213533.htm

4.1 引导过程 http://book.51cto.com/art/201007/213597.htm

4.2.1 start_kernel函数   http://book.51cto.com/art/201007/213598.htm

start_kernel() 到 init()     http://hi.baidu.com/embededlinux/blog/item/e5b2ca1bb22769d5ac6e75e4.html

arm linux kernel 从入口到start_kernel 的代码分析   http://linux.chinaunix.net/bbs/thread-1021226-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值