`
f002489
  • 浏览: 270935 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Linux核心源码 阅读方法

阅读更多
http://www.cnblogs.com/preacher/p/4647573.html


通常Linux会有以下目录
arch 子目录包括所有和体系结构相关的核心代码。它还有更深的子目录,每一个代表一种支持的体系结构
include 子目录包括编译核心所需要的大部分 include 文件。它也有更深的子目录,每一个支持的体系结构一个。 include/asm 是这个体系结构所需要的真实的 include 目录的软链接,例如 include/asm-i386 。为了改变体系结构,你需要编辑核心的 makefile ,重新运行 Linux 的核心配置程序
init 这个目录包含核心的初始化代码,这时研究核心如何工作的一个非常好的起点
mm 这个目录包括所有的内存管理代码。和体系结构相关的内存管理代码位于 arch/*/mm/
drivers 系统所有的设备驱动程序在这个目录。它们被划分成设备驱动程序类
ipc 这个目录包含核心的进程间通讯的代码
modules 这只是一个用来存放建立好的模块的目录
fs 所有的文件系统代码。被划分成子目录,每一个支持的文件系统一个
kernel 主要的核心代码。同样,和体系相关的核心代码放在 arch/*/kernel
net 核心的网络代码
lib 这个目录放置核心的库代码。和体系结构相关的库代码在 arch/*/lib/
scripts 这个目录包含脚本(例如 awk 和 tk 脚本),用于配置核心
按照以下顺序阅读源代码会轻松点
核心功能(kernel)
内存管理(mm)
文件系统(fs)
进程通讯(ipc)
网络(net)
系统启动和初始化(init/main和head.S)
其他等等

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 )。如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看 drivers/block/genhd.c 中的 device_setup() 。它不仅初始化硬盘,也初始化网络,因为你安装 nfs 文件系统的时候需要网络。块设备包括基于 IDE 和 SCSI 设备。
/char 这里可以查看基于字符的设备比如 tty ,串行口等。
/cdrom Linux 所有的 CDROM 代码。在这里可以找到特殊的 CDROM 设备(比如 Soundblaster CDROM )。注意 ide CD 驱动程序是 drivers/block 中的 ide-cd.c ,而 SCSI CD 驱动程序在 drivers/scsi/scsi.c 中
/pci PCI 伪驱动程序。这是一个观察 PCI 子系统如何被映射和初始化的好地方。 Alpha AXP PCI 整理代码也值得在 arch/alpha/kernel/bios32.c 中查看
/scsi 在这里不但可以找到所有的 Linux 支持的 scsi 设备的驱动程序,也可以找到所有的 SCSI 代码
/net 在这里可以找到网络设备驱动程序比如 DEC Chip 21040 PCI 以太网驱动程序在 tulip.c 中
/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 。 BSD socket 代码在 net/socket.c , Ipv4 INET socket 代码在 net/ipv4/af_inet.c 中。通用协议的支持代码(包括 sk_buff 处理例程)在 net/core 中, TCP/IP 网络代码在 net/ipv4 。网络设备驱动程序在 drivers/net

Modules (模块)

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

相关推荐

    Linux内核源代码的阅读及相关工具介绍

    而理解Linux的核心部分——内核,最直接有效的方式便是阅读并分析其源代码。很多人对阅读Linux内核源代码感到畏惧,实际上,只要掌握了正确的方法,并借助合适的工具,这一过程将变得更加高效且有趣。 #### 阅读...

    Linux核心源代码分析(PDF)

    Linux核心源代码分析.PDF

    linux0.11内核源码

    它的源代码是开放的,允许用户自由地阅读、修改和分发。它的开放源代码使得Linux0.11成为了计算机科学领域里的一个重要里程碑。 在Linux0.11内核的源代码中,包含了各种各样的文件,例如头文件、源文件、Makefile等...

    Linux核心源代码

    **目录结构**:Linux内核源代码以层次化的目录结构组织,如`arch`用于存放不同架构相关的代码,`include`包含头文件,`fs`包含文件系统相关代码,`drivers`用于设备驱动,`net`涵盖网络协议栈,`kernel`包含核心服务...

    Linux 2.4.0源代码

    通过在Windows环境下建立的VS工程来阅读这些源代码,结合《Linux内核源代码情景解析》这本书,可以更直观地理解代码背后的逻辑。这样的学习方式能够帮助开发者深入到操作系统的底层,掌握其核心工作原理,对提升系统...

    linux0.01版本源代码

    在阅读Linux 0.01的源代码时,我们可以深入探究以下几个关键知识点: 1. **内核架构**:早期的Linux内核采用微内核设计,不过与现代的宏内核结构相比,它包含的功能非常基础,如进程管理、内存管理、中断处理等。...

    linux 0.11 内核源码 - 免费下载

    作为一个基于UNIX的操作系统内核,它的源代码包含了核心代码和一些驱动程序。采用开源开发模式的Linux 0.11内核源代码被广泛研究和修改。在嵌入式设备、服务器和个人计算机等领域,Linux 0.11内核得到了广泛应用。 ...

    LINUX内核源代码情景分析_linux_

    《LINUX内核源代码情景分析》一书深入探讨了Linux操作系统的核心——内核的源代码,揭示了其内部机制和工作原理。Linux内核是开源软件的典范,它的设计和实现为研究操作系统提供了宝贵的资源。以下是根据标题、描述...

    LINUX核心0.01版源代码

    Linux内核0.01版源代码是Linux操作系统发展历史上的一个重要里程碑,它标志着Linux项目的开始。这个早期版本虽然相对简单,但对于理解操作系统的基本工作原理和Linux的发展历程具有极高的研究价值。通过深入分析这个...

    Linux内核源代码情景分析.pdf---linux-2.4.0.tar.bz2--Source Insight 3

    《Linux内核源代码情景分析》这本书,结合了“linux-2.4.0.tar.bz2”这个特定版本的内核源码,为读者提供了深入学习Linux内核的宝贵资料。Source Insight 3是一款强大的源代码阅读和编辑工具,它可以帮助开发者高效...

    linux内核源代码情景分析 pdf版 高清

    《Linux内核源代码情景分析》是一本深入探讨Linux内核源码的权威书籍,它为读者揭示了操作系统内核的奥秘。本书通过详细的情景分析,将复杂的内核概念与实际应用相结合,帮助读者逐步理解Linux内核的工作原理。 在...

    linux 核心命令源码

    linux 核心命令源码(cp mv cat chgrp chown cut date df du echo env expand expr find force fs group head hostname join kill link ls mkdir mv nice od paste printf ptx rm selinux seq sleep sort split stat...

    linuxptp源代码

    总的来说,Linux PTP源代码是实现高精度时间同步的关键工具,它不仅提供了核心的协议实现,还提供了用户友好的接口,使得在Linux环境中应用IEEE 1588协议变得更加便捷。如果你正在从事需要精确时间同步的项目,那么...

    Linux核心源代码分析

    通过阅读《Linux核心源代码分析》及其中的示例,读者可以逐步掌握这些核心概念,并能实际应用到系统开发和维护工作中。配合“更多图书下载.htm”资源,可能包含其他相关书籍的链接或介绍,扩展学习资源。而“readme....

    linux 0.11 源码下载

    源码中的`process.c`文件包含了这部分的核心代码。它实现了基于轮转的简单调度算法,每个进程在时间片用完后会被挂起,让其他进程有机会运行。同时,进程间通信(IPC)的基础结构也在这一版本中初具雏形。 二、内存...

    怎样读Linux内核源代码.pdf

    Linux内核源代码阅读方法是一个旨在帮助程序员深入理解Linux操作系统内部机制的过程。Linux内核的开源特性使其源代码对公众开放,因此任何人都可以研究和学习其源代码。内核源代码分析不仅是对技术的深入探索,也是...

    linux 1.0源代码+1.0核心游记+0.11内核完全注释

    本文将深入探讨Linux 1.0源代码、核心游记以及0.11内核的完全注释,揭示这个操作系统内核的发展历程和关键技术。 Linux 1.0源代码是Linux系统早期的重要里程碑。在1994年发布时,它包含了大约十万行C语言代码,展示...

Global site tag (gtag.js) - Google Analytics