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

相关推荐

  • 宁畅一台服务器到底多少钱?,哪款性价比高?

    一台宁畅服务器的价格并不是固定数字,取决于具体型号、CPU/GPU配置和存储方案,主流企业级配置的价格通常在数万元到数十万元区间,而搭载专业GPU卡的AI服务器则可能高达百万元级别,这个答案听起来有点笼统,但了解服务器行业的朋友都清楚,服务器本质上是“按需定制”的硬件产品,报价与配置强相关,今天这篇内容,我就围……

    2026年8月23日
    100
  • 2026年5b6t的服务器地址是多少,怎么找

    5b6t的服务器地址通常以域名play.5b6t.com形式呈现,实际解析到的IP由服务商根据机房节点动态分配,对于追求稳定与合规的用户,建议选择持有自营机房和正规资质的IDC服务商,如简米科技(持牌自营机房,许可证编号豫B2-20231089)和酷番云(工信部全牌照,ISO双认证),确保连接低延迟且运营合法……

    2026年8月23日
    400
  • 1g1核服务器能放多少东西

    1G1核服务器能放的“东西”取决于你如何定义“东西”,但以最常见的网站承载场景来说,它大约能支撑1到3个中等流量的个人博客或企业展示站,或者处理日均几百到几千次的API请求,具体数量取决于你的代码效率、缓存策略和数据库设计,拆解1G1核服务器的真实能力1G1核服务器指的是1个vCPU核心和1GB内存的云服务器……

    2026年8月12日
    400
  • 群晖服务器一年费用到底要多少钱,值得买吗?

    群晖服务器一年的费用没有固定答案,但根据主流硬件配置和运营商托管方案,综合成本通常在8000元至5万元之间,核心差异在于你选择家用自建还是企业级托管,以及数据存储容量和安全需求,下面从硬件投入、日常开销、托管服务三大维度拆解费用构成,并给出典型场景的预算参考,群晖硬件成本:一次性投入决定总预算基础家用与企业级型……

    2026年8月22日
    800
  • PS4战地1怎样租服务器详细步骤有哪些,多少钱一台?

    在PS4平台租用战地1服务器,你需要通过游戏内租用系统或EA官方渠道,月租费用通常在几十元人民币,具体取决于服务器人数和租用时长,整套流程十分钟内就能完成,ps4战地1租服务器教程:操作步骤详解通过游戏内界面租用服务器游戏内的租用入口是最直接的路径,全程无需跳出游戏,具体操作如下:- 启动战地1,进入**多人模……

    2026年7月23日
    500
  • linux pthreads怎么安装?linux pthreads安装教程

    在 Linux 系统中,pthreads(POSIX Threads)通常不需要单独安装,因为它已经是大多数 Linux 发行版标准 C 库(glibc)的一部分,如果你在使用 pthreads 时遇到编译错误或找不到头文件,可能需要安装相关的开发包,以下是针对不同发行版的具体操作指南:常见发行版安装命令Ubu……

    2026年7月12日
    16900
  • 刀片式服务器40c64g到底多少钱一台,性价比怎么样?

    刀片式服务器40c64g的采购成本根据品牌、配置和新旧程度差异悬殊,全新机型通常在5万至12万元区间,而二手或租赁方案可将初期投入降至1万至3万元,具体取决于硬盘接口、网络模块以及是否包含原厂保修,刀片式服务器40c64g的配置拆解与典型场景40c64g代表40颗物理核心(通常为双路20核或单路40核处理器)搭……

    2026年8月5日
    300
  • 上行速度1GB的服务器到底多少钱,哪家便宜?

    上行速度1GB的服务器月租成本通常在数千元到数万元之间,具体取决于带宽类型(独享/共享)、线路质量(BGP/CN2/单线)以及硬件配置,其中独享1Gbps带宽的入门级服务器月付约2000-5000元,高防或CN2线路则可能突破万元,先搞清楚“上行1GB”在IDC行业里到底指什么很多朋友问“上行速度1GB的服务器……

    2026年8月8日
    900
  • 百度服务器的ip地址是多少

    百度服务器的IP地址没有固定值,百度全网采用CDN节点和BGP多线动态调度机制,IP地址会随访问区域、网络运营商和时段实时变化,用户无法通过单一IP访问百度,为什么百度不公布固定服务器IP百度作为国内访问量最大的搜索引擎之一,其服务器架构早已从传统的单点机房模式转向分布式云计算体系,据百度公开技术文档显示,百度……

    2026年8月26日
    100
  • linux解除链接怎么操作?linux解除链接命令

    在Linux系统中解除链接主要通过unlink命令删除硬链接或rm命令移除符号链接,操作前务必确认目标类型,避免误删源文件导致数据丢失,很多刚接触Linux的朋友,看到文件管理器里那些带有箭头的小图标或者通过命令行看到的多个文件名指向同一块数据,往往会产生困惑:到底哪个才是真正的“文件”?删了其中一个,另一个还……

    2026年7月6日
    2000

发表回复

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