跳转至

Kernel Module

用户态和内核态通信

file_operations

可以为Kernel Module实现file_operations,让设备可以作为文件被用户空间使用。

file_operations 通常可以实现以下接口:

  • read/write
  • ioctl 如果有特殊操作,可以通过IOCTL完成
  • mmap:将内核内存(如设备寄存器、DMA 缓冲区)映射到用户空间,直接访问。​​典型场景​​:高性能数据传输(如摄像头帧缓冲)、硬件寄存器操作。

基于套接字(socket)的内核-用户空间双向通信机制,支持异步事件通知。内核可主动推送消息(如热插拔事件)。

其他

  • debugfs​​
  • shared memory
  • eBPF
  • io_uring
方法​ ​适用场景​ ​性能​ ​复杂度​ ​安全性​
​ioctl​ 驱动自定义控制命令 中(需自定义)
​procfs/sysfs​ 配置和状态查询 高(文件权限)
​netlink​ 内核主动通知或网络配置 中(需协议设计)
​mmap​ 高频大数据量(如 DMA) 极高(零拷贝) 中(需同步)
​eBPF​ 网络过滤、性能分析 极高 极高 高(沙盒)
​io_uring​ 异步高性能 I/O 极高 极高

实际开发中,常组合多种方法(如 mmap + ioctl)兼顾功能与性能。

内核态和设备通信

MMIO是一种让CPU通过内存访问指令来访问设备寄存器的技术。

需要先放数据放到内存中,然后发命令给设备,设备再dma读走,如果让cpu一点一点发数据给设备就效率太低了