查看“Linux内核目录结构”的源代码
←
Linux内核目录结构
跳转至:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
Linux内核源代码非常庞大,随着版本的发展不断增加。它使用目录树结构,并且使用Makefile组织配置编译。<br> 初次接触Linux内核,最好仔细阅读顶层目录的readme文件,它是Linux内核的概述和编译命令说明。readme的说明更加针对X86等通用的平台,对于某些特殊的体系结构,可能有些特殊的地方。<br> 内核源码很复杂,包含多级目录,形成一个庞大的树状结构,通常称为Linux源码目录树。本章节以linux5.4.31为例来介绍一下linux内核目录结构。<br> 顶层目录的Makefile是整个内核配置编译的核心文件,负责组织目录树中子目录的编译管理,还可以设置体系结构和版本号等。<br> 首先来看第一级目录<br> <center>[[Image:47-1.png]] </center><br> {|align=center border=1 |- ! 目录!! 内容 |- | arch | 包含各体系结构特定的代码,如 arm、x86、ia64、mips等,在每个体系结构目录下通常都有:<br> (1) /boot:内核需要的 特定平台代码。<br> (2) /kernel:体系结构特有的代码。<br> (3) /lib:通用函数在特定体系结构的实现。<br> (4) /math-emu:模拟FPU的代码。<br> (5) /mm:特定体系结构的内存管理实现。<br> (6) /include:特定体系的头文件 。<br> |- | block | 存放块设备相关代码 |- | crypto | 存放加密、压缩、CRC校验等算法相关代码 |- | Documentation | 存放相关说明文档,很多实用文档,包括驱动编写等 |- | drivers | 存放 Linux 内核设备驱动程序源码。<br> 驱动源码在 Linux 内核源码中站了很大比例,常见外设几乎都有可参考源码,对驱动开发而言,该目录非常重要。<br> 该目录包含众多驱动,目录按照 设备类别 进行分类,如char、block、input、i2c、spi、pci、usb等。<br> |- | firmware | 存放处理器相关的一些特殊固件 |- | fs | 存放所有文件系统代码,如fat、ext2、ext3、ext4、ubifs、nfs、sysfs等。 |- | include | 存放内核所需、与平台无关的头文件,与平台相关的头文件已经被移动到arch平台的include目录,如 ARM 的头文件目录<arch/arm/include/asm/> |- | init | 包含内核初始化代码 |- | ipc | 存放进程间通信代码 |- | kernel | 包含Linux内核管理代码 |- | lib | 库文件代码实现 |- | mm | 存放内存管理代码 |- | net | 存放网络相关代码 |- | samples | 存放提供的一些内核编程范例,如kfifo;<br> 相关用户态编程范例,如hidraw。 |- | scripts | 存放一些脚本文件,如menuconfig脚本 |- | security | 存放系统安全性相关代码 |- | sound | 存放声音、声卡相关驱动 |- | tools | 编译过程中一些主机必要工具 |- | usr | cpio相关实现 |- | virt | 内核虚拟机KVM |} Linux内核源码中接近一半的代码量是驱动,对某一个特定主板的系统而言,驱动也占据很大的比例,底层开发的很大一部分是驱动相关工作。掌握从众多驱动中找到正确的驱动源码文件,并根据产品的实际需求进行修改调整的方法,能有效促进产品开发的进度。<br> Linux内核源码树drivers目录很复杂,包含了各种外设的驱动。对嵌入式Linux开发而言,通常需要关注如下目录。<br> {|align=center border=1 |- ! 目录 !! 说明 |- | drivers/gpio | 系统GPIO子系统 和 驱动目录,包括处理器内部GPIO以及外扩GPIO驱动。遵循GPIO子系统的驱动,可通过/sys/class/gpio进行访问 |- | drivers/hwmon | 硬件监测相关驱动,如温度传感器、风扇监测等 |- | drivers/i2c | I2C子系统驱动。各I2C控制器的驱动在i2c/busses目录下 |- | drivers/input | 输入子系统驱动目录 |- | drivers/input/keyboard | 非HID键盘驱动,如GPIO键盘、矩阵键盘等 |- | drivers/input/touchscreen | 触摸屏驱动,如处理器的触摸屏控制器驱动、外扩串行触摸屏控制器驱动、串口触摸屏控制器驱动等 |- | drivers/leds | LED子系统和驱动,如GPIO驱动的LED。遵循 LED子系统的驱动 ,可通过/sys/class/leds进行访问 |- | drivers/mfd | 多功能器件(Multi-Function Device)驱动。如果一个器件能做多种用途,通常需要借助MFD来完成。 |- | drivers/misc | 杂项(Miscellaneous)驱动。所驱动的设备可通过/sys系统访问 |- | drivers/mmc | SD(Secure Digital)/MMC(Mutimedia Card)卡驱动目录 |- | drivers/mtd | MTD(Memory Technology Device)子系统和驱动,包括NAND、oneNAND等。 |- | drivers/mtd/nand | NAND FALSH的MTD驱动目录,包括NAND的基础驱动和控制器接口驱动 |- | drivers/net | 网络设备驱动,包括MAC、PHY、CAN、USB 网卡、无线、PPP协议等 |- | drivers/net/can | CAN设备驱动。<br> Linux已经将CAN归类到网络中,采用socket_CAN接口 |- | drivers/net/ethernet | 所支持的MAC驱动。<br> 常见厂家的MAC驱动都能找到,如broadcom、davicom、marvell、micrel、smsc等厂家的MAC,处理器自带MAC的驱动也在该目录下 |- | drivers/net/phy | PHY驱动,比如marvell、micrel和smsc的一些PHY驱动 |- | drivers/rtc | RTC子系统和RTC芯片驱动 |- | drivers/spi | SPI子系统和SPI控制器驱动,含GPIO 模拟SPI的驱动 |- | drivers/tty | TTY 驱动 |- | drivers/tty/serial | 串口驱动,包括8250串口以及各处理器内部串口驱动实现 |- | drivers/uio | 用户空间IO驱动 |- | drivers/usb | USB驱动,包括USB HOST、Gadget、USB转串口以及OTG等支持。 |- | drivers/video | Video驱动,包括Framebuffer驱动、显示控制器驱动和背光驱动等。 |- | drivers/video/backlight | 背光控制驱动 |- | drivers/video/logo | Linux内核启动LOGO图片目录 |- | drivers/watchdog | 看门狗驱动,包括软件看门狗和各种硬件看门狗驱动实现 |}
返回至
Linux内核目录结构
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
关于我们
联系我们
资料下载
STM32F103开发板
STM32U575开发板
STM32MP157开发板
Hi3861鸿蒙开发板
HaaS EDU开发板
ESP32开发板
i.MX8M Plus开发板
图书下载
嵌入式系列图书
物联网系列图书
Android系列图书
高校教仪
嵌入式实验室产品
物联网实验室产品
人工智能实验室产品
虚拟仿真实验室产品
行业应用实训室产品
虚拟仿真
嵌入式虚拟仿真平台
物联网虚拟仿真平台
人工智能虚拟仿真
友情链接
华清远见研发中心
元宇宙实验中心
华清远见硬件商城
工具
链入页面
相关更改
特殊页面
页面信息