linux学习笔记linux内核6.0.2目录结构(代码片段)

坐望云起 坐望云起     2023-03-26     738

关键词:

一、linux内核目录

arch

包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、arm64、powerpc、mips等。Linux内核目前已经支持30种左右的体系结构。在arch目录下,存放的是各个平台以及各个平台的芯片对Linux内核进程调度、内存管理、中断等的支持,以及每个具体的SoC和电路板的板级支持代码。

block

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

certs

使系统密钥环依赖于内置的 x509 解析器

crypto

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

documentation

内核各部分的通用解释和注释。

drivers

设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c等。

fs

所支持的各种文件系统,如EXT、FAT、NTFS、JFFS2等。

include

头文件,与系统相关的头文件放置在include/linux子目录下。

init

内核初始化代码。著名的start_kernel()就位于init/main.c文件中。

io_uring

其中包含最新的Linux IO接口io_uring,以及epoll等等

ipc

进程间通信的代码。

kernel

内核最核心的部分,包括进程调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel目录下。

lib

库文件代码。

mm

内存管理代码,和平台相关的一部分代码放在arch/*/mm目录下。

net

网络相关代码,实现各种常见的网络协议。

Rust

Linux 内核中集成的第二语言。

samples

此文件夹包含了程序示例和正在编写中的模块代码。假设一个新的模块引入了一个想要的有用功能,但没有程序员说它已经可以正常运行在内核上。那么,这些模块就会移到这里。这给了新内核程序员一个机会通过这个文件夹来获得帮助,或者选择一个他们想要协助开发的模块。

scripts

用于配置内核的脚本文件。

security

主要是一个SELinux的模块。

sound

ALSA、OSS音频设备的驱动核心代码和常用设备驱动。

tools

这个文件夹中包含了和内核交互的工具。

usr

还记得在以前的文章中提到vmlinuz和其他类似的文件么?这个文件夹中的代码在内核编译完成后创建这些文件。----该目录中的代码为内核尚未完全启动时执行用户空间代码提供了支持

virt

此文件夹包含了虚拟化代码,它允许用户一次运行多个操作系统。这与先前提到的Xen是不同的。通过虚拟化,客户机操作系统就像任何其他运行在Linux主机的应用程序一样运行。通过Xen这样的hypervisor(注:虚拟机管理程序),两个操作系统可以同时管理硬件。在虚拟化中,在客户机操作系统上运行在Linux内核上,而在hypervisor中,它没有客户系统并且所有的系统不互相依赖。

二、其它相关文件

  还有一些文件在源代码的根目录下。它们会在下面列出。

  COPYING --许可和授权信息。Linux内核在GPLv2许可证下授权。该许可证授予任何人有权免费去使用、修改、分发和共享源代码和编译代码。然而,没有人可以出售源代码。

  CREDITS -- 贡献者列表

  Kbuild -- 这是一个设置一些内核设定的脚本。打个比方,这个脚本设定一个ARCH变量,这是开发者想要生成的内核支持的处理器类型。

  Kconfig -- 这个脚本会在开发人员配置内核的时候用到,这会在以后的文章中讨论。

  MAINTAINERS -- 这是一个目前维护者列表,他们的电子邮件地址,主页,和他们负责开发和维护的内核的特定部分或文件。当一个开发者在内核中发现一个问题,并希望能够报告给能够处理这个问题的维护者时,这是是很有用的。

  Makefile -- This script is the main file that is used to compile the kernel. This file passes parameters to the compiler as well as the list of files to compile and any other necessary information. 这个脚本是编译内核的主要文件。这个文件将编译参数和编译所需的文件和必要的信息传给编译器。

  README -- 这个文档提供给开发者想要知道的如何编译内核的信息。

  REPORTING-BUGS -- 这个文档提供如何报告问题的信息。 

三、主要的二目录

1、ARCH目录

        该目录中每个子目录都与某种架构体系对应,用于存放系统结构相关代码,向平台无关的系统核心模块提供所需的功能接口。

        每个体系结构对应的子目录下通常至少包含以下几个子目录:    

        Kernel目录

        用于存放特定体系结构特有信号量的实现代码和对称多处理器(Symmetric MultiProccessing,简称SMP)相关模块。

        Lib目录

        用于存放以来依赖当前体系结构的辅助功能,如利用当前体系结构特性实现的strlen和memcpy内存操作函数;与通用的实现方法相比,他们的开销小、更加高效。 

        Mm目录

        用于存放体系架构特定的内存管理模块,包括内存的初始化、页表管理等内容。

        Boot目录

        该目录中包含了当前平台上系统引导过程使用的部分或全部代码。这部分代码以来当前平台,用于完成向系统内存装载内核镜像的工作。

alpha

Alpha 处理器最早由美国DEC 公司设计制造,在Compaq (康柏)公司收购DEC 之后,Alpha 处理器继续得到发展,并且应用于许多高档的Compaq 服务器上,HP (惠普)收购的Compaq ,Alpha 便为HP(惠普)所有,不过HP (惠普)已经放弃发展alpha 处理器。

arc

ARC架构处理器是Synopsys公司推出的32位RISC系列IP。ARC处理器的IP产品线覆盖了从低端到高端各个领域。据说ARC是除了ARM之外的全球第二大嵌入式处理器IP供应商。

arm

Arm 系列处理器 是英国Arm 公司设计的主流嵌入式32 位RISC 处理器,Arm 公司不直接生产Arm 处理器,而是采用IP 授权的方式由第3 方开发生产,著名的公司如Ti 、Samsung 等都有出品Arm 处理器。目前在手机领域广泛应用。

arm64

独立的文件夹,和arm文件夹区分开来了。

csky

C-SKY处理器架构是由杭州中天微系统有限公司(以下简称中天微)研发的具有自主知识产权的32位嵌入式CPU架构。采用此架构的处理器具有低功耗、高性能、高代码密度、易使用等特点。2018年4月,阿里巴巴集团全资收购中天微。

hexagon

Hexagon是高通公司设计的 VLIW DSP 架构。它在许多 Qualcomm 的 SoC 中用作音频、传感器或计算协处理器,并在许多 Qualcomm 调制解调器中使用。通常运行某种实时操作系统,针对低功耗和小芯片面积进行了优化。

ia64

IA-64(英特尔安腾架构)是64 位英特尔微处理器安腾家族的指令集架构(ISA) 。主要应用于服务器,而非个人PC。Ia64 处理器是美国英特尔开发的面向服务器应用的64 位处理器, 由于具有64 位寻址能力,它能够使用100 万TB 的地址空间,足以运算企业级或超大规模的数据库任务;64 位宽的寄存器可以使CPU 浮点运算达到非常高的精度。

loongarch

大名鼎鼎的龙芯。
m68k

M68k 处理器是美国 Motorola 公司开发的高性能处理器, 具有高性价比、高集成度等特点,在工业自动化设备、控制设备、医疗仪器系统、安全系统等领域多有应用。现在为Freescale 公司所有, 风头已不敌PowerPC 处理器。

microblaze

Microblaze 处理器是美国 Xilinx 公司提供的嵌入在其FPGA 芯片上的32 位RISC 软核。 它具有运算能力强、外围接口配置灵活等特点,集成在 FPGA之中,可以和FPGA 实现协同设计,具备软硬件可配置的灵活性。

mips

Mips 处理器 是由美国斯坦福大学Hennessy 教授领导的研究小组研制出来, 现为Mips 公司拥有,和Arm 处理器一样采用IP 授权的方式由第3 方开发生产。著名的公司如Broadcom 、Nxp 等都有出品Mips处理器。我国的龙芯CPU 也是采用Mips 体系结构。

nios2

Nios II是专为Altera系列现场可编程门阵列(FPGA) 集成电路设计的32 位嵌入式处理器架构。Nios II 对原始 Nios 架构进行了许多增强,使其更适用于更广泛的嵌入式计算应用,从数字信号处理(DSP) 到系统控制。Nios II 是 Altera于 2000 年推出的首款可配置16 位嵌入式处理器Nios的继任者。 

OpenRisc

OpenRisc是OpenCores组织提供的基于GPL协议的开放源代码的RISC(精简指令集计算机)处理器。有人认为其性能介于ARM7和ARM9之间,适合一般的嵌入式系统使用。最重要的一点是OpenCores组织提供了大量的开放源代码IP核供研究人员使用,因此对于一般的开发单位具有很大的吸引力。

parisc

Parisc 处理器是由 HP (惠普)开发设计的处理器,主要用于HP (惠普)公司的服务器中,目前HP(惠普)已经放弃 Parisc 处理器的开发,不过一些Parisc 处理器技术已经融合到ia64 处理器之中。

powerpc

Powerpc 处理器是由美国IBM 、Apple 、Motorola 联合开发的处理器,Powepc 处理器在IBM 的服务器、Apple 的MAC 电脑中都有应用。不过现在多应用在网络设备、视频系统、工业系统等领域。Sony PS3 游戏机Cell 处理器也是Powerpc 体系结构。

riscv

RISC-V(发音为“risk-5” :其中 5 是指加州大学伯克利分校自 1981 年以来开发的RISC 架构的代数)是一种开放标准指令集架构( ISA) 基于已建立的 RISC 原则。与大多数其他 ISA 设计不同,RISC-V 是根据开源许可提供的,使用时不需要付费。许多公司正在提供或已经宣布推出 RISC-V 硬件,提供支持 RISC-V 的开源操作系统,并且该指令集在多个流行的软件工具链中得到支持。

s390

S390 处理器是由美国IBM 开发的面向大型机应用的处理器 。

sh

Sh 处理器又称 SuperH 处理器 ,最先由日本 Hitachi 公司开发,后由 Hitachi 及 ST Microelectronics 两家公司共同开发,2003 年,瑞萨科技从 Hitachi 公司继承到拥有权。Sh 属于MCU 型的处理器。

sparc

Sparc 处理器是由美国SUN 和TI 公司共同开发的RISC 微处理器,最突出的特点就是它的可扩展性。SUN 公司将它做为高端处理器应用到服务器产品。

um

全名叫user mode,它不是一种实体的cpu架构,这个架构的linux内核可以像 hello world程序一样运行,运行于linux之上用户空间中,取名User Mode Linux,简写UM,AMD 和 英特尔 的电脑上都可以运行UM linux 内核。

x86

X86 处理器是由美国Intel 推出的 复杂指令集(cisc ) 处理器,广泛应用在PC 电脑领域和服务器领域,在工业控制领域也有应用。目前主要是Intel、AMD 、VIA 在开发x86 体系结构的处理器。

xtensa

Xtensa 处理器是由美国 Tensilica (泰思立达)公司开发的可配置及可扩展的微处理器

        如果对比以前的linux内核,这部分不是一直增加的,很多架构都被删掉了,从技术角度充分体现了市场的变化。

2、drivers目录

        许多驱动程序是通用驱动程序,这意味着一个通用键盘驱动可以使内核可以处理几乎所有的键盘。然而,有些驱动是专用驱动,像苹果和Commodore就分别为苹果电脑和Amiga系统制造了专门的硬件。Linux内核中已经包含了许多诸如智能手机、苹果、Amiga系统、PS3、Android平板,和许多其他设备的驱动程序。

        驱动程序是使内核能够沟通和操作硬件或协议(规则和标准)的程序。没有驱动程序,内核不知道如何与硬件沟通或者处理协议(内核实际上先发送指令给BIOS,然后BIOS传给硬件)。 Linux的内核代码在驱动程序文件夹中以源代码的形式包含了许多驱动程序。驱动文件夹中的每个文件夹会在下面说明,有助于在配置和编译内核时了解驱动程序。否则,用户可能会在编译时加入不必要的或者漏掉重要的驱动。驱动代码通常会包含一个单行注释来指出驱动的目的。 比如,tc的驱动代码,有一行的注释说是用于TURBOchannel总线。由于这些文档,用户应该看驱动前几行的注释来了解它们的用途。

  注意有些设备的驱动不在本目录中。比如,射频驱动在net和media文件夹下。

accessibility这些驱动提供支持一些辅助设备。在Linux 3.9.4中,这个文件夹中只有一个驱动就是盲文设备驱动。
acpi高级配置和电源接口(ACPI : Advanced Configuration and Power Interface)驱动用来管理电源使用。
amba

高级微控制器总线架构(AMBA : Advanced Microcontroller Bus Architecture)是与片上系统(SoC)的管理和互连的协议。SoC是一块包含许多或所有必要的计算机组件的芯片。这里的AMBA驱动让内核能够运行在这上面。  

androidBinder 在 Android 中用于进程之间的通信和远程方法调用。
ata

该目录包含PATA和SATA设备的驱动程序。串行ATA(SATA)是一种连接主机总线适配器到像硬盘那样的存储器的计算机总线接口。并行ATA(PATA)用于连接存储设备,如硬盘驱动器,软盘驱动器,光盘驱动器的标准。PATA就是我们所说的IDE。

atm异步通信模式(ATM : Asynchronous Transfer Mode)是一种通信标准。这里有各种接到PCI桥的驱动(他们连接到PCI总线)和以太网控制器(控制以太网通信的集成电路芯片)。
auxdisplay

这个文件夹提供了三个驱动。LCD 帧缓存(framebuffer)驱动、LCD控制器驱动和一个LCD驱动。这些驱动用于管理液晶显示器 —— 液晶显示器会在按压时显示波纹。注意:按压会损害屏幕,所以请不要用力戳LCD显示屏。  

base

这是个重要的目录包含了固件、系统总线、虚拟化能力等基本的驱动。  

bcma

这些驱动用于使用基于AMBA协议的总线。AMBA是由博通公司开发。

  

block这些驱动提供对块设备的支持,像软驱、SCSI磁带、TCP网络块设备等等。
bluetooth蓝牙是一种安全的无线个人区域网络标准(PANs)。蓝牙驱动就在这个文件夹,它允许系统使用各种蓝牙设备。例如,一个蓝牙鼠标不用电缆,并且计算机有一个电子狗(小型USB接收器)。Linux系统必须能够知道进入电子狗的信号,否则蓝牙设备无法工作。
bus这个目录包含了三个驱动。一个转换ocp接口协议到scp协议。一个是设备间的互联驱动,第三个是用于处理互联中的错误处理。
cdrom这个目录包含两个驱动。一个是cd-rom,包括DVD和CD的读写。第二个是gd-rom(只读GB光盘),GD光盘是1.2GB容量的光盘,这像一个更大的CD或者更小的DVD。GD通常用于世嘉游戏机中。
char

字符设备驱动就在这里。字符设备每次传输数据传输一个字符。这个文件夹里的驱动包括打印机、PS3闪存驱动、

东芝SMM驱动和随机数发生器驱动等。

clk

这些驱动用于系统时钟。

clocksource

这些驱动用于作为定时器的时钟。

comedi应该是数据采集设备相关的驱动。
connector这些驱动使内核知道当进程fork并使用proc连接器更改UID(用户ID)、GID(组ID)和SID(会话ID)。内核需要知道什么时候进程fork(CPU中运行多个任务)并执行。否则,内核可能会低效管理资源。
counter计数器设备在各行各业中很普遍。这些设备的普遍存在需要一个通用的接口和交互和暴露的标准。此驱动程序 API 尝试通过引入通用计数器接口来解决在现有计数器设备驱动程序中发现的重复代码问题。通用计数器接口使驱动程序能够支持和公开计数器设备中存在的一组通用组件和功能。
cpufreq

这些驱动改变CPU的电源能耗。  

cpuidle

这些驱动用来管理空闲的CPU。一些系统使用多个CPU,其中一个驱动可以让这些CPU负载相当。

crypto这些驱动提供加密功能。
cxlCXL (Compute Express Link) Devices Support,CXL 是一种与 PCI Express 电气兼容的总线,但在该信令上分层三层协议(CXL.io、CXL.cache 和CXL.mem)。
dax直接访问差异化内存,通过支持 mmap(2) 的字符设备支持对差异化(持久性、带宽、延迟...)内存的原始访问。
dca直接缓存访问(DCA : Direct Cache Access)驱动允许内核访问CPU缓存。CPU缓存就像CPU内置的RAM。CPU缓存的速度比RAM更快。然而,CPU缓存的容量比RAM小得多。CPU在这个缓存系统上存储了最重要的和执行的代码。
devfreq这个驱动程序提供了一个通用的动态电压和频率调整(DVFS : Generic Dynamic Voltage and Frequency Scaling)框架,可以根据需要改变CPU频率来节约能源。这就是所谓的CPU节能。
dio

数字输入/输出(DIO :Digital Input/Output)总线驱动允许内核可以使用DIO总线。

dma直接内存访问(DMA)驱动允许设备无需CPU直接访问内存。这减少了CPU的负载。
dma-buf同步文件框架通过用户空间添加了显式同步。 它允许通过同步文件 fds 向/从用户空间发送/接收“struct dma_fence”对象,以便通过用户空间组件在驱动程序之间进行同步。 它是从安卓移植过来的。第一个也是主要的用户是其中围栏与缓冲区相关联的图形。 当一个作业被提交到 GPU 时,一个栅栏被附加到缓冲区并通过用户空间传输,例如使用同步文件 fds 到 DRM 驱动程序。 更多详细信息,请参见 Documentation/driver-api/sync_file.rst。
edac错误检测和校正( Error Detection And Correction)驱动帮助减少和纠正错误。
eisa扩展工业标准结构总线(Extended Industry Standard Architecture)驱动提供内核对EISA总线的支持。
extcon外部连接器(EXTernal CONnectors)驱动用于检测设备插入时的变化。例如,extcon会检测用户是否插入了USB驱动器。
firewire这些驱动用于控制苹果制造的类似于USB的火线设备。
firmware这些驱动用于和像BIOS(计算机的基本输入输出系统固件)这样的设备的固件通信。BIOS用于启动操作系统和控制硬件与设备的固件。一些BIOS允许用户超频CPU。超频是使CPU运行在一个更快的速度。CPU速度以MHz(百万赫兹)或GHz衡量。一个3.7 GHz的CPU的的速度明显快于一个700Mhz的处理器。
fpga

如果您想支持从内核配置 FPGA。 FPGA 框架添加了 FPGA 管理器类和 FPGA 管理器驱动程序。        

fsi

FRU 支持接口 - 是一种简单的总线,用于对基于 POWER 的硬件进行低级访问。        

gnss如果您有 GNSS 接收器(例如 GPS 接收器)。
gpio通用输入/输出(GPIO :General Purpose Input/Output)是可由用户控制行为的芯片的管脚。这里的驱动就是控制GPIO。
gpu这些驱动控制VGA、GPU和直接渲染管理(DRM :Direct Rendering Manager )。VGA是640*480的模拟计算机显示器或是简化的分辨率标准。GPU是图形处理器。DRM是一个Unix渲染系统。
greybus此选项启用 Greybus 驱动程序核心。 Greybus 是一种硬件协议,旨在为 Unipro 提供一个健全的应用层。 它最初是为 ARA 项目设计的,一个模块电话系统,但已经出现在其他电话中,并且可以通过其他总线隧道来控制硬件设备。
hid

这驱动用于对USB人机界面设备的支持。

hsi这个驱动用于内核访问像Nokia N900这样的蜂窝式调制解调器
hte硬件时间戳引擎 (HTE) 支持。一些设备提供了一个硬件时间戳引擎,可以实时对某些设备线路/信号进行时间戳。 它为需要准确时间戳事件且抖动较少的应用程序带来了好处。 该框架为此类 HTE 提供者和消费者设备提供了通用接口。
hv这个驱动用于提供Linux中的键值对(KVP :Key Value Pair)功能。
hwmon硬件监控驱动用于内核读取硬件传感器上的信息。比如,CPU上有个温度传感器。那么内核就可以追踪温度的变化并相应地调节风扇的速度。
hwspinlock

硬件转锁驱动允许系统同时使用两个或者更多的处理器,或使用一个处理器上的两个或更多的核心。        

hwtracing硬件跟踪支持
i2cI2C驱动可以使计算机用I2C协议处理主板上的低速外设。系统管理总线(SMBus :System Management Bus)驱动管理SMBus,这是一种用于轻量级通信的two-wire总线。
i3cI3C 是 MIPI 联盟标准化的串行协议。它应该与 I2C 向后兼容,同时提供对高速传输的支持和本地中断支持,而无需额外的引脚。I3C 协议还对从设备类型进行了标准化,主要用于与传感器通信。
idle这个驱动用来管理Intel处理器的空闲功能。
iio工业I/O核心驱动程序用来处理数模转换器或模数转换器。
infinibandInfiniband是在企业数据中心和一些超级计算机中使用的一种高性能的端口。这个目录中的驱动用来支持Infiniband硬件。
input这里包含了很多驱动,这些驱动都用于输入处理,包括游戏杆、鼠标、键盘、游戏端口(旧式的游戏杆接口)、遥控器、触控、耳麦按钮和许多其他的驱动。如今的操纵杆使用USB端口,但是在上世纪80、90年代,操纵杆是插在游戏端口的。
interconnect支持片上互连的管理。该框架旨在提供一个通用接口来管理 SoC 中的互连。
iommu输入/输出内存管理单元(IOMMU :Input/Output Memory Management Unit)驱动用来管理内存管理单元中的IOMMU。IOMMU连接DMA IO总线到内存上。IOMMU是设备在没有CPU帮助下直接访问内存的桥梁。这有助于减少处理器的负载。
ipackIpack代表的是IndustryPack。 这个驱动是一个虚拟总线,允许在载体和夹板之间操作。
irqchip这些驱动程序允许硬件的中断请求(IRQ)发送到处理器,暂时挂起一个正在运行的程序而去运行一个特殊的程序(称为一个中断处理程序)。
isdn这些驱动用于支持综合业务数字网(ISDN),这是用于同步数字传输语音、视频、数据和其他网络服务使用传统电话网络的电路的通信标准。
leds用于LED的驱动。
macintosh苹果设备的驱动在这个文件夹里。
mailbox这个文件夹(pl320-pci)中的驱动用于管理邮箱系统的连接。
mcbMCB(MEN Chameleon Bus)是一种特定于 MEN Mikroelektronik FPGA 设备的总线。 它用于识别 FPGA 中基于 MCB 的 IP 核,并为实例化这些设备的驱动程序提供必要的框架。
md多设备驱动用于支持磁盘阵列,一种多块硬盘间共享或复制数据的系统。
media媒体驱动提供了对收音机、调谐器、视频捕捉卡、DVB标准的数字电视等等的支持。驱动还提供了对不同通过USB或火线端口插入的多媒体设备的支持。
memory

支持内存的重要驱动。

memstick这个驱动用于支持Sony记忆棒。
message这些驱动用于运行LSI Fusion MPT(一种消息传递技术)固件的LSI PCI芯片/适配器。LSI大规模集成,这代表每片芯片上集成了几万晶体管、
mfd

多用途设备(MFD)驱动提供了对可以提供诸如电子邮件、传真、复印机、扫描仪、打印机功能的多用途设备的支持。这里的驱动还给MFD设备提供了一个通用多媒体通信端口(MCP)层。

misc

这个目录包含了不适合在其他目录的各种驱动。就像光线传感器驱动。

mmcMMC卡驱动用于处理用于MMC标准的闪存卡。
most该驱动程序至少需要一个额外的组件来启用来自用户空间的所需访问(例如字符设备),并且需要一个与网络控制器的硬件接口(例如 USB)相匹配的组件。
如果您想通过 USB 连接到网络收发器。
mtd内存技术设备(MTD :Memory technology devices)驱动程序用于Linux和闪存的交互,这就就像一层闪存转换层。其他块设备和字符设备的驱动程序不会以闪存设备的操作方式来做映射。尽管USB记忆卡和SD卡是闪存设备,但它们不使用这个驱动,因为他们隐藏在系统的块设备接口后。这个驱动用于新型闪存设备的通用闪存驱动器驱动。
mux多路复用器设备 MUX_ADG792A、MUX_ADGS1408、MUX_GPIO、MUX_MMIO
net网络驱动提供像AppleTalk、TCP和其他的网络协议。这些驱动也提供对调制解调器、USB 2.0的网络设备、和射频设备的支持。
nfc这个驱动是德州仪器的共享传输层之间的接口和NCI核心。
ntb不透明的桥接驱动提供了在PCIe系统的不透明桥接。PCIe是一种高速扩展总线标准。
nubusNuBus是一种32位并行计算总线。用于支持苹果设备。
nvdimm对非易失性存储设备的通用支持,包括 ACPI-6-NFIT 定义的资源。 在定义 NFIT 或以其他方式可以发现 NVDIMM 资源的平台上,注册 libnvdimm 总线以通告 PMEM(持久内存)命名空间 (/dev/pmemX)。 PMEM 命名空间是指可能跨越多个 DIMM 并支持 DAX 的内存资源(请参阅 CONFIG_DAX)。
nvmeNVMe支持,NVMe标准的延时只有AHCI的一半不到。
nvmem支持 NVMEM(非易失性存储器)设备,如 EEPROM、EFUSES...
该框架旨在为来自 Linux 内核和用户空间的 NVMEM 提供通用接口。
of

此驱动程序提供设备树中创建、访问和解释程序的OF助手。设备树是一种数据结构,用于描述硬件。

oppSOC 有一组标准的元组,由设备将支持每个电压域的频率和电压对组成。 这称为操作性能点或 OPP。 OPP 的实际定义因同一器件系列中的硅而异。
parisc这些驱动用于HP生产的PA-RISC架构设备。PA-RISC是一种特殊指令集的处理器。
parport并口驱动提供了Linux下的并口支持。
pci这些驱动提供了PCI总线服务。
pcmcia这些是笔记本的pc卡驱动
peci平台环境控制接口 (PECI) 是一个接口,它为来自外部监控或控制设备的英特尔处理器和芯片组组件提供通信通道。
perf性能监视器支持
phy该框架旨在为内核中的 PHY 设备提供通用接口。 该层将具有通用 API,phy 驱动程序可以通过该 API 使用 phy 框架创建 PHY,并且 phy 用户可以获得对 PHY 的引用。 这个框架的所有用户都应该选择这个配置。
pinctrl这些驱动用来处理引脚控制设备。引脚控制器可以禁用或启用I/O设备。
platform这个文件夹包含了不同的计算机平台的驱动像Acer、Dell、Toshiba、IBM、Intel、Chrombooks等等。
pnp

即插即用驱动允许用户在插入一个像USB的设备后可以立即使用而不必手动配置设备。  

power电源驱动使内核可以测量电池电量,检测充电器和进行电源管理。
powercap功率上限 sysfs 接口允许内核子系统以一致的方式向用户空间公开功率上限设置。 通常,它由多种控制类型组成,这些控制类型确定可以公开哪些设置,以及代表系统中可能受到功率限制的部分的功率区域。
pps

Pulse-Per-Second驱动用来控制电流脉冲速率。这用于计时。  

ps3

这是Sony的游戏控制台驱动- PlayStation3。

ptp图片传输协议(PTP)驱动支持一种从数码相机中传输图片的协议。
pwm脉宽调制(PWM)驱动用于控制设备的电流脉冲。主要用于控制像CPU风扇。
rapidioRapidIO驱动用于管理RapidIO架构,它是一种高性能分组交换,用于电路板上交互芯片的交互技术,也用于互相使用底板的电路板。
ras可靠性、可用性和可维护性 (RAS) 是一个计算机硬件工程术语。 设计有更高级别 RAS 的计算机具有多种功能,可保护数据完整性并帮助它们长时间保持可用而不会出现故障。
regulator校准驱动用于校准电流、温度、或其他可能系统存在的校准硬件。----用于控制系统中某些设备的电压电流供应
remoteproc这些驱动用来管理远程处理器。
reset通用重置控制器支持。
该框架旨在通过 GPIO 或 SoC 内部复位控制器模块抽象设备复位处理。
rpmsg这个驱动用来控制支持大量驱动的远程处理器通讯总线(rpmsg)。这些总线提供消息传递设施,促进客户端驱动程序编写自己的连接协议消息。----该基础架构允许主处理器上的 Linux 操作系统管理远程处理器上远程软件环境的生命周期和通信-用于在 AMP 环境中的操作系统之间实现 IPC 的 rpmsg 组件和 API
rtc实时时钟(RTC)驱动使内核可以读取时钟。
s390用于31/32位的大型机架构的驱动。
sbus用于管理基于SPARC的总线驱动。
scsi允许内核使用SCSI标准外围设备。例如,Linux将在与SCSI硬件传输数据时使用SCSI驱动。
sh该驱动用于支持SuperHway总线。

siox   

SIOX 代表串行输入输出扩展,是 Eckelmann AG 发明的同步总线系统。 它用于商业和工业制冷的控制和远程监控系统,以驱动额外的 I/O 单元。

slimbus

SLIMbus 是片上系统和音频编解码器以及典型嵌入式系统中的其他外围组件之间的标准接口。
socSOC(片上系统)特定驱动程序
soundwireSoundWire 是 MIPI 联盟批准的带有数据和时钟线的 2 针接口。 SoundWire 用于传输通常与音频功能相关的数据。 SoundWire 接口经过优化,可将音频设备集成到移动或移动系统中。
spi这些驱动处理串行设备接口总线(SPI),它是一个在在全双工下运行的同步串行数据链路标准,。全双工是指两个设备可以同一时间同时发送和接收信息。双工指的是双向通信。设备在主/从模式下通信(取决于设备配置)。
spmiSPMI(系统电源管理接口)是基带和应用处理器与电源管理集成电路 (PMIC) 之间的两线串行接口。
ssb

ssb(Sonics Silicon Backplane)驱动提供对在不同博通芯片和嵌入式设备上使用的迷你总线的支持。

staging该目录含有许多子目录。这里所有的驱动还需要在加入主内核前经过更多的开发工作。
targetSCSI设备驱动
tc这些驱动用于TURBOchannel,TURBOchannel是数字设备公司开发的32位开放总线。这主要用于DEC工作站。
tee实现了一个面向可信执行环境 (TEE) 的通用接口。
thermalthermal驱动使CPU保持较低温度。---Linux温控框架
thunderboltUSB4 和 Thunderbolt 驱动程序。 USB4 是基于 Thunderbolt 3 协议的公共规范。 如果您想在 Apple 硬件或配备 Intel Falcon Ridge 或更新版本的 PC 上热插拔符合 Thunderbolt 和 USB4 的设备,则需要此驱动程序。
ttytty驱动用于管理物理终端连接。
ufs启用对 UFS(通用闪存)主机控制器的支持。
UFS 主机控制器是一种电子元件,能够与 UFS 卡通信。 UFS 主机控制器发生在
智能手机、笔记本电脑、数码相机以及汽车中。
内核模块将被称为 ufshcd。
uio该驱动允许用户编译运行在用户空间而不是内核空间的驱动。这使用户驱动不会导致内核崩溃。-----运行在用户空间的IO技术
usbUSB设备允许内核使用USB端口。闪存驱动和记忆卡已经包含了固件和控制器,所以这些驱动程序允许内核使用USB接口和与USB设备。
vdpa启用此模块以支持使用符合 virtio 规范和供应商特定控制路径的数据路径的 vDPA 设备。
vfio允许设备访问用户空间的VFIO驱动。----用户态驱动框架
vhost 

这是用于宿主内核中的virtio服务器驱动。用于虚拟化中。  

video 

这是用来管理显卡和监视器的视频驱动。

virt 这些驱动用来虚拟化。
virtio 这个驱动用来在虚拟PCI设备上使用virtio设备。用于虚拟化中。
vlynq 这个驱动控制着由德州仪器开发的专有接口。这些都是宽带产品,像WLAN和调制解调器,VOIP处理器,音频和数字媒体信号处理芯片。
w1 这些驱动用来控制one-wire总线。
watchdog 该驱动管理看门狗定时器,这是一个可以用来检测和恢复异常的定时器。
xen 该驱动是Xen管理程序系统。这是个允许用户运行多个操作系统在一台计算机的软件或硬件。这意味着xen的代码将允许用户在同一时间的一台计算机上运行两个或更多的Linux系统。用户也可以在Linux上运行Windows、Solaris、FreeBSD、或其他操作系统。
zorro 该驱动提供Zorro Amiga总线支持。

3、fs目录

        未完

4、kernel目录

        未完

5、lib目录

        未完

6、net目录

        未完

7、security目录

        Linux内核是所有Linux系统的核心。如果有任何恶意代码控制或破害了内核的任何一部分,那么系统会严重受损,文件可能被删除或损坏,私人信息可能被盗等等。很明显,保持内核安全涉及到用户的最大利益。值得庆幸的是,由于Linux内核极其安全,Linux是一个非常安全的系统。在用户比例上,Linux病毒比Windows病毒更少,并且Linux用户比Windows用户个人更少感染病毒。(这就是为什么许多公司使用Linux来管理他们的服务器的一个原因。)

  AppArmor:

        最初是由Immunix写的安全模块。AppArmor限制了程序的能力。AppArmor使用文件路径来跟踪程序限制。许多Linux管理员称AppArmor是最容易配置的安全模块。然而,而许多Linux用户觉得这个模块与其它的替代品相比很糟糕。

        SELinux:

        安全增强Linux(SELinux)是AppArmor的替代品,它最初由美国国家安全局开发(NSA)。SELinux自从2.6版本就进入内核主分支中。SELinux是限制修改内核和用户空间的工具。SELinux给可执行文件(主要是守护进程和服务端程序)最小特权去完成它们的任务。SELinux也可以用来控制用户权限。SELinux不像AppArmor那样使用文件路径,而SELinux在追踪权限时使用文件系统去标记可执行文件。因为SElinux本身使用文件系统管理可执行文件,所以SELinux不能像AppArmor那样对整个文件系统提供保护。

  注意:守护进程是在后台运行的程序

  注意:虽然在内核中有AppArmor、SELinux及其它安全模块,但只能有一个安全模块被激活。

  Smack:

        是安全模块的另一种选择。Smack从2.6.25起进入内核主分支。Smack应能比AppArmor更安全,但比SELinux更容易配置。

  TOMOYO

        是另外一个安全模块,在2.6.30进入内核主分支。TOMOYO可以提供安全防护,但是它的主要用途是分析系统安全缺陷。

  AppArmor、SELinux、Smack和TOMYO组成了四个标准Linux安全模块。这些都通过使用强制访问控制(MAC : mandatory access control)工作,这种访问控制是通过限制程序或者用户执行一些任务来实现的。安全模块还有某些形式的列表规定了它们可以做什么不可以做什么。

  Yama:

        在Linux内核中一个新安全模块。Yama还没有作为标准的安全模块,但是在将来他会成为第5个标准安全模块。Yama和其他安全模块一样使用相同的机制。

学习笔记——《linux设备驱动程序(第三版)》linux设备模型:内核添加删除设备驱动程序(代码片段)

文章目录1.前言2.准备工作2.1.概念2.2.具体总线、设备、驱动结构体说明2.3.注册总线3.添加设备3.1.STEP1——发现设备并创建设备结构structXXX_dev3.2.STEP2——初始化设备结构3.3.STEP3——注册设备4.删除设备5.添加驱动程序6.删除驱动程... 查看详情

linux学习笔记(第一周)

Linux笔记基本概念UNIX体系结构操作系统(内核):一种软件,控制计算机硬件资源,提供程序运行环境。​内核的接口被称为系统调用(systemcall,图中的阴影部分)。公用函数库构建在系统调用接口之上,应用程序既可使用公用函... 查看详情

linux学习-linux系统及编程基础笔记(代码片段)

useraddzhangsanpasswdzhangsanvisudo往/etc/sudoers文件中添加zhangsan#visudo找到如下的行rootALL=(ALL)ALL往该行下面添加zhangsanzhangsanALL=(ALL)ALL2.2Linux的基本结构一些根文件系统中较为重要的二级目录:①/boot:存放系统引导时所需的文件&#... 查看详情

瑞芯微rv1126如何配置和编译linux内核学习笔记(代码片段)

1、配置环境./build.shdevice/rockchip/rv1126_rv1109/BoardConfig-aybering.mk2、切换到内核源码目录cdkernel3、配置内核(1)配合内核平台环境makeARCH=armrv1126_defconfig(2)使用菜单的方式配置Linux内核makeARCH 查看详情

linux内核dentry结构学习

linux内核dentry结构dentry,即directoryentry,目录项,就是多个文件或者目录的链接,通过这个链接可以找寻到目录之下的文件或者是目录项。dentry结构体在linux内核里用处广泛,这个结构体定义在include/linux/dcache.h... 查看详情

瑞芯微rv1126如何配置和编译linux内核学习笔记(代码片段)

1、配置环境./build.shdevice/rockchip/rv1126_rv1109/BoardConfig-aybering.mk2、切换到内核源码目录cdkernel3、配置内核(1)配合内核平台环境makeARCH=armrv1126_defconfig(2)使用菜单的方式配置Linux内核makeARCH=armmenuconfig4、保存配置makeARCH= 查看详情

linux学习笔记基本的bashshell命令

Linux文件系统Linux讲文件存储在单个目录结构(虚拟目录)中,虚拟目录包含了安装在PC上的所有存储设备的文件路径。Linux虚拟目录中比较复杂的部分是它如何来协调管理各个存储设备。LinuxPC上安装的第一块硬盘为根驱动器,在... 查看详情

centos学习笔记[自学记录]

第一、基本概念Linux版本:1.内核版本2.发行版本Linux内核功能:1.内存管理2.进程管理3.设备驱动程序4.系统调用和安全防护Linux发行版本功能:1.Linux内核2.GNU工具3.附加办件4.软件包管理器Linux常见发行版本1.Centos2.Ubuntu3.... 查看详情

linux内核的配置和编译原理(代码片段)

...menuconfig的工作原理六、Kconfig文件详解七、menuconfig的实验学习思路一、linux内核源码目录结构1、源码从哪里来(1)上篇博客讲过,我们使用2.6.35.7版本的内核进行学习。这个版本的内核有三种:第一种是kernel.org上的 查看详情

imx6ull学习笔记(10)——通过tftp烧录linux内核(代码片段)

一、搭建环境1.1搭建TFTP服务通过以下方式完成TFTP网络系统的搭建:更新APT包sudoaptupdate安装TFTP服务器端sudoaptinstallxinetdtftptftpd-y创建TFTP共享目录我这里使用和NFS共同的目录,你们也可以选择自己熟悉的目录mkdir/home/nfssudoch... 查看详情

imx6ull学习笔记(10)——通过tftp烧录linux内核(代码片段)

一、搭建环境1.1搭建TFTP服务通过以下方式完成TFTP网络系统的搭建:更新APT包sudoaptupdate安装TFTP服务器端sudoaptinstallxinetdtftptftpd-y创建TFTP共享目录我这里使用和NFS共同的目录,你们也可以选择自己熟悉的目录mkdir/home/nfssudoch... 查看详情

linux内核的目录结构

...开发板特有的一些代码;补充:如果是开发或者学习,最好用移植好的内核,除非你的工作就 查看详情

linux~学习笔记目录索引

本篇文章是对自己学习Linux及在它的环境下部署工具的一个总结,以方便自己查阅,也给他人一个帮助,本文章同时会不断的更新,欢迎大家订阅!本目录包括的内容会包括linux基础命令,redis,mongodb,node.js,.netcore,kafka,rabbitmq,zookeep... 查看详情

linux内核学习之路_1_编译linux内核(代码片段)

1.准备工作1.1学习环境1.2下载Linux内核源码1.3解压Linux内核1.4目录结构介绍1.2.2Linux内核配置1.1学习环境本系列教程使用的环境如下:操作系统版本:Linuxubuntu18.04Linux内核版本:cat/proc/versionLinuxversion4.15.0-20-generic(buildd@... 查看详情

学习笔记——liunx;linux文件与目录结构;vi/vim编辑器(一般模式编辑模式命令模式)(代码片段)

2023-01-23一、Linux1、Liunx的简介Linux是一套免费使用和自用传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬... 查看详情

linux学习笔记(代码片段)

目录1、Linux基本篇1、Linux目录结构2、vi和vim2.1基本介绍2.2常见的三种模式及转换2.3练习案例3、开机、重启、登录、注销4、用户管理4.1添加用户4.2删除用户4.3查询用户信息4.4切换用户4.5用户组5、实用指令5.1指定运行级别5.2例子&#x... 查看详情

linux内核files_struct结构学习

系统中的每个进程都有自己的一组打开的文件,像根文件系统、当前工作目录、安装点等。有三个数据结构将VFS层和系统的进程紧密联系在一起。它们是files_struct,fs_struct,mnt_namespace。structfiles_struct   atomic_t    c... 查看详情

linux进程——学习笔记(代码片段)

文章目录认识操作系统冯诺依曼体系结构是计算机的基本结构操作系统进程的概念task_struct的内容进程抢占:并行和并发查看进程创建进程理解fork:进程的状态孤儿进程进程的优先级认识操作系统冯诺依曼体系结构是计... 查看详情