Linux网管笔记(17)阅读Linux的内核源码

有关此类文章确实比较多了,列出我解读代码的几点体会。

1.代码的结构

(1)阅读sched.h源码文件,加深对进程管理概念的理解

(2)阅读Linux的fork.c源码文件,分析进程的创建过程

(3)阅读msg.c,sem.c和shm.c源码文件,熟悉Linux的三种通信机制。

Linux的内核源码可以通过许多途径得到。一般来讲,在完整安装的Linux系统下,/usr/src/linux目录下的文件就是内核源码。另外,还可以从Internet上下载,http://www.kernel.org/是比较权威的下载站点。展开的源码一般包括以下几个子目录:

u arch: 该目录包含了此内核源码所支持的硬件体系结构相关的内核源码。在这个目录下,针对不同体系结构所移植的版本都有三个子目录:kernel、lib和mm。kernel子目录包含以来于体系结构实现的一般内核功能,如信号处理、时钟处理等;lib子目录包含库函数的本地实现,如果从依赖于体系结构的源码编译,则运行更快;mm子目录包含存储管理实现的代码。

u kernel:许多最常调用的内核函数放在该目录下。调度器fork()和timer.c就放在这里,以及printk.c等。与处理器结构相关的代码放在arch/*/kernel目录下。

u lib:该目录放置内核其他部分经常所需要的代码,如inflate.c就放在这里,它能够在引导时解压内核并装入内存。与处理器结构相关的库代码放在arch/*/lib目录下。

u mm: 包含了所有Linux实现虚拟内存管理的源码。与具体硬件体协结构相关的内存管理代码位于arch/*/mm目录下,如对应X86的就是arch/i386/mm/fault.c

u drivers: 这个目录拥有50%以上的内核源码,系统中所有的设备驱动程序都位于该目录中。

u include: 包括了内核的大多数头文件,另外对每种支持的体系结构分别有一个子目录。

u init: 包含了所有系统的初始化源码,许多主要的文件,如main.c就位于该目录下。该文件还包含了许多核心代码——如实现fork()的代码和最常执行的代码——cpuidle()循环。

u ipc: 处理进程间通信的全部所需的代码都放在目录下。

u modules: 已编译好的可动态加载的模块。

u fs: Linux支持的文件系统代码。不同的文件系统有不同的子目录与之对应。

u net: 所有提供网络支持的代码,每个子目录对应网络的一个方面。

u scripts: 用于配置内核的脚本文件角用户开发和维护手册。

Linux内核源码包含的内容较多,2.4.20版本的内核源码大约有40万行。

2.内核编码风格

如果用户需要修改Linux内核源码,那么一定要注意遵守下面的编码约定:

u 注释是/* */风格的,单行注释也是这样,不接受//风格的注释。

u 函数开始的大括号{}独占一行。

u if语句以下面方式编码:

if (str[0]>=’0’ && str[0]<=’9’){

strcpy (name, “abcd”);

strncpy (name+4, str, 1);

}else

printk (“error param”);

name [sizeof (name) -1]=0;

u 单行if语句是可以接受的:

if (!strcmp(str, “abc”)) strcpy(str, “abc”);

u 内核源码包含许多goto,差不多每80行代码就有一个goto,这是出于执行效率的考虑,如在一些while语句中,使用goto跳出代码块,而不是使用break

你可能感兴趣的:(Linux网管笔记(17)阅读Linux的内核源码)