linux内核下载地址:www.kernel.org
目录结构:
arch目录:
存放体系结构相关的代码
ARM架构CPU的所有文件都在arch/arm目录下,而x86架构CPU的所有文件则
在arch/x86下。
ARM - Advanced RISC Machine,进阶精简指令集机器。是一种32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。
x86 - x86或80x86是英特尔首先开发制造的一种微处理器体系结构的泛称。x86是一种复杂指令集(CISC)处理器架构。
MIPS- Microprocessor without interlocked piped stages,*无内部互锁流水级的微处理器(-说是Million Instruction Per Second,每秒执行百万条指令)。MIPS是世界上很流行的一种精简指令集(RISC)处理器。
PowerPC- PowerPC 是一种精简指令集(RISC)架构的中央处理器(CPU),其特点是可伸缩性好、方便灵活。
RISC的基本思想是通过减少指令总数和简化指令功能来降低硬件设计的复杂度,使指令能单周期执行,并通过优化编译提高指令的执行速度,采用硬布线控制逻辑优化编译程序。RISC在20世纪70年代未开始兴起,导致机器的指令系统进一步精炼而简单,
CISC的基本思想是进一步增强原有指令的功能,用更为复杂的新指令取代原先由软件子程序完成的功能,实现软件功能的硬化。这样导致机器的指令系统越来越庞大、复杂。事实上,目前使用的绝大多数计算机都属于CISC类型,
arch/arm目录
以mach-开头的目录,代表的是相应的开发板,存放的是与开发板相关的代码而与具体开发板无关的、属于ARM处理器共性的部分则放置在其它目录中
arch目录-configs目录
arch/xxx/configs文件夹中有许多命名为xxx defconfig的配置文件,如果运行make xxx defconfig,当前.config文件会由xxx defconfig文件生成。
arch目录- dts目录
arch/xxx/boot/dts文件夹中存放的是设备树相关文件。
block目录
block目录存放的是块设备相关的代码。最初block层代码一部分位于drivers目录、一部分位于fs目录。从2.6.15开始,block层的核心代码就被提取出来放在顶层的block目录中。
certs目录
certs目录中存放的认证与签名相关代码
crypto目录
crypto文件夹中存放的是内核本身所用的加密API,其中包括了常用的加密和散列算法,还有一些压缩和CRC校验算法。
Documentation目录
Documentation目录中存放的是内核(帮助)文档。其中包括了内核中常用的协议规范功能模块等相关代码。在研发中遇到了问题,尤其是一些较为疑难的,可以尝试在此目录中寻找解决方案或线索。
drivers目录
drivers目录中存放的是设备驱动相关代码。此目录是内核中最庞大的一个目录,也是开发
人员打交道最多的目录。Linux支持的外围设备或总线的驱动程序都可以在这里找到。
块设备驱动
drivers/block/
字符设备驱动
drivers/char/
网络设备驱动
drivers/net/
LED驱动
drivers/leds/
键盘驱动
drivers/input/keyboard/
触摸屏驱动
drivers/input/touchscreen
串口驱动
drivers/serial/
USB驱动
drivers/usb/
实时时钟驱动
drivers/rtc/
i2c驱动
drivers/i2c/
spi驱动
drivers/spi/
pci驱动
drivers/pci/
Flash驱动
drivers/mtd/
SD/MMC卡驱动
drivers/mmc/
蓝牙底层驱动
drivers/bluetooth/
显示相关驱动
drivers/video/、drivers/g
近场通信驱动
drivers/nfc/
GPIO驱动
drivers/gpio/
fs目录
fs目录中存放的是各种文件系统的实现代码。Linux支持的所有文件系统在fs目录下面都有一个对应的子目录,公用的源程序则用于实现虚拟文件系统。
include目录
include目录中存放的是内核所需要的头文件。与平台无关的头文件在include/linux子目录下,与平台相关的头文件则放在相应的子目录中。
init月录
init目录中存放的是内核的初始化代码。包括main.c、创建早期用户空间的代码以及其它初始化代码。
ipc目录
ipc目录中存放的是进程间通信的相关代码。它包含了共享内存、消息队列、信号量等各种进程间通信机制的实现。
kernel目录
kernel目录中存放的是内核中最核心部分的代码,包括进程的调度、进程的创建和删除等。与平台相关的另外一部分核心代码在arch/*/kernel目录下。
lib目录
lib目录中存放的是核心的库代码(内核中会用到的库)。实现了一个标准C库的通用子集,包括字符串和内存操作的函数(strlen、mmcpy等)以及有关sprintf和atoi系列函数。与处理器结构相关库代码被放在arch/*/lib下。
LICENSES目录
LICENSES目录中存放的是内核中使用的开源许可协议相关协议文本。Linux内核根据LICENSES/preferred/GPL-2.0中提供的GNU通用公共许可证版本2(GPL-2.0)的条款提供,并在LICENSES/exceptions/Linux-syscall-note中显式描述了例外的系统调用。
mm目录
mm目录中存放的是内存管理相关代码。更准确地说是内存管理中与体系结构无关的部分(与体系结构相关的内存管理代码位于arch/*/mm/下)
net目录
net目录中存放的是网络协议的相关代码。实现了各种常见的网络协议如IPv4、IPv6等
samples目录
samples目录中存放的是Linux内核参考示例代码,即一些内核编程的范例。
scripts目录
scripts目录中存放的是内核编译、配置的相关脚本。当运行make menuconfig或者make xconfig之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。
security目录
security目录中存放的是安全框架相关代码。包含了不同的Linux安全模型代码,对计算机免于受到病毒和黑客的侵害十分重要
sound目录
sound目录中存放的是音频系统相关代码。包含了音频设备的驱动程序以及其他声音相关的源码。
为什么Linux的音频驱动位于sound目录下而不是drivers/sound?
早期的2.4内核所有的音频驱动和其他驱动一样都是位于drivers自录下的drivers/sound.
到了2.5开发版内核,所有的音频驱动包括音频框架代码由drivers/sound移到了sound目录下。具体来说,是在Linux内核正式引入ALSA音频构架的时候,所有的代码都被移动到了sound目录下
tools目录
tools目录中存放的是和内核交互的工具
usr目录
usr目录中存放的是用于打包和压缩的cpio等命令的源码。这个文件夹中的代码在内核编译完成后创建这些命令文件。
cpio命令用于制作根文件系统,是一个用户程序。
virt目录
virt目录中存放的是虚拟化代码,用于实现内核虚拟机。通过虚拟化,客户机操作系统就像任何其它运行在Linux主机的应用程序一样运行。
其他文件
ICOPYING文件
COPYING文件中存放的是许可和授权信息。
ICREDITS文件
CREDITS文件中存放的是贡献者列表。
Kbuild文件
Kbuild文件是一个配置一些内核设定的脚本。
Kconfig文件
Kconfig脚本在开发人员配置内核时会用到。
Makefile文件
编译所需的文件Makefile是编译内核的主要文件。这个文件将编译参数、和必要的信息传给编译器:
MAINTAINERS文件
MAINTAINERS文件中存放的是目前维护者的列表,包括维护者的电子邮件地址、主页以及他们负责开发和维护的内核的特定部分或文件。当一个开发者进行问题报告以及代码提交时,这是很有用的。
README文件
README文件提供给开发者其想要了解的如何编译内核的信息。