linux内核编程--0内核源码目录(3.0.1版本)

一、  官网下载的3.0.1内核源码解压


说明:之所有选择3.0.1内核版本源码,是因为其相对于2.6.24及后续2.6版本比较新,而相对于最新的内核版本源码(4.16)也不算太古老。Linux内核以稳定闻名,因而选择中间3.0第一个版本进行分析,后续内核代码更新也与此版本差异不大,读者可以基于此目录分析自行查阅。

二、  Linux内核源码目录

普通文件

.gitignore

git的版本管理文件。我们都知道Linux内核源码托管在github中,此文件告诉git进行版本管理时哪些文件不需要添加到版本管理中,哪些文件需要添加到版本管理中。这里补充git的过滤与包含规则:

过滤:

           *.elf                                      #表示进行版本管理时过滤掉所有.elf文件

包含:

         !.gitignore                                    #表示进行版本管理时包含. gitignore文件(以感叹号开头)

有关kernel源码版本管理的规则,大家可以自行阅读此文件。

.mailmap

邮箱地址映射文件,将一些比较“混乱”的kernel作者名映射到具体的邮件地址,具体文件内容如下所示:

Aaron Durbin <[email protected]>

Adam Oldham <[email protected]>

Adam Radford <[email protected]>

COPYING

kernel源码版权申明文件。

CREDITS

kernel源码捐赠者名单,按照N(name)、E(email)、W(web-address)、P(PGP key IDand fingerprint、D(description)、S(snail-mail address)建立目录项,方便使用grep或其他脚本进行处理;

Kbuild

内核顶层编译文件,具体做如下三件事:

→ 产生bounds.h头文件;

→ 产生asm_offset.s.h头文件;

→ 检测当前架构缺少的系统调用。

Kconfig

内核源码顶层配置文件,编译内核源码时用到,用于搜索各个子目录下的Kconfig文件;

MAINTAINERS

内核维护人员名单以及指导如何提交内核代码;

Makefile

内核顶层编译makefile文件。

README-----最重要

关于Linux内核的介绍,包括如何编译、安装内核以及出错后的解决方案

REPORTING-BUGS

指导如何报告内核BUG。

目录

arch

内核源码中与处理器架构相关的代码。如不同的处理器架构(x86、mips、powerpc)有不同的boot引导方式(原理大致相同,细节有些差异);

block

块设备驱动程序I/O调度;

crypto

常用加解密和散列算法(如AES,SHA等),还有一些压缩和CRC校验算法。

Documentation---------重要,有关内核源码介绍第一手资料

内核源码介绍性的文档以及少量的测试代码。

drivers

内核源码中所有设备驱动程序,由于基于Linux开发的设备形态很多,此部分代码占据内核源码的绝大部分。

firmware

固件代码。一般不用(4.14源码中此目录已没有任何代码),介绍如下:

Thatrepository contains all these firmware images which have been extracted fromolder drivers, as well various new firmware images which we were neverpermitted to include in a GPL'd work, but which we _have_ been permitted toredistribute under separate cover.

意思是说:此目录包含所有那些从老的驱动代码中提取出来的固件映像和没被GPL授权的固件映像,但是它们被许可在独立的目录中发布。

fs

文件系统代码,如ntfs、ext2、ext3等。大家或许了解,Linux内核通过VFS(virtualfile systems)隐藏各个具体文件的系统的细节,此目录即包含各个具体文件系统的代码。

include

Linux内核公共头文件存放的位置。

init

内核启动入口代码-----start_kernel等。设备从上电 → boot-loader引导 → 内核加载与解压之后就到达此处;

ipc

Linux内核支持的各种进程间通信(IPC,Inter-Process communication)源码,典型的有System V和Posix两种进程间通信方式。

kernel

kernel就是内核,内核中最核心的部分,包括进程的调度(sched.c)、进程PID管理(pid.c)、cgroups、进程的创建和撤销(fork.c和exit.c)等;

lib

内核标准的算法与数据结构库,如双向链表、红黑树(rbtree.c)、位图(bitmap.c)等;

mm

内核内存管理(memory management)子系统源码。

net

内核网络协议栈代码,包含各种协议类型,如unix域、tcp/udp、ethernet等;

samples

内核调试的一些例子,如KDB、tracepoint等;

scripts

一些实用的脚本,如之前所述的Kbuild文件就会调用此目录下的checksyscalls.sh脚本进行系统调用检查;

security

内核与安全相关的代码,对计算机免于受到病毒和黑客的侵害很重要;

sound

ALSA、OSS等音频设备的驱动核心代码;

tools

一些实用的测试工具程序,如测试USB、电源控制等。

usr

用于压缩和打包的CPIO程序。

virt

此文件夹包含了内核虚拟化代码,如KVM(Kernel-basedVirtual Machine),它允许用户一次运行多个操作系统。通过虚拟化,客户机操作系统就像任何其他运行在Linux主机的应用程序一样运行。


猜你喜欢

转载自blog.csdn.net/zhaogang1993/article/details/80106410