Linux源代码目录树结构

 

linux用来支持各种体系结构的源代码包含大约4500个C语言程序,存放在270个左右的子目录下,总共大约包含200万行代码,大概占用58MB磁盘空间。

源代码所有在目录:/usr/src/linux (大部分linux发行版本中)


■arch 平台相关代码
  ◆i386 IBM的PC体系结构
    ◇kernel 内核核心部分
    ◇mm 内存管理
    ◇math-emu 浮点单元软件仿真
    ◇lib 硬件相关工具函数
    ◇ boot 引导程序
      ▲compressed 压缩内核处理
      ▲tools 生成压缩内核映像的程序
  ◆alpha 康柏的Alpha体系结构
  ◆s390 IBM的System/390体系结构
  ◆sparc Sun的SPARC体系结构
  ◆sparc64 Sun的Ultra-SPARC体系结构
  ◆mips SGI的MIPS体系结构
  ◆ppc Motorola-IBM的基于PowerPC的体系结构
  ◆m68k Motorola的基于MC680x0的体系结构
  ◆arm 基于ARM处理器的体系结构

block
  部分块设备驱动程序
■crypto 用Diff和Patch维护源码常用加密和散列算法(如AES、SHA等),还有一些压缩和CRC校验算法

■Documentation有关内核各个部分的通用解释和注释的文本文件

■drivers:设备驱动程序,每个不同的驱动占用一个子目录。
  ◆block 块设备驱动程序
    ◇paride 从并口访问IDE设备的支持
  ◆scsi SCSI设备驱动程序
  ◆char 字符设备驱动程序
    ◇joystick 游戏杆
    ◇ftape 磁带流设备
    ◇hfmodem 无线电设备
    ◇ip2 IntelliPort的多端口串行控制器
  ◆net 网卡设备,实现了各种常见的网络协议。
  ◆sound 音频卡设备
  ◆video 视频卡设备
  ◆cdrom 专用CD-ROM设备(除ATAPI和SCSI之外)
  ◆isd0n ISDN设备
  ◆apl000 富士的AP1000设备
  ◆macintosh 苹果的Macintosh设备
  ◆sgi SGI的设备
  ◆fc4 光纤设备
  ◆acorn Acorn的设备
  ◆misc 杂项设备
  ◆pnp 即插即用的支持
  ◆usb 通用串行总线(USB)的支持
  ◆pci PCI总线的支持
  ◆sbus Sun的SPARC SBus的支持
  ◆nubus 苹果的Macintosh Nubus的支持
  ◆zorro Amiga的Zorro总线的支持
  ◆dio 惠普的HP300 DIO总线的支持
  ◆tc Sun的TurboChannel支持(尚未完成)

■fs 文件系统
  ◆proc /proc虚拟文件系统
  ◆devpts /dev/pts虚拟文件系统
  ◆ext2 Linux本地的Ext2文件系统
  ◆isofs ISO9660文件系统(CD-ROM)
  ◆nfs 网络文件系统(NFS)
  ◆nfsd 集成的网络文件系统服务器
  ◆fat 基于FAT的文件系统的通用代码
  ◆msdos 微软的MS-DOS文件系统
  ◆vfat 微软的Windows文件系统(VFAT)
  ◆nls 本地语言支持
  ◆ntfs 微软的Windows NT文件系统
  ◆smbfs 微软的Windows服务器消息块(SMB)文件系统
  ◆umsdos UMSDOS文件系统
  ◆minix MINIX文件系统
  ◆hpfs IBM的OS/2文件系统
  ◆sysv SystemV、SCO、Xenix、Coherent和Version7文件系统
  ◆ncpfs Novell的Netware核心协议(NCP0
  ◆ufs UnixBSD、SunOs、FreeBSD、NetBSD、OpenBSD和NeXTStep文件系统
  ◆affs Amiga的快速文件系统(FFS)
  ◆coda Coda网络文件系统
  ◆hfs 苹果的Macintosh文件系统
  ◆adfs Acorn磁盘填充文件系统
  ◆efs SGI IRIX的EFS文件系统
  ◆qnx4 QNX4 OS使用不的文件系统
  ◆romfs 只读小文件系统
  ◆autofs 目录自动装载程序的支持
  ◆lockd 远程文件锁定的支持

■Include 头文件(.h).其中,和系统相关的头文件被放置在linux子目录下

  ◆linux 内核核心部分
    ◇lockd 远程文件加锁
    ◇nfsd 集成的网络文件服务器
    ◇sunrpc Sun的远程过程调用
    ◇byteorder 字节交换函数
    ◇modules 模块支持
  ◆asm-generic 平台无关低级头文件
  ◆asm-i386 IBM的PC体系结构
  ◆asm-alpha 康柏的Alpha体系结构
  ◆asm-mips SGI的MIPS体系结构
  ◆asm-m68k Motorola-IBM的基于PowerPC的体系结构
  ◆asm-ppc Motorola-IBM的PowerPC体系结构
  ◆asm-s390 IBM的System/390体系结构
  ◆asm-sparc Sun的SPARC体系结构
  ◆asm-sparc64 Sun的Ultra-SPARC体系结构
  ◆asm-arm 基于ARM处理器的体系结构
  ◆net 网络
  ◆scsi SCSI支持
  ◆video 视频卡支持
  ◆config 定义内核配置的宏所在的头文件

■init 内核初始化代码
■Ipc System V的进程间通信

■kernel 内核核心部分:进程、定时、程序执行、信号、模块. 和平台相关的一部分代码放在arch/*/kernel目录下
■lib:库文件代码。

■mm 内存处理,和平台相关的一部分代码放在arch/*/mm目录下
■net 网络代码 ,实现了各种常见的网络协议。
■scripts 用于配置内核文件的脚本文件

■security:主要是一个SELinux的模块

■sound:常用音频设备的驱动程序等

■usr:实现了一个cpio

在i386体系下,系统引导将从arch/i386/kernel/head.s开始执行,并进而转移到init/main.c中的main()函数初始化内核。我个人认为可以按照这个顺序进行阅读(最好首先看完主要的数据结构定义等),对于各模块代码粗略看看就可以了,重点应该放在你所要研究的那个方向。要知道,一个人掌握全部Linux内核源代码是很困难的!

你可能感兴趣的:(Linux源代码目录树结构)