随着linux的逐渐普及,现今有不少人对于Linux的安装及设置早已比较熟悉了。与Linux的蓬勃发展相适应,想深入了解Linux的也越来越多。而要想深入了解Linux,就须要阅读和剖析linux内核的源代码。
Linux的内核源代码可以从好多途径得到。通常来讲,在安装的linux系统下,/usr/src/linux目录下的东西就是内核源代码。另外还可以从互连网上下载,解压缩后文件通常也都坐落linux目录下。内核源代码有好多版本,目前最新的稳定版是2.2.14。
许多人对于阅读Linux内核有一种焦虑感,虽然大可毋须。其实,象Linux内核这样大而复杂的系统代码,阅读上去确实有好多困难,而且也不象想像的这么高不可攀。只要有恒心,困难都是可以克服的。也不用害怕水平不够的问题,事实上linux关机命令,有好多事情我们不都是从不会到会,边干边学的吗?
任何事情做上去都须要有技巧和工具。正确的方式可以指导工作,良好的工具可以事半功倍。对于Linux内核源代码的阅读也同样这么。下边我就把自己阅读内核源代码的一点经验介绍一下,最后介绍Window平台下的一种阅读工具。
对于源代码的阅读,要想比较顺利,事先最好对源代码的知识背景有一定的了解。对于linux内核源代码来讲linux 内核代码阅读工具,我觉得,基本要求是:1、操作系统的基本知识;2、对C语言比较熟悉,最好要有汇编语言的知识和GNUC对标准C的扩充的知识的了解。另外在阅读之前,还应当晓得Linux内核源代码的整体分布情况。我们晓得现代的操作系统通常由进程管理、内存管理、文件系统、驱动程序、网络等组成。看一下Linux内核源代码就可看出,各个目录大致对应了那些方面。Linux内核源代码的组成如下(假定相对于linux目录):
arch这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86平台就是i386。
include这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。
init此目录包含核心启动代码。
mm此目录包含了所有的显存管理代码。与具体硬件体系结构相关的显存管理代码坐落arch/*/mm目录下,如对应于X86的就是arch/i386/mm/fault.c。
drivers系统中所有的设备驱动都坐落此目录中。它又进一步界定成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。
ipc此目录包含了核心的进程间通信代码。
modules此目录包含已建好可动态加载的模块。
fsLinux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2文件系统对应的就是ext2子目录。
kernel主要核心代码。同时与处理器结构相关代码都置于arch/*/kernel目录下。
net核心的网路部份代码。上面的每位子目录对应于网路的一个方面。
lib此目录包含了核心的库代码。与处理器结构相关库代码被置于arch/*/lib/目录下。
scripts此目录包含用于配置核心的脚本文件。
Documentation此目录是一些文档,起参考作用。
清楚了源代码的结构组成后就可以着手阅读。对于阅读技巧或则说次序,有所谓的横向与纵向之分。所谓横向就是沿着程序的执行次序逐渐进行;所谓纵向查看linux是什么系统,就是分模块进行。虽然她们之间不是绝对的,而是常常结合在一起进行。对于Linux源代码来讲,启动的代码就可以沿着linux的启动次序一步一步来,它的大致流程如下(以X86平台为例):
./larch/i386/boot/bootSect.S–>./larch/i386/boot/setup.S–>./larch/i386/kernel/head.S–>./init/main.c中的start_kernel()。而对于象显存管理等部份,则可以单独掏出来进行阅读剖析。我的感受是:开始最好按次序阅读启动代码,之后进行专题阅读,如进程部份,显存管理部份等。在每位功能函数内部应当一步步来。实际上这是一个反复的过程linux 内核代码阅读工具,不可能读一遍就理解。
以上就是Linux内核源代码阅读经验分享的详细内容,更多请关注小闻网其它相关文章!
评论(0)