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

已经写了一篇文章介绍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看门狗驱动,包括软件看门狗和各种硬件看门狗驱动实现

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

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

  • 33
    点赞
  • 188
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux操作系统目录结构是指在Linux系统的所有文件和目录的组织结构Linux采用一种树形结构来组织文件和目录,其目录是整个系统的根节点,所有的文件和目录都是从根目录开始的。以下是Linux操作系统的目录结构: 1. /bin:系统命令和二进制文件的存放目录。 2. /boot:Linux内核、引导程序和配置文件的存放目录。 3. /dev:设备文件存放目录。 4. /etc:系统配置文件存放目录。 5. /home:用户家目录的存放目录。 6. /lib:系统库文件的存放目录。 7. /media:可移动设备(如光盘、U盘)挂载的目录。 8. /mnt:文件系统挂载点的存放目录。 9. /opt:第三方软件存放目录。 10. /proc:虚拟文件系统,存放操作系统运行时的进程、内存信息等。 11. /root:级管理员(root)的家目录。 12. /run:系统运行时的临时文件存放目录。 13. /sbin:级用户使用的系统命令和二进制文件存放目录。 14. /srv:存放网络服务的数据目录。 15. /sys:包含系统硬件、设备信息的虚拟文件系统。 16. /tmp:系统临时文件存放目录。 17. /usr:用户程序和文档的存放目录。 18. /var:系统日志、缓存、邮件等可变数据存放目录。 这些目录及其子目录Linux操作系统都具有特定的作用和用途。了解和掌握这些目录的作用和用途,有助于我们更好地管理和使用Linux操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值