当前位置: 首页 > news >正文

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 实现与定义。
http://www.jsqmd.com/news/343963/

相关文章:

  • 蓝桥杯JAVA--启蒙之路(十二)包装类型 JavaBean
  • 2026毕业季:零实习经历也能拿Offer?三款AI简历工具助你逆袭
  • 【金融项目实战】4_接口测试 _数据准备和清理
  • 2026年知名的天津半导体划片切割液厂家最新推荐 - 行业平台推荐
  • Http到底是怎么一回事?我们来大解剖
  • 联机手写签名识别技术通过采集书写时的压力、速度、轨迹等动态特征,构建独特的“行为指纹“
  • THine发布无光学DSP芯片组,赋能下一代Scale-Up型AI网络“Slow and Wide”互联
  • Total Economic Impact研究显示:Yubico实现265%投资回报率,并将可控数据泄露风险相关的暴露成本降低99.99%
  • 2026中国AI招聘系统选型指南:从“效率工具”到“智能体协同”的跃迁
  • log-lottery:不只是炫酷的3D抽奖,更是学习前端开发的最佳实践
  • 2026年靠谱的高纯度划片切割液用户口碑认可参考(高评价) - 行业平台推荐
  • 分布式系统:时钟和全局状态
  • 2026年质量好的热镀锌楼承板/工业厂房楼承板厂家怎么选 - 行业平台推荐
  • 放弃传统积分!绿色积分凭“单边上扬”,让积分越用越有价值
  • 2026年开年,成都电线电缆品牌权威推荐与深度解析 - 2026年企业推荐榜
  • 2026年RHCE考试大纲及培训要点
  • 超实用 Guluscan 工具:HTTPS 抓包 + APP 安全分析 漏洞检测一步到位
  • MathCAD许可证优化策略分析
  • Redis存储(5)Redis五大数据类型之 List 和 Set。
  • 2026年家装电线工厂综合实力与报价深度解析 - 2026年企业推荐榜
  • 2026年高压电缆制造厂商综合评测与选型指南 - 2026年企业推荐榜
  • 无穿戴动捕:无感交互时代的技术革新与行业赋能
  • AI Agent失控风险:OpenClaw从提示词注入到skill投毒
  • 小公司不能用 RabbitMQ?
  • 嵌入式C语言阶段复习——函数
  • 基于物理交互的具身智能决策框架设计
  • 具身智能视觉、触觉、力觉、听觉等信息如何实时对齐与融合?
  • Deepoc-M数学大模型赋能教育领域,破解中小机构与教学核心痛点
  • 实测 | FreeBuds 7i新版本默认音效,体验拉满!
  • 惠普5200LX打印机驱动下载方法:告别失效困扰,3大路径高效适配