Linux内核目录结构介绍(超详细)

2023-05-16

已经写了一篇文章介绍Linux系统目录的:https://blog.csdn.net/weixin_38715577/article/details/101033419

现在介绍一下Linux内核(kernel)的目录结构。

内核在系统目录下的路径,一般为:/usr/src/(我的ubuntu下测试的)

你也可以自己在/home目录下创建一个文件夹命名为work,作为自己开发内核的工作目录,然后去https://www.kernel.org/pub/linux/kernel/下载一个内核到/home/work/下,在这上面做相应开发比较好。

内核源码的目录结构和系统目录结构类似,也是一个树状结构。

下图是我的ubuntu16的内核源码路径和内核源码目录的样子。

第一级目录:

序号第一级目录第二级目录和文件
1arch

这个文件夹包含了一个Kconfig文件,它用于设置这个目录里的源代码编译所需的一系列设定。

每个支持的处理器架构都在它相应的文件夹中,如arm64arm32、x86mips等。
/boot内核需要的特定平台代码
/boot/dts:设备树文件
/lib通用函数特定体系结构的文件
/math-emu模拟FPU的代码,在ARM中,使用/math-xxx代替
/mm:特定体系结构的内存管理文件
/include:特定体系的头文件

2block此文件夹包含块设备驱动程序的代码,该目录用于实现块设备的基本框架和块设备的I/O调度算法。块设备是以数据块方式接收和发送的数据的设备。数据块都是一块一块的数据而不是持续的数据流。
3crypto这个文件夹包含许多加密算法的源代码。例如,“sha1_generic.c”这个文件包含了SHA1加密算法的代码。存放加密压缩CRC校验等算法相关代码
4Documentation存放相关说明文档,很多实用文档,包括驱动编写等
5drivers存放 Linux 内核设备驱动程序源码。驱动源码在 Linux 内核源码中站了很大比例,常见外设几乎都有可参考源码,对驱动开发而言,该目录非常重要。该目录包含众多驱动,目录按照设备类别进行分类,如charblockinputi2cspipciusb
6firmware保存用于驱动第三方设备的固件
7fs这是文件系统的文件夹。理解和使用的文件系统所需要的所有的代码就在这里。在这个文件夹里,每种文件系统都有自己的文件夹。例如,ext4文件系统的代码在ext4文件夹内。 在fs文件夹内,开发者会看到一些不在文件夹中的文件。这些文件用来控制整个文件系统。例如,mount.h中会包含挂载文件系统的代码。文件系统是以结构化的方式来存储和管理的存储设备上的文件和目录。每个文件系统都有自己的优点和缺点。这是由文件系统的设计决定的。
8include存放内核所需、与平台无关的头文件,与平台相关的头文件已经被移动到 arch 平台的include 目录,如 ARM 的头文件目录<arch/arm/include/asm/>
9init包含内核初始化代码,init文件夹包含了内核启动的处理代码(INITiation)。main.c是内核的核心文件,这是用来衔接所有的其他文件的源代码主文件。
10ipc存放进程间通信代码, 此文件夹中的代码是作为内核与进程之间的通信层。内核控制着硬件,因此程序只能请求内核来执行任务。假设用户有一个打开DVD托盘的程序。程序不直接打开托盘,该程序通知内核,然后,内核给硬件发送一个信号去打开托盘。
11kernel这个文件夹中的代码控制内核本身,在该文件夹下有个"power"文件夹,这里的代码可以使计算机重新启动、关机和挂起。
12lib这个文件夹包含了内核需要引用的一系列内核库文件代码。
13mmmm文件夹中包含了内存管理代码。内存并不是任意存储在RAM芯片上的。相反,内核小心地将数据放在RAM芯片上。内核不会覆盖任何正在使用或保存重要数据的内存区域。
14netnet文件夹中包含了网络协议代码。这包括IPv6、AppleTalk、以太网、WiFi、蓝牙等的代码,此外处理网桥和DNS解析的代码也在net目录。
15samples

存放提供的一些内核编程范例,如kfifo;后者相关用户态编程范例,如hidraw

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

16srcipts这个文件夹有内核编译所需的脚本。最好不要改变这个文件夹内的任何东西。否则,您可能无法配置或编译内核。
17security这个文件夹是有关内核安全的代码。它对计算机免于受到病毒和黑客的侵害很重要。否则,Linux系统可能会遭到损坏。
18sound这个文件夹中包含了声卡驱动,存放声音系统架构相关代码和具体声卡的设备驱动程序
19tools编译过程中一些主机必要工具,这个文件夹中包含了和内核交互的工具。
20usr早期用户空间代码(所谓的initramfs)
21virt内核虚拟机KVM

以上是Linux内核源码目录的结构,大致了解每个目录的左右,需要的时候知道在哪去找就行。

对于Linux内核驱动开发工程师来说,最常接触的就是driver目录,接下来就driver目录做一些说明!

先看张图:这是我虚拟机里面 内核源码下drivers的样子

好了忘记它。没什么卵用,只是看一看加深印象。

下面是driver目录下比较常用的驱动,本人才疏学浅,刚开始学习,怕有什么错漏,所以下图是借鉴了:https://blog.csdn.net/hongwei_1990/article/details/89716970

序号目录说明
1drivers/gpio系统GPIO子系统和驱动目录,包括处理器内部GPIO以及外扩GPIO驱动。遵循GPIO子系统的驱动,可通过/sys/class/gpio进行访问
2drivers/hwmon硬件监测相关驱动,如温度传感器风扇监测
3drivers/i2cI2C子系统驱动。各I2C控制器的驱动在i2c/busses目录下
4drivers/input输入子系统驱动目录
5drivers/input/keyboardHID键盘驱动,如GPIO键盘矩阵键盘
6drivers/input/touchscreen触摸屏驱动,如处理器的触摸屏控制器驱动、外扩串行触摸屏控制器驱动、串口触摸屏控制器驱动等
7drivers/ledsLED子系统和驱动,如GPIO驱动LED。遵循 LED子系统的驱动 ,可通过/sys/class/leds进行访问
8drivers/mfd多功能器件Multi-Function Device)驱动。如果一个器件能做多种用途,通常需要借助MFD来完成。
9drivers/misc杂项Miscellaneous)驱动。特别需要关注<drivers/misc/eeprom/>目录,提供了i2cspi接口的EEPROM驱动范例,所驱动的设备可通过/sys系统访问
10drivers/mmcSDSecure Digital)/MMCMutimedia Card)卡驱动目录
11drivers/mtdMTDMemory Technology Device)子系统和驱动,包括NANDoneNAND等。注意,UBI的实现也在MTD
12drivers/mtd/nandNAND FALSHMTD驱动目录,包括NAND基础驱动控制器接口驱动
13drivers/net网络设备驱动,包括MACPHYCANUSB 网卡无线PPP协议
14drivers/net/canCAN设备驱动。Linux已经将CAN归类到网络中,采用socket_CAN接口
15drivers/net/ethernet所支持的MAC驱动。常见厂家的MAC驱动都能找到,如broadcomdavicommarvellmicrelsmsc等厂家的MAC,处理器自带MAC驱动也在该目录下
16drivers/net/phyPHY驱动,像marvellmicrelsmsc的一些PHY驱动
17drivers/rtcRTC子系统RTC芯片驱动
18drivers/spiSPI子系统SPI控制器驱动,含GPIO 模拟SPI的驱动
19drivers/ttytty驱动用于管理物理终端连接。
20drivers/tty/serial串口驱动,包括8250串口以及各处理器内部串口驱动实现
21drivers/uio用户空间IO驱动
22drivers/usbUSB驱动,包括USB HOSTGadgetUSB转串口以及OTG等支持
23drivers/videoVideo驱动,包括Framebuffer驱动显示控制器驱动背光驱动等。
24drivers/video/backlight背光控制驱动
25drivers/video/logoLinux内核启动LOGO图片目录
26drivers/watchdog看门狗驱动,包括软件看门狗和各种硬件看门狗驱动实现

还有其他一些内核目录没介绍,需要的时候可以网上找资料。

希望与诸君共同学习进步!加油!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux内核目录结构介绍(超详细) 的相关文章

  • Ubuntu下C/C++网络编程基本:socket实现tcp的例子

    1 说明 待编辑 2 代码 test server h ifndef INCLUDE TEST SERVER H define INCLUDE TEST SERVER H include lt unistd h gt include lt
  • mavros常用消息类型表

    mavros订阅消息 xff1a global position 订阅GPS数据 消息名称 xff1a mavros global position global 类型名称 xff1a sensor msgs NavSatFix h 类型所
  • 记一次美团校招内推笔试经历

    2019年4月23日星期二晚上七点 这天刚好项目上生产我负责留守做远程技术支持 留下的还有个重要的原因就是今晚我有一个美团的笔试 七点笔试准时开始 信心满满打开网页地址 美团用的是赛码网来做的笔试题库 xff0c 再次之前收到了邀请码输入进
  • git 推送出现 &quot;fatal: The remote end hung up unexpectedly&quot; 解决方案

    在使用git更新或提交 项目时候出现 34 fatal The remote end hung up unexpectedly 34 原因是推送的文件太大 那就简单了 xff0c 要么是缓存不够 xff0c 要么是网络不行 xff0c 要么
  • 双色球规则及c++实现代码

    双色球规则 xff1a 第一章 总 则 第一条 本规则依据财政部 彩票发行与销售管理暂行规定 和 中国福利彩票 xff08 电脑型 xff09 联合发行与销售管理暂行办法 xff08 以下简称 管理办法 xff09 制定 第二条 中国福利彩
  • 卡尔曼滤波以及Matlab实现_参考书籍_核心剖析_经验分享_EKF(1)

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https mp csdn net mdeditor 1 前言 首先 xff0c 关于卡尔曼滤波理论的定义 种类 算法实现过程步骤以及相关例子方面 xff0c 博主
  • 用JAVA实现MapReduce

    这里的MapReduce实现的是分词计数 pom xml文件 版本号需要跟你自己安装的hadoop版本号一样 hadoop commonhadoop hdfshadoop authhadoop clienthadoop mapreduce
  • 高通导航器软件开发包使用指南(10)

    高通导航器软件开发包使用指南 xff08 10 xff09 8 9位置控制参数8 10状态 机器 进程8 11高度 估算器 图8 12最大加速度偏差8 13电压监控图8 14 att control params xff08 附件控制参数
  • VTK 多平面重建(MPR)及三维切片显示

    在此之前翻阅很多资料 爬过很多的坑 花费不少时间 xff0c 终于还是完成了 xff01 虽然实现地很简单 xff0c 但是大体功能是实现了 后面需要完善功能的话 xff0c 可以用qt与vtk结合开发 MPR MPR multi plan
  • 【实战】从零搭建SSO单点登录服务器 - CAS认证流程

    前言 因系统逐渐增多 xff0c 各个业务系统间无法共享用户状态 xff0c 每个系统都需要用户登录 这对于用户来说很不友好 xff0c 于是需要搭建一个SSO单点登录服务器 xff0c 来做统一的登录 注销 写这个系列的文章有两个目的 x
  • ubuntu18.04安装IntelRealsense D435的SDK及相机标定记录

    写在前面的话 早上去实验室临时被塞的活 xff0c 说让标一下D435这个相机 xff0c 那就做呗 xff01 相机认识 Intel RealSense深度摄像头 D435 xff0c 设备采用USB供电形式 xff0c usb3 0的口
  • PHPStorm 2018版本 破解教程

    破解步骤 1 前提 xff1a 下载好需要的文件 xff08 进入网址后 xff0c 点击download now xff09 PHPStorm xff1a https www jetbrains com phpstorm 点击downlo
  • centos7 安装vnc-server 与卸载

    安装vnc server 前题 Linux桌面程序已安装 安装 vnc server 以root用户运行以下命令来安装vncserver yum install tigervnc server tigervnc server module
  • Ubuntu16.04网络连接正常但是无法使用浏览器上网-浏览器代理设置

    chrome ubuntu16 04 之前使用win10 chrome的时候经常会出现这样的问题 xff0c 但也轻车熟路的解决问题 看下面的图 右上角 设置 高级设置 打开代理设置 选连接 局域网设置关闭代理 就ok了 xff01 ubu
  • 编译记录

    在anaconda中创建虚拟环境 conda create name tf gpu env2 python 61 3 6 查看所有的虚拟环境 conda info envs 连接环境 source activate tf gpu env2
  • 试分别以顺序表和单链表作存储结构,各写一实现线性表就地逆置的算法

    对数组的倒置 void SeqList lt DataType gt inversion int i 61 0 j 61 length 1 DataType temp while i lt j temp 61 data i data i 4
  • 通过CentOS开机自启动脚本设置iptables

    背景 xff1a 因业务需求 xff0c 需要在CentOS服务器启动时通过自动执行脚本配置iptables过滤规则 方案 xff1a 1 在写好的自启动脚本set iptables sh的首行 bin bash 下面添加如下两条注释 xf
  • ROS下运行ORB-SLAM2的数据采集存储和提取

    ROS下运行ORB SLAM2的数据采集存储和提取 前提 xff1a 相机图像发布问题解决 目标 xff1a 一边进行SLAM xff0c 一边存储数据流 问题 xff1a 发布什么类型的数据内容 xff1f 如何提取rosbag中的图片和
  • BP神经网络数学推导

    一 前情提要 神经网络一种求解W权值的算法 xff0c 分为正向传播 FP 求损失 xff0c 反向传播 BP 回传误差 xff0c 根据误差值求解权值W梯度更新其权重 xff0c 反复迭代 xff0c 直到找到W最优解 不考虑局部最优 本
  • Nvidia TX2爬坑过程——1、入手刷机教程

    一 资源简介 TX2作为TX1的改进版 xff0c 资源配置相当强劲 1 模组配置 256 core NVIDIA Pascal GPU ARMv8 64 bit Multi Processor CPU Complex Advanced H

随机推荐