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

[Linux外设驱动详解]8. GPIO子系统

8. GPIO子系统

8.1 概述

GPIO(General Purpose Input/Output,通用输入输出)是嵌入式系统中最基础、最常用的外设接口之一。Linux 内核通过 GPIO 子系统为驱动开发者提供了一套统一的 API,屏蔽了不同 SoC 硬件实现的差异。

什么是 GPIO?

  • 简单来说,GPIO 就是芯片引脚的软件控制能力
  • 每个引脚可以独立配置为输入或输出模式
  • 输出模式下可以控制引脚电平(高/低)
  • 输入模式下可以读取引脚电平状态

为什么需要 GPIO 子系统?

┌─────────────────────────────────────────────────────────────┐ │ 驱动开发者 │ │ 只需调用 gpiod_set_value() 等统一 API │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ GPIO 子系统 (gpiolib) │ │ 提供抽象层,统一管理所有 GPIO 控制器 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ GPIO Controller 驱动 │ │ Rockchip GPIO │ NXP GPIO │ TI GPIO │ ... │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 硬件 (SoC GPIO) │ └─────────────────────────────────────────────────────────────┘

8.2 GPIOLIB 架构

8.2.1 核心数据结构

1. struct gpio_desc - GPIO 描述符
/* kernel/drivers/gpio/gpiolib.h */structgpio_desc{structgpio_device*gdev;// 所属的 GPIO 设备unsignedlongflags;// 状态标志位constchar*label;// 使用者标签constchar*name;// GPIO 名称// ... 其他字段};

flags 标志位说明:

标志位宏定义说明
0FLAG_REQUESTEDGPIO 已被请求占用
1FLAG_IS_OUT方向为输出
6FLAG_ACTIVE_LOW低电平有效
7FLAG_OPEN_DRAIN开漏输出模式
8FLAG_OPEN_SOURCE开源输出模式
9FLAG_USED_AS_IRQ被用作中断
13FLAG_PULL_UP上拉使能
14FLAG_PULL_DOWN下拉使能
2. struct gpio_chip - GPIO 控制器
/* kernel/include/linux/gpio/driver.h */structgpio_chip{constchar*label;// 功能名称structgpio_device*gpiodev;// 内部状态structdevice*parent;// 父设备structmodule*owner;intbase;// GPIO 编号基数u16 ngpio;// GPIO 数量// 方向控制int(*get_direction)(structgpio_chip*gc,unsignedintoffset);int(*direction_input)(structgpio_chip*gc,unsignedintoffset);int(*direction_output)(structgpio_chip*gc,unsignedintoffset,intvalue);// 数据读写int(*get)(structgpio_chip*gc,unsignedintoffset);void(*set)(structgpio_chip*gc,unsignedintoffset,intvalue);// 配置int(*set_config)(structgpio_chip*gc,unsignedintoffset,unsignedlongconfig);// 中断相关int(*to_irq)(structgpio_chip*gc,unsignedintoffset);// 请求/释放int(*request)(structgpio_chip*gc,unsignedintoffset);void(*free)(structgpio_chip*gc,unsignedintoffset);};
3. struct gpio_device - GPIO 设备
/* kernel/drivers/gpio/gpiolib.h */structgpio_device{intid;// 设备 IDstructdevicedev;// 设备模型structcdevchrdev;// 字符设备structgpio_chip*chip;// 指向 gpio_chipstructgpio_desc*descs;// GPIO 描述符数组intbase;// 全局编号基数u16 ngpio;// GPIO 数量constchar*label;// 描述性名称structlist_headlist;// 链入全局 gpio_devices 链表};

8.2.2 架构层次图

┌─────────────────────────────────────────────────────────────────────┐ │ Consumer API 层 │ │ gpiod_get() / gpiod_set_value() / gpiod_get_value() │ └─────────────────────────────────────────────────────────────────────┘ │ │ 操作 gpio_desc ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ GPIOLIB 核心层 │ │ - GPIO 描述符管理 │ │ - 权限检查 │ │ - 统一编号空间 │ │ - 与设备树/ACPI 交互 │ └─────────────────────────────────────────────────────────────────────┘ │ │ 调用 gpio_chip ops ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ GPIO Controller 驱动层 │ │ gpio-rockchip.c │ gpio-pl061.c │ gpio-tegra.c │ ... │ │ 实现 gpio_chip 回调函数 │ └─────────────────────────────────────────────────────────────────────┘ │ │ 读写寄存器 ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ 硬件寄存器 │ └─────────────────────────────────────────────────────────────────────┘

8.2.3 注册流程

http://www.jsqmd.com/news/226432/

相关文章:

  • 3.41 运筹规划问题入门:线性规划、整数规划、混合整数规划详解
  • 工作流自动化方法论:从业务流程优化到零代码配置实战
  • 导师严选8个论文写作工具,一键生成论文工具推荐!
  • 3.36 FasterRCNN算法详解:RPN网络,两阶段检测的巅峰之作
  • 【API渗透】crAPI 靶场的环境搭建与漏洞复现详解
  • 2026必备!8个AI论文写作软件,专科生搞定毕业论文+格式规范!
  • 3.38 工业缺陷检测实战:物体表面缺陷检测,从图像处理到深度学习
  • 2026 中专大数据管理与应用专业证书含金量怎么样?
  • 3.43 Google OR-Tools详解:企业级运筹优化工具,功能强大的规划求解器
  • DOL-CHS-MODS汉化美化包:终极配置方案与使用指南
  • 5个实战级n8n工作流:解决企业自动化核心痛点
  • 中国电子学会青少年机器人等级考试1到6资料
  • 3.39 相机标定与角点检测:工业视觉的基础技术,附完整代码
  • 2026 大专计算机专业证书含金量对比怎么样?
  • 2025年入职or转行网络安全,该如何规划?
  • Sign-Sacker签名掠夺者:3分钟掌握数字签名伪装实战技术
  • DOL-CHS-MODS中文整合包:零基础安装到高级定制全攻略
  • 3分钟搞定:WenQuanYi Micro Hei免费中文字体完整使用指南
  • Sign-Sacker签名掠夺者:数字签名伪装技术的完整使用指南
  • Sign-Sacker签名掠夺者:数字签名完美复刻利器
  • springboot企业数据资产登记管理系统设计实现
  • 3.40 AI大赛实战:钢铁缺陷检测,从数据预处理到模型调优完整流程
  • MLIR模型编译加速实战
  • 运维 _ 测试转网安,2025 年最顺的规划:用老经验走新赛道
  • 学长亲荐2026自考AI论文网站TOP10:选对工具轻松过答辩
  • 3.37 YOLO算法演进史:从V1到V11,实时目标检测的完整发展历程
  • 3.32 视觉算法在企业中的应用:从人脸识别到缺陷检测,6大应用场景
  • 业务流程自动化实战指南:从思维到落地的高效工作流设计
  • ReactPage内容转换:从网页编辑到演示文稿的无缝衔接
  • 3.33 图像分类、目标检测、实体分割:计算机视觉三大任务详解