Linux下如何操作GPIO,Linux GPIO驱动怎么编写?

Linux 下的 GPIO 控制指南

在 Linux 嵌入式开发中,GPIO (General Purpose Input/Output) 是最基础的外设,用于控制 LED、读取按键状态、驱动继电器等,在 Linux 系统中,操作 GPIO 主要有两种主流方式:传统的 Sysfs 接口 和现代推荐的 libgpiod 接口


Sysfs 接口(传统方式)

Sysfs 是一种基于文件系统的交互方式,通过读写 /sys/class/gpio 目录下的文件来控制引脚,虽然这种方式在较新的内核中已被标记为 deprecated(弃用),但在许多旧版嵌入式系统中仍然非常常见。

如何在Linux操作系统上调试GPIO?
加载中
如何在Linux操作系统上调试GPIO?

操作步骤:

  • 导出引脚
    通过向 export 文件写入引脚编号,使该引脚在 sysfs 中可见。
    echo 18 > /sys/class/gpio/export
  • 设置方向
    在导出的引脚目录下,通过 direction 文件设置输入或输出。

    • 设置为输出:echo out > /sys/class/gpio/gpio18/direction
    • 设置为输入:echo in > /sys/class/gpio/gpio18/direction
  • 写入/读取电平
    • 输出高电平:echo 1 > /sys/class/gpio/gpio18/value

      Linux下如何操作GPIO,Linux GPIO驱动怎么编写?

    • 输出低电平:echo 0 > /sys/class/gpio/gpio18/value
    • 读取电平:cat /sys/class/gpio/gpio18/value
  • 取消导出
    操作完成后,释放引脚。
    echo 18 > /sys/class/gpio/unexport

缺点:

  • 性能较低:每次操作都需要进行文件系统调用。
  • 非原子性:在多进程环境下,容易出现竞争条件。
  • 资源占用:由于是基于文件的,管理起来不够灵活。

libgpiod 接口(现代推荐方式)

libgpiod 是目前 Linux 内核推荐的标准方式,它通过字符设备(/dev/gpiochipX)直接与内核通信,效率更高,且支持更复杂的控制逻辑。

核心工具命令:

使用 libgpiod,你不再需要频繁地 echo 文件,而是使用专门的命令行工具:

  • gpiodetect:列出系统中所有的 GPIO 控制器(chip)。
  • gpioinfo:查看特定 GPIO 控制器上所有引脚的状态和配置。
  • gpioset:设置 GPIO 引脚的电平。

      Linux下如何操作GPIO,Linux GPIO驱动怎么编写?

    • 示例:gpioset gpiochip4 12=1 (将 chip4 的第 12 号引脚设为高电平)。
  • gpioget:读取 GPIO 引脚的电平。
    • 示例:gpioget gpiochip4 12
  • gpiomon:监控 GPIO 引脚的状态变化(中断触发)。
    • 示例:gpiomon gpiochip4 12

优点:

  • 高效性:直接通过 ioctl 系统调用,减少了文件系统开销。
  • 原子性:支持同时对多个引脚进行原子操作。
  • 事件驱动:通过 gpiomon 可以非常方便地处理中断事件。

两种方式的对比总结

特性 Sysfs 接口 libgpiod 接口
内核状态 已弃用 (Deprecated) 当前标准 (Recommended)
操作对象

Linux下如何操作GPIO,Linux GPIO驱动怎么编写?

/sys/class/gpio/gpioN

/dev/gpiochipX
性能 较低 (文件系统开销) 高 (直接系统调用)
中断处理 较复杂 (需通过 epoll 监听文件) 简单 (原生支持 gpiomon)
安全性 容易产生竞态条件 支持原子操作,更安全

开发建议

  • 如果你在维护旧的嵌入式设备,或者在学习基础原理,可以了解 Sysfs
  • 如果你在进行新项目的开发,或者追求高性能和稳定性,请务必学习并使用 libgpiod
  • 在编写 C/C++ 程序时,建议直接调用 libgpiod 提供的 API,而不是通过 system("echo ...") 来调用命令行,以获得最佳性能。

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/489462.html

(0)
为什么律所在AI搜索中搜不到,AI搜索优化具体怎么操作?
上一篇 2026年7月13日 00:55
IDC与CDN的区别是什么?CDN和IDC的具体区别及应用场景该如何选择?
下一篇 2026年7月13日 00:56

相关推荐

  • Linux kernel参数怎么查?linux内核参数优化详解

    内核参数的作用机制内核参数存储在虚拟文件系统/sys/kernel/下,通过/sysctl命令进行读写,它们分为两类:静态参数和动态参数,静态参数在编译内核时确定,无法运行时更改;而动态参数允许系统在运行时实时调整,这使得故障排查和性能优化更加灵活,动态参数:如网络缓冲区大小、文件打开数量限制,可随时修改并立即……

    2026年7月5日
    18100
  • jboss在linux怎么启动?jboss linux服务配置方法

    在Linux环境下部署JBoss服务,核心在于通过Systemd或独立脚本实现进程守护,并配合防火墙策略与内存参数调优以确保高可用性,JBoss作为Red Hat JBoss Enterprise Application Platform(EAP)的基础开源版本,长期以来是企业级Java应用的首选容器之一,尽管……

    2026年7月4日
    7300
  • linux空间不足怎么办?linux系统磁盘空间清理方法

    Linux 系统中的“空间管理”通常包含两个核心维度:磁盘空间(Disk Space)和内存空间(Memory/RAM),还包括文件系统的挂载、配额管理以及日志清理等运维操作,以下是 Linux 空间管理的全面指南,涵盖常用命令、最佳实践和故障排查, 磁盘空间管理 (Disk Space)查看磁盘使用情况df……

    2026年7月10日
    6400
  • Linux中断命令怎么用?如何优雅终止卡死进程

    Linux中断命令的核心在于使用kill配合信号编号或名称,向指定进程发送终止指令,其中kill -9用于强制杀死进程,而kill -15(默认)则用于优雅退出,在Linux系统管理中,进程的生命周期管理是日常运维的基础,当某个服务卡死、资源占用过高或不再需要时,管理员必须能够迅速且准确地将其从内存中移除,这不……

    2026年7月4日
    14910
  • Linux网卡路径在哪?linux查看网卡配置文件路径

    在 Linux 系统中,并没有一个单一的、固定的“网卡路径”,因为网络接口(网卡)的配置、状态和驱动信息分散在多个系统目录中,以下是与网卡相关的主要路径及其用途:网络接口配置文件(传统方式)路径: /etc/sysconfig/network-scripts/ (CentOS/RHEL/Fedora 等)示例文……

    2026年7月10日
    9400
  • linux sdio wifi驱动怎么装?linux sdio wifi驱动安装教程

    Linux系统下SDIO WiFi模块驱动失败或连接不稳定,核心原因通常在于内核版本兼容性不足、设备树(Device Tree)配置错误或固件文件缺失,通过正确加载固件并调整内核参数可解决绝大多数问题,在嵌入式开发领域,Linux与SDIO WiFi的结合几乎是标配方案,从早期的RTL8188到现在的MT760……

    2026年7月4日
    2810
  • linux打字练习软件哪个好用?linux键盘快捷键技巧

    Linux打字练习的核心在于通过高频重复肌肉记忆来克服盲打障碍,建议初学者从基础字母键位开始,逐步过渡到命令行常用符号,最终实现无需看键盘的高效输入,在数字化办公与开发领域,键盘输入速度直接决定了工作效率的上限,对于刚接触Linux系统的用户而言,面对黑底白字的终端界面,往往会产生一种“无从下手”的焦虑感,这种……

    2026年7月6日
    12700
  • ThinkPHP如何在Linux配置?linux下thinkphp配置教程

    在Linux环境下配置ThinkPHP,核心在于确保Web服务器(Nginx/Apache)正确解析PHP文件,并配置伪静态规则以支持URL重写,同时严格设置目录权限以保障安全,很多开发者在将ThinkPHP项目从Windows迁移到Linux时,常遇到页面404或权限拒绝的问题,这通常不是框架本身的bug,而……

    2026年7月8日
    16400
  • linux rpm bin是什么?linux下rpm包管理命令详解

    在 Linux 系统中,rpm、bin 是两个非常基础且重要的概念,它们分别代表了软件包管理工具和可执行文件/二进制文件,下面我将分别解释它们的含义、用法以及它们之间的关系,rpm 是什么?定义rpm(Red Hat Package Manager)是 Red Hat 及其衍生发行版(如 CentOS、Fedo……

    2026年7月10日
    12900
  • linux vi编辑器在哪?vi命令找不到怎么解决

    Vi编辑器是Linux系统中预装的标准文本编辑工具,通常位于/usr/bin/vi或/usr/bin/vim路径下,通过终端输入vi命令即可直接调用,无需额外安装,对于刚接触Linux的新手来说,寻找vi的位置往往是一个令人头疼的问题,很多人习惯了Windows下双击图标打开记事本的便捷,面对黑底白字的命令行界……

    2026年7月5日
    20500

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注