诗和远方

Linux内核源代码目录功能

arch子目录包括所有和CPU体系结构相关的核心代码。

include子目录包括编译核心所需要的大部分 include 文件。它也有更深的子目录,每一个支持的体系结构。 include/asm 是这个体系结构所需要的真实的 include 目录的软链接,例如 include/asm-i386 。

init包含核心的初始化代码

mm内存管理代码。和体系结构相关的内存管理代码位于 arch/*/mm/

drivers设备驱动程序

ipc包含核心的进程间通讯的代码

modules存放建立好的模块的目录

fs文件系统代码

kernel主要的核心代码。同样,和体系相关的核心代码放在 arch/*/kernel

net核心的网络代码

lib核心的库代码。和体系结构相关的库代码在 arch/*/lib/

scripts脚本(例如 awk 和 tk 脚本),用于配置核心


按照以下顺序阅读源代码:

1.核心功能(kernel) 

2.内存管理(mm) 

3.文件系统(fs)

4.进程通讯(ipc)

5.网络(net)

6.系统启动和初始化(init/main和head.S)

7.其他等等


System Startup and Initialization (系统启动和初始化)

在一个 Intel 系统上,当 loadlin.exe 或 LILO 把核心加载到内存并把控制权交给它的时候,核心开始启动。这一部分看 arch/i386/kernel/head.S 。 head.S 执行一些和体系结构相关的设置工作并跳到 init/main.c 中的 main() 例程。


Memory Management (内存管理)

代码大多在 mm 但是和体系结构相关的代码在 arch/*/mm 。 Page fault 处理代码在 mm/memory.c 中,内存映射和页缓存代码在 mm/filemap.c 中。 Buffer cache 在 mm/buffer.c 中实现,交换缓存在 mm/swap_state.c 和 mm/swapfile.c 中。


Kernel

大部分相对通用的代码在 kernel ,和体系结构相关的代码在 arch/*/kernel 。调度程序在 kernel/sched.c , fork 代码在 kernel/fork.c 。 bottom half 处理代码在 include/linux/interrupt.h 。 task_struct 数据结构可以在 include/linux/sched.h 中找到


PCI

PCI 伪驱动程序在 drivers/pci/pci.c ,系统范围的定义在 include/linux/pci.h 。每一种体系结构都有一些特殊的 PCI BIOS 代码, Alpha AXP 的位于 arch/alpha/kernel/bios32.c


Interprocess Communication

全部在 ipc 目录。所有系统 V IPC 对象都包括 ipc_perm 数据结构,可以在 include/linux/ipc.h 中找到。系统 V 消息在 ipc/msg.c 中实现,共享内存在 ipc/shm.c 中,信号灯在 ipc/sem.c 。管道在 ipc/pipe.c 中实现。


Interrupt Handling

核心的中断处理代码几乎都是和微处理器(通常也和平台)相关。 Intel 中断处理代码在 arch/i386/kernel/irq.c 它的定义在 incude/asm-i386/irq.h 。


Device Drivers (设备驱动程序)

Linux 核心源代码的大部分代码行在它的设备驱动程序中。 Linux 所有的设备驱动程序源代码都在 drivers 中,但是它们被进一步分类:

/block 块设备驱动程序比如 ide ( ide.c )。

/char 这里可以查看基于字符的设备比如 tty ,串行口等。

/cdrom Linux 所有的 CDROM 代码。

/pci PCI 伪驱动程序。

/scsi scsi 设备的驱动程序和所有的 SCSI 代码

/net网络设备驱动程序

/sound 所有的声卡驱动程序


File Systems (文件系统)

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 实现的


Network (网络)

网络代码放在 net 子目录,大部分的 include 文件在 include/net 。


Modules (模块)

核心模块代码部分在核心,部分在 modules 包中。核心代码全部在 kernel/modules.c ,数据结果和核心守护进程 kerneld 的消息则分别在 include/linux/module.h 和 include/linux/kerneld.h 中。你可能也希望在 include/linux/elf.h 中查看一个 ELF 目标文件的结构 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Catalog
标签列表
最新
最热
常用网站
站点信息
  • 文章总数:2016
  • 页面总数:1
  • 分类总数:17
  • 标签总数:518
  • 评论总数:0
  • 浏览总数:592287
Archives
Copyright © 2017-2019 www.my889.com Some Rights Reserved.
推荐使用 Chrome 浏览器浏览本站
沪ICP备17052342号
Sitemap XML