news 2026/6/6 6:04:52

Linux内核驱动--设备驱动

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux内核驱动--设备驱动

一、驱动概念

设备驱动(Device Driver) 是连接硬件与操作系统内核的桥梁。它使得上层应用程序能够通过统一的接口访问底层硬件资源,而无需关心具体的硬件细节。Linux 内核将设备抽象为三大类:字符设备、块设备 和 网络设备,每种类型对应不同的数据访问模式和驱动模型。

二、驱动分类

类型访问方式典型设备缓冲机制主要系统调用
字符设备字节流(顺序/随机)串口、键盘、LED、ADC无(或简单缓冲)open,read,write,ioctl
块设备固定大小块(通常512B/4KB)硬盘、SD卡、eMMC有(内核页缓存)open,read,write,fsync
网络设备数据包(报文)以太网卡、Wi-Fi 模块有(sk_buff 缓冲区)socket,send,recv(非文件操作)

三、Linux 字符设备驱动架构图

四、字符设备驱动的核心组件

1. struct file_operations —— 驱动的“接口表”

这是字符设备驱动的灵魂,定义了用户空间调用系统调用时内核应执行的函数。
static struct file_operations demo_fops = { .owner = THIS_MODULE, .open = demo_open, .release = demo_release, .read = demo_read, .write = demo_write, };
  • open():设备打开时调用(如 fd = open("/dev/demo", O_RDWR))
  • release():close(fd) 时调用,释放资源
  • read() / write():核心数据传输函数

2. 设备号(Device Number)

每个字符设备由 主设备号(Major) + 次设备号(Minor) 唯一标识。
  • 主设备号:标识设备类型(如 4 表示 TTY)
  • 次设备号:区分同一类型的不同实例(如 ttyS0、ttyS1)
// 静态指定 int major = register_chrdev(200, "mydev", &demo_fops);
3. cdev 结构体 —— 内核中的字符设备对象
现代 Linux 使用 cdev 结构管理字符设备:
struct cdev my_cdev; // 初始化并绑定 fops cdev_init(&my_cdev, &demo_fops); my_cdev.owner = THIS_MODULE; // 添加到内核 cdev_add(&my_cdev, dev, 1); // dev 是 alloc_chrdev_region 返回的 dev_t

五、高效开发利器:ctags 源码导航

在开发字符设备驱动时,经常需要查阅内核源码中的函数定义、结构体成员和宏展开。ctags 是一个强大的代码索引工具,可让你在 Vim、Emacs 或 VS Code 中快速跳转到符号定义。

1. 安装 ctags

# Ubuntu/Debian sudo apt install exuberant-ctags # CentOS/RHEL sudo yum install ctags

2. 在内核源码目录生成 tags 文件

ctags -R

3. 在编辑器中使用 ctags

  • 将光标放在函数名上(如 cdev_add)
  • 按 Ctrl + ] → 跳转到定义
  • 按 Ctrl + t → 返回上一位置
  • :ts → 显示所有匹配项(适用于重载)

六、总结

  • 字符设备驱动是 Linux 最基础的驱动类型,用于以字节流方式访问硬件(如 LED、串口、传感器等)。
  • 通过 file_operations 结构体将用户系统调用(open/read/write/ioctl)映射到内核函数。
  • 通过 cdev_add() 注册设备。
  • 开发过程中配合 ctags 工具(ctags -R)可快速跳转内核源码,高效查阅 API 实现与定义。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 9:48:21

45亿砸下:BAT的红包雨,我却抢了个寂寞

“希望重现当年微信红包的盛况。” 在前不久的腾讯员工大会上,马化腾宣布使出多年不用的“撒币”狠招:让元宝在春节分发10亿红包,并许下了这样的春节愿望。 年味渐浓,腊月的街头早已被红灯笼串起暖意,超市里的年货堆…

作者头像 李华
网站建设 2026/5/29 2:06:03

无穿戴动捕:无感交互时代的技术革新与行业赋能

动作捕捉技术历经机械传感、惯性穿戴等发展阶段,已从早期影视特效制作,逐步与虚拟现实、人工智能、数字孪生等技术深度融合,并逐步渗透到体育训练、文化展览、康复医疗等多元领域,成为了连接现实与虚拟的关键纽带,推动…

作者头像 李华
网站建设 2026/5/28 12:07:34

Deepoc-M数学大模型赋能教育领域,破解中小机构与教学核心痛点

在教育数字化转型持续深化、个性化教学需求日益凸显的当下,数学作为基础学科,其教学质量、教研效率、资源适配能力,直接影响教育教学的整体成效。数学大模型已逐步渗透到教育教学、教研备课、题库建设、个性化辅导等多个环节,成为…

作者头像 李华
网站建设 2026/6/5 8:02:59

webrtc中音频3A处理开关配置

webrtc中音频3A处理开关配置 1 音频引擎初始化的时对3A处理进行设置 WebRtcVoiceEngine::Init media/engine/webrtc_voice_engine.hWebRtcVoiceEngine::ApplyOptions media/engine/webrtc_voice_engine.hmodules/audio_processing/audio_processing_impl.h AudioProcessingImpl…

作者头像 李华
网站建设 2026/5/28 23:20:12

那些棘手问题往往不是在加班到深夜时解决的

有个挺玄的现象:那些困扰了好几天的棘手问题,往往不是在加班到深夜时解决的,反而是在放松喝咖啡、散步,甚至洗澡的时候突然想通的。这不是玄学,是真实的心理机制在起作用。焦虑会让大脑变窄如果带着焦虑和紧绷的情绪去…

作者头像 李华
网站建设 2026/5/29 2:03:29

Sora2 Pro 终于来了,国内开发者如何低成本、零门槛接入?

2026 年初,Sora2 Pro 的发布无疑是 AI 视频领域的“核弹级”消息。从文本直接生成电影级画质,支持物理模拟与多镜头控制,它不再只是工具,而是颠覆行业的“魔法”。 然而,对于国内开发者而言,想要使用官方 …

作者头像 李华