Linux 核心--15.Linux内核资源( 二 )



内存管理
这部分代码主要位于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文件格式 。

推荐阅读