赞
踩
跌跌撞撞的在软件开发行业这么久了,各种语言也都见识过了各种平台也都差不多见识了一下,但都了解不够深入,唯独对Linux内核知之甚少,想想今天开始学习还来得及,所以Just do it....
读内核源代码是一件很有意思的事。它像一条线,把操作系统,编译原理,C语言,数据结构与算法,计算机体系结构等等计算机的基础课程串起来。
好,让我们开始Linux内核之旅。
我们的出发点是在CPU加电的一刹那,系统处于16位实地址模式下,终点是内核开始运行start_kernel(),系统处于32位页式寻址的保护模式下。那时内核映象bzImage已经解压完毕,运行于内核态。系统中已经有了一个叫swapper的0号进程,有自己的内核堆栈,情况就相对好理解得多。(尽管与用户态程序相比,还要多操心不少事,包括对硬件的直接操作,内核态各种数据结构的初始化,对页表的操作等等)。
不过,不妨先做些准备动作。
首先,什么是内核?
目前,只知道编译内核后,产生一个叫bzImage的压缩内核映象。它不同于任何普通的可执行程序。我们甚至不知道它从哪里开始执行。只知道把它往/boot/下一放,往boot loader的配置文件(例如grub的menu.lst)中写上相关信息,机子就顺利启动了。因此,我对它的生成过程产生了浓厚兴趣。于是,我查看了相关资料,最直接的资料来自于arch/i386/boot/下的Makefile。
从Makefile中可以知道。bzImage的产生过程是这样的:
从arch/i386/boot/Makefi
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。