linux驱动开发常用的头文件
目录介绍
一、核心头文件目录结构
通用内核头文件目录
- 路径:
include/linux/
- 功能:包含与硬件无关的核心内核API和数据结构,如模块管理(
module.h
)、文件系统(fs.h
)、内存管理(slab.h
)等。 - 设计原因:将通用功能抽象为独立模块,便于驱动开发者跨平台调用,减少代码冗余。
- 路径:
架构相关头文件目录
- 路径:
arch/[架构名]/include/asm/
(如arch/arm/include/asm
) - 功能:定义特定处理器架构的寄存器操作(如
asm/io.h
)、中断控制(asm/irq.h
)和原子操作(asm/atomic.h
)。 - 设计原因:隔离硬件差异,通过符号链接(
asm
指向具体架构目录)实现编译时的平台适配。
- 路径:
平台设备相关目录
- 路径:
arch/[架构名]/mach-*/include/mach/
(如arch/arm/mach-s3c24xx/include/mach/
) - 功能:提供SoC芯片级寄存器定义(如三星S3C系列GPIO配置)。
- 设计原因:针对特定嵌入式平台定制硬件描述,增强代码可移植性。
- 路径:
设备树(Device Tree)支持目录
- 路径:
include/linux/of.h
- 功能:解析设备树(DTS)中的硬件配置信息,如
of_property_read_u32
读取设备属性。 - 设计原因:解耦硬件描述与驱动代码,实现动态硬件配置。
- 路径:
bash
Linux内核源码目录示例
linux/
├── include/ # 通用头文件
│ ├── linux/ # 核心API(模块、文件系统等)
│ └── asm-generic/ # 跨架构通用定义
├── arch/
│ └── arm/ # ARM架构相关
│ ├── include/asm/ # 架构级硬件操作(如寄存器读写)
│ └── mach-s3c24xx/ # 三星S3C24xx平台特定定义
└── drivers/ # 驱动代码目录
└── usb/ # USB驱动实现
常用头文件介绍
一、基础模块与内核交互
linux/module.h
- 功能:模块化开发核心头文件,提供
module_init
/module_exit
等宏,支持动态加载和卸载驱动模块。
- 功能:模块化开发核心头文件,提供
linux/kernel.h
- 功能:包含内核常用函数原型(如
printk
日志输出)、宏定义(如container_of
)和内核数据类型定义。
- 功能:包含内核常用函数原型(如
linux/init.h
- 功能:定义
__init
和__exit
宏,用于标记初始化函数和清理函数,优化内存占用。
- 功能:定义
二、字符设备与文件操作
linux/fs.h
- 功能:定义文件操作相关结构体(如
file_operations
、inode
、file
),支持注册字符设备(register_chrdev
)。
- 功能:定义文件操作相关结构体(如
linux/cdev.h
- 功能:提供字符设备结构体
cdev
及相关操作函数(如cdev_init
、cdev_add
)。
- 功能:提供字符设备结构体
linux/uaccess.h
- 功能:包含用户空间与内核空间数据交换函数(如
copy_to_user
、copy_from_user
)。
- 功能:包含用户空间与内核空间数据交换函数(如
三、设备模型与总线
linux/device.h
- 功能:定义设备模型相关结构体(
device
、class
、driver
),支持设备节点自动创建(如class_create
、device_create
)。
- 功能:定义设备模型相关结构体(
linux/platform_device.h
- 功能:平台设备驱动框架,用于管理SoC集成外设(如GPIO、时钟控制器)。
四、中断与同步机制
linux/interrupt.h
- 功能:中断处理相关函数(如
request_irq
、free_irq
)和中断描述符定义。
- 功能:中断处理相关函数(如
linux/wait.h
- 功能:定义等待队列(
wait_queue_head_t
)及相关操作(如wait_event
、wake_up
),用于进程阻塞与唤醒。
- 功能:定义等待队列(
linux/spinlock.h
- 功能:提供自旋锁(
spinlock_t
)和互斥锁(mutex
)机制,保护共享资源。
- 功能:提供自旋锁(
五、内存管理与IO操作
linux/slab.h
- 功能:内核内存分配函数(如
kmalloc
、kzalloc
、kfree
)。
- 功能:内核内存分配函数(如
asm/io.h
- 功能:提供IO内存操作函数(如
ioremap
、iowrite32
、ioread32
)和端口操作(inb
、outb
)。
- 功能:提供IO内存操作函数(如
linux/mm.h
- 功能:内存管理相关函数,如页面分配(
get_free_page
)和内存映射操作。
- 功能:内存管理相关函数,如页面分配(
六、平台相关头文件
mach/*.h
和plat/*.h
- 功能:针对特定处理器架构(如ARM)或平台(如三星S3C系列)的寄存器定义和硬件操作宏,通常位于
arch/arm/mach-*/include/mach/
目录。
- 功能:针对特定处理器架构(如ARM)或平台(如三星S3C系列)的寄存器定义和硬件操作宏,通常位于
七、其他关键头文件
linux/errno.h
- 功能:定义错误码(如
EINVAL
、ENOMEM
),便于驱动返回标准错误。
- 功能:定义错误码(如
linux/delay.h
- 功能:提供延时函数(如
mdelay
、udelay
),支持忙等待或休眠。
- 功能:提供延时函数(如
linux/of.h
- 功能:设备树(Device Tree)解析函数(如
of_find_node_by_name
、of_property_read_u32
),用于获取硬件配置信息。
- 功能:设备树(Device Tree)解析函数(如