内核源码目录结构【转】

浏览内核代码之前,有必要知道内核源码的整体分布情况,按照惯例,内核代码安装在/usr/src/linux目录下,该目录下的每一个子目录都代表了一个特定的内核功能性子集,下面针对2.6.23版本进行简单描述。

(1)Documentation。

这个目录下面没有内核代码,只有很多质量参差不齐的文档,但往往能够给我们提供很多的帮助。

(2)arch。

所有与体系结构相关的代码都在这个目录以及include/asm-*/目录中,Linux支持的每种体系结构在arch目录下都有对应的子目录,而在每个体系结构特有的子目录下又至少包含3个子目录。

kernel:存放支持体系结构特有的诸如信号量处理和SMP之类特征的实现。

lib:存放体系结构特有的对诸如strlen和memcpy之类的通用函数的实现。

mm:存放体系结构特有的内存管理程序的实现。

除了这3个子目录之外,大多数体系结构在必要的情况下还有一个boot子目录,包含了在这种硬件平台上启动内核所使用的部分或全部平台特有代码。

此外,大部分体系结构所特有的子目录还根据需要包含了供附加特性使用的其他子目录。比如,i386目录包含一个math-emu子目录,其中包括了在缺少数学协处理器(FPU)的CPU上运行模拟FPU的代码。

(3)drivers。

这个目录是内核中最庞大的一个目录,显卡、网卡、SCSI适配器、PCI总线、USB总线和其他任何Linux支持的外围设备或总线的驱动程序都可以在这里找到。

(4)fs。

虚拟文件系统(VFS,Virtual File System)的代码,和各个不同文件系统的代码都在这个目录中。Linux支持的所有文件系统在fs目录下面都有一个对应的子目录。比如ext2文件系统对应的是fs/ext2目录。

一个文件系统是存储设备和需要访问存储设备的进程之间的媒介。存储设备可能是本地的物理上可访问的,比如硬盘或CD-ROM驱动器,它们分别使用ext2/ext3和isofs文件系统;也可能是通过网络访问的,使用NFS文件系统。

还有一些虚拟文件系统,比如proc,它以一个标准文件系统出现,然而,它其中的文件只存在于内存中,并不占用磁盘空间。

(5)include。

这个目录包含了内核中大部分的头文件,它们按照下面的子目录进行分组。

include/asm-*/,这样的子目录有多个,每一个都对应着一个arch的子目录,比如include/asm-alpha、include/asm-arm、include/asm-i386等。每个子目录中的文件都定义了支持给定体系结构所必须的预处理器宏和内联函数,这些内联函数多数都是全部或部分使用汇编语言实现的。

编译内核时,系统会建立一个从include/asm目录到目标体系结构特有的目录的符号链接。比如对于arm平台,就是include/asm-arm到include/asm的符号链接。因此,体系结构无关部分的内核代码可以使用如下形式包含体系相关部分的头文件。

#include <asm/some-file> 
include/linux/,与平台无关的头文件都在这个目录下面,它通常会被链接到目录/usr/include/linux(或者它里面的所有文件会被复制到/usr/include/linux目录下面)。因此用户应用程序里和内核代码里的语句:

#include <linux/some-file> 
包含的头文件的内容是一致的。

include目录下的其他子目录,在此不做赘述。

(6)init。

内核的初始化代码。包括main.c、创建早期用户空间的代码以及其他初始化代码。

(7)ipc。

IPC,即进程间通信(interprocess communication)。它包含了共享内存、信号量以及其他形式IPC的代码。

(8)kernel。

内核中最核心的部分,包括进程的调度(kernel/sched.c),以及进程的创建和撤销(kernel/fork.c和kernel/exit.c)等,和平台相关的另外一部分核心的代码在arch/*/kernel目录。

(9)lib。

库代码,实现了一个标准C库的通用子集,包括字符串和内存操作的函数(strlen、mmcpy和其他类似的函数)以及有关sprintf和atoi的系列函数。与arch/lib下的代码不同,这里的库代码都是使用C编写的,在内核新的移植版本中可以直接使用。

(10)mm。

包含了体系结构无关部分的内存管理代码,体系相关的部分位于arch/*/mm目录下。

(11)net。

网络相关代码,实现了各种常见的网络协议,如TCP/IP、IPX等。

(12)scripts。

该目录下没有内核代码,只包含了用来配置内核的脚本文件。当运行make menuconfig或者make xconfig之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。

(13)block。

block层的实现。最初block层的代码一部分位于drivers目录,一部分位于fs目录,从2.6.15开始,block层的核心代码被提取出来放在了顶层的block目录。

(14)crypto。

内核本身所用的加密API,实现了常用的加密和散列算法,还有一些压缩和CRC校验算法。

(15)security。

这个目录包括了不同的Linux安全模型的代码,比如NSA Security-Enhanced Linux。

(16)sound。

声卡驱动以及其他声音相关的代码。

(17)usr。

实现了用于打包和压缩的的cpio等。

转自:http://blog.csdn.net/wike163/article/details/6336474

时间: 2024-10-02 03:37:04

内核源码目录结构【转】的相关文章

内核源码目录结构

浏览内核代码之前,有必要知道内核源码的整体分布情况,按照惯例,内核代码安装在/usr/src/linux目录下,该目录下的每一个子目录都代表了一个特定的内核功能性子集,下面针对2.6.23版本进行简单描述. (1)Documentation. 这个目录下面没有内核代码,只有很多质量参差不齐的文档,但往往能够给我们提供很多的帮助. (2)arch. 所有与体系结构相关的代码都在这个目录以及include/asm-*/目录中,Linux支持的每种体系结构在arch目录下都有对应的子目录,而在每个体系

2.15.1.linux内核源码目录结构1

2.15.1.1.源码从哪里来 (1)之前讲过,我们使用2.6.35.7版本的内核.这个版本的内核有三种:第一种是kernel.org上的官方版本,第二种是三星移植过的,第三种是九鼎X210的移植版本.我们讲课时使用第三种内核来讲解,后面的移植实验使用第二种内核来移植. (2)源码在开发板光盘中有.可以自己去linux下解压然后make distclean清理然后再次打包传输到windows下去解压分析:也可以直接去我网盘中下载我打包好的. (3)解压后最终在windows下得到了一个kerne

2.15.2.linux内核源码目录结构2

本节接上节讲解内核源码根目录下的各个文件夹,并且把一些重要文件夹的作用简单讲解. (1)arch.arch是architecture的缩写,意思是架构.arch目录下是好多个不同架构的CPU的子目录,譬如arm这种cpu的所有文件都在arch/arm目录下,X86的CPU的所有文件都在arch/x86目录下. (2)block.英文是块的意思,在linux中block表示块设备(以块(多个字节组成的整体,类似于扇区)为单位来整体访问),譬如说SD卡.iNand.Nand.硬盘等都是块设备.你几乎

linux-3.0.35 内核源码目录结构

1 arch 包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如arm, x86, mips 2 block 块设备驱动程序I/O 调度 3 crypto 常用加密和散列算法,如sha1, aes,还有一些压缩和CRC校验算法,如crc32 4 Documentation 内核各部分的通用解释和注释 5 drivers 设备驱动程序,每个不同的驱动占用一个子目录,如spi等 6 Firmware 由硬件厂商提供的设备固件程序 7 fs 支持的各种文件系统,如ext3, nfs 8 inc

chromium浏览器开发系列第三篇:chromium源码目录结构

上两篇介绍了下载源码和编译源码,这次主要介绍chromium的源码目录结构,我也是通过源码和官网结合来跟大家说,如果有说的不准确的,欢迎交流. 另外,官网的不一定准确,他们其实也很懒,所以最主要还是靠自己.官网只能作为一个参考. Chromium结构相对两年前变化很大.目录结构依然很清晰,主要有三个部分(不包括其他的库):浏览器,渲染器,webkit.浏览器是主要的进程,代表所有的UI和I / O.渲染通常是每个tab页的子过程,是由浏览器驱动.Webkit做布局和渲染. 简单介绍解决方案文件:

转:《Linux设备驱动程序3》源码目录结构和源码分析经典链接

转自:http://blog.csdn.net/geng823/article/details/37567557 [原创][专栏]<Linux设备驱动程序>--- LDD3源码目录结构和源码分析经典链接 [专栏]Linux设备驱动程序学习(总目录) [专栏]LDD3源码分析链接(总目录) 1. LDD3源码分析之hello.c与Makefile模板 2. LDD3源码分析之字符设备驱动程序 其他错误: 我的Linux内核为 3.2.0-65-generic-pae,在scull目录下make时

Swift的源码目录结构 其中proxy是前端的业务接入进程

Swift的源码目录结构.其中proxy是前端的业务接入进程.account.container和object目录分别是账户.容器 和对象的业务处理逻辑进程.common目录是一些通用工具代码.common中比较重要的有:哈希环的处理逻辑.接下来会依次介绍各个进程的源码逻辑和 一些关键点机制. 各个业务进程或模块之间的逻辑关系可以参考文中的架构图. 二.Proxy进程的业务处理 首先需要掌握基于PasteDeploy的堆栈式WSGI架构.根据PasteDeploy定义的各个层,可以很快理清配置文

Mysql源码目录结构

Programs for handling SQL commands. The "core" of MySQL. These are the .c and .cc files in the sql directory: derror.cc --- read language-dependent message file des_key_file.cc --- load DES keys from plaintext file discover.cc --- Functions for

跟厂长学PHP内核(三):源码目录结构

上篇文章我们已经介绍了源码分析工具的安装.配置以及调试方法,本文我们来讲述一下PHP源码的目录结构. 一.目录概览 以php-7.0.12为例,看过源码的同学们应该发现源码目录多达十多个,下面是每个目录的说明. 目录 说明 TSRM 线程相关安全的实现 Zend PHP解析器的核心实现 build linux下编译相关的目录 ext PHP的扩展 main PHP的主要代码 netware 网络目录,socket的定义与实现 pear PHP扩展及应用的代码仓库 sapi PHP的应用层接口 s