如何去看LINUX的核心源码呢.不要错过本文!!嘻嘻!

核心源码的顶层是/usr/src/linux目录,在此目录下您能够看到大量子目录:

arch
这个子目录包含了任何体系结构相关的核心代码。他还包含每种支持的体系结构的子目录,如i386。
include
这个目录包括了用来重构核心的大多数include文档。对于每种支持的体系结构分别有一个子目录。 此目录中的asm子目录中是对应某种处理器的符号连接,如include/asm-i386。要修改处理器结构 则只需编辑核心的makefile并重新运行Linux核心配置程式。
init
此目录包含核心启动代码。
mm
此目录包含了任何的内存管理代码。和具体体系结构相关的内存管理代码位于arch/*/mm目录下, 如arch/i386/mm/fault.c 。
drivers
系统中任何的设备驱动都位于此目录中。他又进一步划分成几类设备驱动,如block。
ipc
此目录包含了核心的进程间通讯代码。
modules
此目录仅仅包含已建好的模块。
fs
任何的文档系统代码。他也被划分成对应不同文档系统的子目录,如vfat和ext2。
kernel
主要核心代码。同时和处理器结构相关代码都放在arch/*/kernel目录下。
net
核心的网络部分代码。
lib
此目录包含了核心的库代码。和处理器结构相关库代码被放在arch/*/lib/目录下。
scripts
此目录包含用于配置核心的脚本文档(如awk和tk脚本)。

从哪里入手,如何入手

阅读象Linux核心代码这样的复杂程式令人望而生畏。他象一个越滚越大的雪球。阅读核心某个部分经常要 用到好几个其他的相关文档,不久您将会忘记您原来在干什么。本小节将给出一些提示。

系统启动和初始化

在基于intel的系统上,Linux能够通过loadlin.exe或LILO将核心载入内存并将控制传递给他。这部分程式 位于arch/i386/kerneld/head.S。此文档完成一些处理器相关操作并跳转到init/main.c中的main()例程。

内存管理

这部分代码主要位于mm目录中但其处理器结构相关部分被放在arch/*/mm中。页面出错处理代码位于mm下的 memory.c文档中而内存映射和页面cache代码位于filemap.c中。buffer cache则在mm/buffer.c中实现, swap cache位于mm/swap_state.c和mm/swapfile.c中。

核心

大多数通用代码位于kernel目录下而处理器相关代码被放在arch/*/kernel中。调度器位于kernel/sched.c 而fork代码位于kernel/fork.c中。底层部分处理代码位于include/linux/interrupt.h中。task_struct的 描叙则在/linux/sched.h中能够找到。

PCI

PCI伪设备驱动位于drivers/pci/pci.c且其系统通用定义放在include/linux/pci.h中。每个处理器结构 具备特别的PCI BIOS代码,Alpha AXP的位于arch/alpha/kernel/bios32.c中。

进程间通讯

任何这些代码都在ipc目录中。系统V IPC对象都包含一个ipc_perm结构,他在include/linux/ipc.h中描叙。 系统V消息在ipc/msg.c中实现,共享内存在ipc/shm.c而信号灯位于ipc/sem.c中。管道在ipc/pipe.c中实现。

中断处理

核心的中断处理代码总是和微处理器结构相关。Intel系统的中断处理代码位于arch/i386/kernel/irq.c中, 其定义位于include/asm-i386/irq.h中。

设备驱动

Linux核心源码的大多数都是设备驱动。任何Linux的设备驱动源码都放在drivers目录中并分成以下几类:


/block
块设备驱动包括IDE(在ide.c中)驱动。假如您想寻找这些可包含文档系统的设备的初始化过程 则应该在drivers/block/genhd.c中的device_setup()。当安装一个nfs文档系统时不但要初始化 硬盘还需初始化网络。块设备包括IDE和SCSI设备。


/char
此目录包含字符设备的驱动,如ttys,串行口连同鼠标。


/cdrom
包含任何Linux CDROM代码。在这里能够找到某些特别的CDROM设备(如Soundblaster CDROM)。 IDE接口的CD驱动位于drivers/block/ide-cd.c中而SCSI CD驱动位于drivers/scsi/scsi.c中。


/pci
他包含了PCI伪设备驱动源码。这里能够找到关于PCI子系统映射和初始化的代码。另外位于 arch/alpha/kernel/bios32.c中的Alpha AXP PCI补丁代码也值得一读。


/scsi
这里能够找到任何的SCSI代码连同Linux支持的SCSI 设备的设备驱动。


/net
包含网络驱动源码,如tulip.c中的DECChip 21040 PCI以太网驱动。


/sound
任何的声卡驱动源码。

文档系统

EXT2文档系统的源码位于fs/ext2中,其数据结构定义位于include/linux/ext2_fs.h, ext2_fs_i.h 连同 ext2_fs_sb.h中。虚拟文档系统数据结构在include/linux/fs.h中描叙且其代码在fs/*中。buffer cache 和update核心后台进程在fs/buffer.c中实现。

网络

网络代码位于net目录而大多数包含文档位于include/net中。BSD套接口代码位于net/socket.c中。IPV4的 INET套接口代码位于net/ipv4/af_inet.c中。通用协议支撑代码(包括sk_buff处理过程)位于net/core中, 同时TCP/IP网络代码位于net/ipv4中。网络设备驱动位于drivers/net中。

模块

核心模块代码部分位于核心中部分位于modules包中。核心代码位于kernel/modules.c且其数据结构和核心 后台进程kerneld消息位于include/linux/module.h和include/linux/kerneld.h目录中。同时必要时需查阅 include/linux/elf.h中的ELF文档格式。

只是介绍如何去学习kernel .具体的代码学习,我们一起一起吧!

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!