`

Linux源代码结构

阅读更多

 

 
 写道
Linux内核源代码位于/usr/src/linux目录下,其结构分布如图1.3所示,每一个目录或子目录可以看作一个模块,其目录之间的连线表示“子目录或子模块”的关系。下面是对每一个目录的简单描述。

include/子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其它模块重建内核。

init/ 子目录包含了内核的初始化代码,这是内核开始工作的起点。

arch/子目录包含了所有硬件结构特定的内核代码,如图1.3,arch/ 子目录下有i386和alpha模块等等。

drivers/ 目录包含了内核中所有的设备驱动程序,如块设备,scsi 设备驱动程序等等。
fs/ 目录包含了所有文件系统的代码,如:ext2, vfat模块的代码等等。

net/ 目录包含了内核的连网代码。

mm/ 目录包含了所有的内存管理代码。

ipc/ 目录包含了进程间通信的代码。

kernel/ 目录包含了主内核代码

 

 

整体结构:

 

 

 写道
1. 系统的启动和初始化
在基于Intel的系统上,当 loadlin.exe 或 LILO把内核装入到内存并把控制权传递给内核时,内核开始启动。关于这一部分,看arch/i386/kernel/head.S ,head.S进行特定结构的设置,然后跳转到init/main.c的main()例程。
2. 内存管理
内存管理的代码主要在/mm,但特定结构的代码在arch/*/mm。缺页中断处理的代码在mm/memory.c ,而内存映射和页高速缓存器的代码在mm/filemap.c。缓冲器高速缓存是在mm/buffer.c 中实现,而交换高速缓存是在mm/swap_state.c 和 mm/swapfile.c中实现。

3. 内核
内核中,特定结构的代码在arch/*/kernel,调度程序在kernel/sched.c,fork的代码在kernel/fork.c,task_struct 数据结构在 include/linux/sched.h中。

4. PCI
PCI 伪驱动程序在 drivers/pci/pci.c ,其定义在include/linux/pci.h。每一种结构都有一些特定的 PCI BIOS 代码, Intel的在arch/alpha/kernel/bios32.c。

5. 进程间通信
所有System V IPC 对象权限都包含在 ipc_perm 数据结构中,这可以在 include/linux/ipc.h中找到。 System V 消息是在 ipc/msg.c中实现, 共享内存在 ipc/shm.c中,信号量在 ipc/sem.c中,管道在 ipc/pipe.c中实现。

6. 中断处理
内核的中断处理代码是几乎所有的微处理器所特有的。中断处理代码在 arch/i386/kernel/irq.c中,其定义子在 include/asm-i386/irq.h中。

7. 设备驱动程序
Linux内核源代码的很多行是设备驱动程序。Linux设备驱动程序的所有源代码都保存在/driver,根据类型可进一步划分为:

/block
块设备驱动程序如ide(在ide.c)。如果你想看包含文件系统的所有设备是如何被初始化的,你应当看drivers/block/genhd.c中的device_setup(),device_setup()不仅初始化了硬盘,当一个网络安装nfs文件系统时,它也初始化网络。块设备包含了基于IDE和SCSI的设备。

/char
这是看字符设备(如tty,串口及鼠标等)驱动程序的地方。

/cdrom
Linux的所有CDROM代码都在这儿,如在这儿可以找到Soundblaster CDROM的驱动程序。注意ide CD的驱动程序是 ide-cd.c,放在drivers/block,SCSI CD的驱动程序是scsi.c,放在drivers/scsi。

/pci
这是PCI伪驱动程序的源代码,在这里可以看到PCI子系统是如何被映射和初始化的。

/scsi
在这里可以找到所有的SCSI代码及Linux所支持的scsi设备的所有设备驱动程序。

/net
在这里可以找到网络设备驱动程序,如DECChip 21040 PCI 以太网驱动程序在tulip.c中。

/sound
这是所有声卡驱动程序的所在地。

8. 文件系统
EXT2 文件系统的源代码全部在 fs/ext2/ 目录下,而其数据结构的定义在 include/linux/ext2_fs.h, ext2_fs_i.h 及 ext2_fs_sb.h中。 虚拟文件系统的数据结构在 include/linux/fs.h中描述,而代码是在fs/*中。 缓冲区高速缓存与更新内核的守护进程的实现是在 fs/buffer.c中 。

8. 网络
网络代码保存在/net中,大部分的include文件在include/net下,BSD套节口代码在net/socket.c中,IP 第4版本的套节口代码在net/ipv4/af_inet.c。一般的协议支持代码(包括sk_buff 处理例程)在net/core下,TCP/IP联网代码在net/ipv4下,网络设备驱动程序在/drivers/net下。

9. 模块
内核模块的代码部分在内核中,部分在模块包中,前者全部在kernel/modules.c中,而数据结构和内核守护进程kerneld的信息分别在include/linux/module.h和include/linux/kerneld.h 中。如果你想看ELF目标文件的结构,它位于include/linux/elf.h中。

 

 

备注:

从程序员的角度看计算机系统里面的代码都是在linux下面编译的,应该对比这本书和linux的源码来学习,加深自己的理解。比如堆栈操作,内存共享,进程空间,虚拟机的一些理论,这些肯定是有联系的。

 

参考资料:

代码导航:http://lxr.linux.no/linux+v3.0.4/mm/bootmem.c#L57

如何阅读Linux源码 http://www.kerneltravel.net/kernel-book/%E7%AC%AC%E4%B8%80%E7%AB%A0%E8%B5%B0%E8%BF%9Blinux/1.6.3.htm

 

http://lxr.linux.no/

中国镜像 http://www.linuxforum.net/index.php

 

 

 

分享到:
评论

相关推荐

    linux源代码分析

    《Linux源代码分析》是IT领域中一本深入探讨操作系统内核的权威著作,它主要针对的是Unix源代码,因为Linux与Unix在很多设计思想和实现上有着深厚的渊源。Unix作为历史上最早的多用户、多任务操作系统之一,其源代码...

    最早的linux源代码

    "最早的Linux源代码"指的是Linux内核的早期版本,这里特指0.11版。这个版本对于学习Linux发展历史、理解操作系统核心概念以及深入研究操作系统设计原理具有极高的价值。 1. **Linux内核介绍**:Linux内核是Linux...

    linux源代码分析之内存管理

    ### Linux源代码分析之内存管理 #### 摘要与关键词 本文档是对Linux内核内存管理系统的一个深入分析,特别是针对其源代码进行了详细的解读。Linux的内存管理是内核中最复杂的部分之一,它涉及到了内存初始化、地址...

    linux 经典源代码

    源代码中包含了文件系统的工作原理,包括文件的创建、读取、写入、删除操作,以及目录结构的管理。 4. **进程管理**:在Linux中,进程是执行中的程序实例。源代码揭示了如何创建、管理和结束进程,以及如何处理进程...

    用Source Insight打开linux内核源代码

    可以用 Source Insight 打开 Linux 内核源代码,了解代码的结构和内容。 5. 阅读 Linux 内核源代码的步骤:开始最好按顺序阅读启动代码,然后进行专题阅读,如进程部分,内存管理部分等。在每个功能函数内部应该一...

    Linux内核源代码漫游

    ### Linux内核源代码漫游知识点解析 #### 一、引言 ...这篇文章不仅提供了对Linux源代码结构的概述,而且还介绍了与Unix特性相关的实现细节,对于想要深入了解Linux内部机制的程序员来说,是一份宝贵的资源。

    linux源代码分析--进程调度部分

    总的来说,Linux源代码的进程调度部分是理解操作系统核心机制的关键,它涉及到复杂的算法和数据结构,需要扎实的计算机科学基础和深入的编程经验。通过研究这部分源代码,开发者不仅可以了解到操作系统如何管理和...

    linux源代码目录树结构图解

    linux 源代码目录树结构图解,希望能帮助大家更直观的,更好的了解Linux内核的结构。

    linux内核C源代码58.rar_linux c 源_linux 源代码_linux 源程序_linux内核源代码

    Linux内核源代码结构复杂,包括了众多子系统,如内存管理、进程管理、文件系统、网络协议栈等。源代码通常遵循一定的组织结构,例如: 1. `include/`:包含头文件,定义了各种数据结构和接口。 2. `arch/`:针对...

    LINUX内核源代码情景分析_linux_

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

    linux0.11源代码带注释

    Linux 0.11 的源代码结构简洁明了,主要分为以下几个部分: 1. **include**:包含所有内核头文件,定义了各种数据结构和常量。 2. **arch**:针对不同的处理器架构,如x86,提供了相应的代码实现。 3. **fs**:文件...

    linux0.11源代码

    Linux 0.11 源代码是 Linux 内核早期的一个版本,它标志着 Linux 发展历程中的一个重要里程碑。这个源代码提供了对操作系统核心工作原理的深入理解,对于学习操作系统设计、内核开发以及理解 Linux 的发展历史具有极...

    LINUX内核源代码说明

    本文将详细介绍如何在Linux内核源代码中查找特定的内核函数,以及源代码的组织结构。 首先,获取Linux内核源码通常是通过Linux发行版提供的包管理系统或者从官方或镜像站点下载。常见的获取方式包括访问附录A列出的...

    Linux 2.4.0源代码

    Linux 2.4.0源代码是Linux操作系统发展历史中的一个重要里程碑,它是Linux社区于2001年发布的内核版本。这个版本引入了许多新特性,增强了系统的稳定性和性能,为后来的2.6.x系列奠定了基础。在这个版本中,我们可以...

    Linux源代码目录树结构

    加油学习 这是Linux源代码目录树结构 哈哈哈 烦

Global site tag (gtag.js) - Google Analytics