首页 > 系统相关 >Linux下用户空间控制GPIO

Linux下用户空间控制GPIO

时间:2024-05-27 13:00:43浏览次数:27  
标签:Linux 用户 value echo sys gpio GPIO class

文章目录

参考文章

https://blog.csdn.net/qq_41483419/article/details/134015533

https://blog.csdn.net/baidu_38661691/article/details/97147652

一、简介

在用户空间中控制GPIO:

​ /sys/class/gpio为通用输入输出(GPIO)设备类的子目录,用于与外部设备进行数字输入和输出的通信。

知识点补充:/sys/class 该目录下包含所有注册在kernel里面的设备类型,这是按照设备功能分类的设备模型,每个设备类型表达具有一种功能的设备。每个设备类型子目录下都是这种设备类型的各种具体设备的符号链接,这些链接指向/sys/devices/name下的具体设备。设备类型和设备并没有一一对应的关系,一个物理设备可能具备多种设备类型;一个设备类型只表达具有一种功能的设备,比如:系统所有输入设备都会出现在/sys/class/input之下,而不论它们是以何种总线连接到系统的。(/sys/class也是构成linux统一设备模型的一部分)

​ 在/sys/class/gpio/下有个export文件,向export文件写入要操作的GPIO号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO输入或者输出模式,而value可控制GPIO的状态或者读取状态。

/sys/class/gpio/目录下各个文件说明:
/sys/class/gpio/export文件用于通知系统需要导出控制的GPIO引脚编号;
/sys/class/gpio/unexport 用于通知系统取消导出;
/sys/class/gpio/gpioX/direction文件,可以写入in(设置输入方向)或out(设置输出方向);
/sys/class/gpio/gpioX/value文件是可以读写GPIO状态;
/sys/class/gpio/gpiochipX目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号,寄存器名称,引脚总数;其中X表示具体的引

​ 需要导出的GPIO编号(GPIO Number)往往取决于具体的硬件设计和应用需求。每个GPIO口在硬件设计图(如原理图)中通常都有对应的编号,这个就是GPIO的物理编号。而在编程中使用的GPIO编号则取决于操作系统和驱动如何映射这些物理GPIO口。在许多情况下,硬件设计师或者系统集成者会提供一个文档==(芯片手册)==,列出了各个GPIO口的物理编号和它们的功能(比如连接到哪个设备、控制什么信号等)。在这个文档的帮助下,你可以确定你在应用程序中需要使用哪个GPIO口,然后查找相应的GPIO编号。

在某些情况下,你可能需要查看内核源代码或者硬件抽象层(HAL)的源代码来找出物理GPIO口和GPIO编号之间的映射关系。

缺点:这种方式一般不采用,为了gpio使用的安全性,一般是不将gpio的使用权暴露给应用层的,即sys/class/下没有gpio节点。

二、GPIO接口原理图

通过GPIO控制LED1~3的亮灭(LED4被占用为常亮状态)

设备GPIO的物理编号编程中使用的GPIO编号
LED1GPIO49465
LED2GPIO51467
LED3GPIO50466

三、在用户空间控制GPIO步骤

  1. 执行 echo <GPIO_Number> > /sys/class/gpio/export 导出 GPIO 管脚,将 GPIO_Number 替换为你想操作的 GPIO 编号。

  2. 检查 /sys/class/gpio/gpio<GPIO_Number> (将 GPIO_Number 替换为你想操作的 GPIO 编号)目录下是否有 direction 和 value 文件。

    物理GPIO口和GPIO编号之间的映射关系: 参考自己所用芯片的手册,我的在 Linux外设驱动开发参考.pdf

LED1

    ## LED1
    echo 465 > /sys/class/gpio/export
    echo out > /sys/class/gpio/gpio465/direction
    echo 1 > /sys/class/gpio/gpio465/value
    echo 0 > /sys/class/gpio/gpio465/value

请添加图片描述

LED2

    ## LED2
    echo 467> /sys/class/gpio/export
    echo out > /sys/class/gpio/gpio467/direction
    echo 1 > /sys/class/gpio/gpio467/value
    echo 0 > /sys/class/gpio/gpio467/value

请添加图片描述

LED3

    ## LED3
    echo 466 > /sys/class/gpio/export
    echo out > /sys/class/gpio/gpio466/direction
    echo 1 > /sys/class/gpio/gpio466/value
    echo 0 > /sys/class/gpio/gpio466/value

LED1与LED2

    ## LED1与LED2
    
    echo 465 > /sys/class/gpio/export
    echo 467 > /sys/class/gpio/export
    echo out > /sys/class/gpio/gpio465/direction
    echo out > /sys/class/gpio/gpio467/direction
    echo 1 > /sys/class/gpio/gpio465/value
    echo 1 > /sys/class/gpio/gpio467/value
    echo 0 > /sys/class/gpio/gpio465/value
    echo 0 > /sys/class/gpio/gpio467/value

请添加图片描述

标签:Linux,用户,value,echo,sys,gpio,GPIO,class
From: https://blog.csdn.net/weixin_56438859/article/details/139234001

相关文章

  • 网站中用户昵称规则设计、正则表达式与JS实现——基于微信昵称规则
    微信的昵称规则为社交平台提供了一个良好的参考框架。本文将探讨如何基于微信昵称规则,为网站设计一套合理的用户昵称规则,并使用JavaScript(JS)和正则表达式来实现这些规则,同时确保昵称满足最小长度的要求,并支持最大18位长度。一、微信昵称规则概览微信昵称规则主要包括:修改次数......
  • 网站中用户昵称规则设计、正则表达式与JS实现——基于微信昵称规则
    微信的昵称规则为社交平台提供了一个良好的参考框架。本文将探讨如何基于微信昵称规则,为网站设计一套合理的用户昵称规则,并使用JavaScript(JS)和正则表达式来实现这些规则,同时确保昵称满足最小长度的要求,并支持最大18位长度。一、微信昵称规则概览微信昵称规则主要包括:修改次数......
  • Kali linux更新太慢?
    1.打开终端输入sudovim/etc/apt/sources.list2.找到键盘上的开头是 lns键点击左下角就后出现“插入”3.然后加入以下任意一种国源#阿里云debhttp://mirrors.aliyun.com/kalikali-rollingmainnon-freecontribdeb-srchttp://mirrors.aliyun.com/kalikali-r......
  • 网站中用户昵称规则设计、正则表达式与JS实现——基于微信昵称规则
    微信的昵称规则为社交平台提供了一个良好的参考框架。本文将探讨如何基于微信昵称规则,为网站设计一套合理的用户昵称规则,并使用JavaScript(JS)和正则表达式来实现这些规则,同时确保昵称满足最小长度的要求,并支持最大18位长度。一、微信昵称规则概览微信昵称规则主要包括:修改次数......
  • 网站中用户昵称规则设计、正则表达式与JS实现——基于微信昵称规则
    微信的昵称规则为社交平台提供了一个良好的参考框架。本文将探讨如何基于微信昵称规则,为网站设计一套合理的用户昵称规则,并使用JavaScript(JS)和正则表达式来实现这些规则,同时确保昵称满足最小长度的要求,并支持最大18位长度。一、微信昵称规则概览微信昵称规则主要包括:修改次数......
  • 网站中用户昵称规则设计、正则表达式与JS实现——基于微信昵称规则
    微信的昵称规则为社交平台提供了一个良好的参考框架。本文将探讨如何基于微信昵称规则,为网站设计一套合理的用户昵称规则,并使用JavaScript(JS)和正则表达式来实现这些规则,同时确保昵称满足最小长度的要求,并支持最大18位长度。一、微信昵称规则概览微信昵称规则主要包括:修改次数......
  • Linux C编程一站式学习-x86汇编基础
    要彻底搞清楚C语言的原理,必须要深入到指令一层去理解。你写一行C代码,编译器会生成什么样的指令,要做到心中有数。本章介绍汇编程序的一些基础知识。1.最简单的汇编程序#PURPOSE:Simpleprogramthatexitsandreturnsa#statuscodebacktotheLinuxkernel##INPUT:no......
  • Nodejs 在实战中的校验用户信息(JWT、localStorage、Cookie)
    本文分别站在了客户端(reactjs)与服务端(nodejs)的角度,总结了整个用户校验过程各自的操作。一概念明晰1.1localStorage和Cookie都是存储数据的方式localStorage:储存在客户端(浏览器)本地Cookie:存储在服务端,安全性更高。(是一个HTTP请求标头,由服务器通过 Set-Cookie 设置,......
  • 08Django项目--用户管理系统--查(前后端)
    对应视频链接点击直达@TOC一些朋友加我Q反馈,希望有每个阶段的完整项目代码,那从今天开始,我会上传完整的项目代码。用户管理,简而言之就是用户的增删改查。08项目点击下载,可直接运行(含数据库)链接:https://pan.baidu.com/s/1acb9eQt18ykxFO6TWKCRIw?pwd=1314提取码:1314查......
  • Linux基础
    Linux基础基础知识系统结构Kernel(内核):Linux内核是操作系统的核心部分,负责管理系统的资源、提供硬件与软件的接口、调度进程等。它是Linux系统最基本的组件,也是与硬件交互的桥梁。Shell(命令解释器):Shell是用户与Linux系统交互的主要方式,用户通过Shell可以输入命令来操作系统、......