[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.mzph.cn/news/1141175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【电动机】液压伺服电动机的状态空间设计与仿真【含Matlab源码 14900期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

工作流自动化方法论:从业务流程优化到零代码配置实战

工作流自动化方法论:从业务流程优化到零代码配置实战 【免费下载链接】n8n n8n 是一个工作流自动化平台,它结合了代码的灵活性和无代码的高效性。支持 400 集成、原生 AI 功能以及公平开源许可,n8n 能让你在完全掌控数据和部署的前提下&#…

导师严选8个论文写作工具,一键生成论文工具推荐!

导师严选8个论文写作工具,一键生成论文工具推荐! AI 工具如何助力论文写作? 在研究生阶段,论文写作是一项既重要又充满挑战的任务。随着人工智能技术的不断发展,越来越多的 AI 工具被应用于学术写作中,帮助…

【API渗透】crAPI 靶场的环境搭建与漏洞复现详解

目录 环境搭建 漏洞复现 挑战1:找到泄露其它用户敏感信息的API接口 挑战2:找到泄露视频内部属性的API接口 挑战3:访问其它用户车辆的详细信息 挑战4:访问其它用户的机械报告 挑战5:重置其它用户的密码 挑战6:删除另一个用户的视频 挑战7:免费获得一件物品 挑战…

2026必备!8个AI论文写作软件,专科生搞定毕业论文+格式规范!

2026必备!8个AI论文写作软件,专科生搞定毕业论文格式规范! AI工具助力论文写作,专科生也能轻松应对 随着人工智能技术的不断进步,越来越多的AI工具开始进入学术领域,为学生提供高效、便捷的写作支持。尤其是…

3.38 工业缺陷检测实战:物体表面缺陷检测,从图像处理到深度学习

3.38 工业缺陷检测实战:物体表面缺陷检测,从图像处理到深度学习 引言 工业缺陷检测是视觉算法的重要应用,本文通过实战案例演示从图像处理到深度学习的完整流程。 一、缺陷检测概述 1.1 任务定义 # 缺陷检测任务 def defect_detection_task():"""缺陷检…

2026 中专大数据管理与应用专业证书含金量怎么样?

在数字化浪潮席卷各行各业的2026年,“大数据”已从一个前沿概念,沉淀为驱动产业升级的日常燃料。对于即将毕业或刚刚步入职场的中专大数据管理与应用专业学子而言,你们正站在一个充满机遇的十字路口:专业背景赋予了你们进入赛道的…

3.43 Google OR-Tools详解:企业级运筹优化工具,功能强大的规划求解器

3.43 Google OR-Tools详解:企业级运筹优化工具,功能强大的规划求解器 引言 OR-Tools是Google开发的企业级运筹优化工具,功能强大。本文将深入解析OR-Tools的使用方法。 一、OR-Tools概述 1.1 工具特点 # OR-Tools概述 def ortools_overview():"""OR-Too…

DOL-CHS-MODS汉化美化包:终极配置方案与使用指南

DOL-CHS-MODS汉化美化包:终极配置方案与使用指南 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 想要获得完美的Degrees of Lewdity中文游戏体验吗?DOL-CHS-MODS整合包为您提…

5个实战级n8n工作流:解决企业自动化核心痛点

5个实战级n8n工作流:解决企业自动化核心痛点 【免费下载链接】n8n n8n 是一个工作流自动化平台,它结合了代码的灵活性和无代码的高效性。支持 400 集成、原生 AI 功能以及公平开源许可,n8n 能让你在完全掌控数据和部署的前提下,构…

3.39 相机标定与角点检测:工业视觉的基础技术,附完整代码

3.39 相机标定与角点检测:工业视觉的基础技术,附完整代码 引言 相机标定和角点检测是工业视觉的基础技术。本文将深入解析这些技术的原理和实现。 一、相机标定 1.1 标定原理 相机标定用于确定相机的内参和外参。 # 相机标定 import cv2 import numpy as npdef camera_…

数字签名伪装:安全边界的重新定义

数字签名伪装:安全边界的重新定义 【免费下载链接】Sign-Sacker 项目地址: https://gitcode.com/gh_mirrors/si/Sign-Sacker 想象这样一个场景:一个看似普通的可执行文件,却拥有微软官方签名的"身份证"。这不是天方夜谭&am…

2026 大专计算机专业证书含金量对比怎么样?

进入2026年,数字化与智能化已如水银泻地般渗透至各行各业。对于即将踏入职场的大专计算机专业学子而言,你们掌握着这个时代最基础、也最具可塑性的工具技能。然而,一个不容忽视的现实是:人才供给的“规模化”与技术需求的“专精化…

DOL-CHS-MODS中文整合包:零基础安装到高级定制全攻略

DOL-CHS-MODS中文整合包:零基础安装到高级定制全攻略 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 想要快速上手Degrees of Lewdity中文版吗?DOL-CHS-MODS整合包为您扫除所…

2025年入职or转行网络安全,该如何规划?

运维、测试转网安:老工作的“新视角” 运维和测试,看似和“网络安全”不沾边,其实日常工作里早就和“安全”打交道了。转行做网安,与其说是“转行”,不如说是“把原来的活儿换个角度干”。 运维:修服务器的…

3分钟搞定:WenQuanYi Micro Hei免费中文字体完整使用指南

3分钟搞定:WenQuanYi Micro Hei免费中文字体完整使用指南 【免费下载链接】fonts-wqy-microhei Debian package for WenQuanYi Micro Hei (mirror of https://anonscm.debian.org/git/pkg-fonts/fonts-wqy-microhei.git) 项目地址: https://gitcode.com/gh_mirror…

Sign-Sacker签名掠夺者:数字签名伪装技术的完整使用指南

Sign-Sacker签名掠夺者:数字签名伪装技术的完整使用指南 【免费下载链接】Sign-Sacker 项目地址: https://gitcode.com/gh_mirrors/si/Sign-Sacker 在当今网络安全环境中,数字签名已成为验证软件真实性和完整性的重要手段。Sign-Sacker签名掠夺者…

Sign-Sacker签名掠夺者:数字签名完美复刻利器

Sign-Sacker签名掠夺者:数字签名完美复刻利器 【免费下载链接】Sign-Sacker 项目地址: https://gitcode.com/gh_mirrors/si/Sign-Sacker 在当今网络安全日益重要的时代,数字签名作为验证软件真实性的关键标识,正受到前所未有的关注。…

springboot企业数据资产登记管理系统设计实现

背景与意义 随着企业数字化转型的深入,数据已成为核心资产。传统数据管理方式存在分散存储、缺乏统一标准、难以追踪等问题,导致数据利用率低、安全风险高。SpringBoot企业数据资产登记管理系统旨在解决这些问题,通过标准化、系统化的方式实…

3.40 AI大赛实战:钢铁缺陷检测,从数据预处理到模型调优完整流程

3.40 AI大赛实战:钢铁缺陷检测,从数据预处理到模型调优完整流程 引言 本文通过钢铁缺陷检测AI大赛案例,演示从数据预处理到模型调优的完整流程。 一、问题定义 1.1 任务概述 # 问题定义 def steel_defect_detection_task():"""钢铁缺陷检测任务"&q…