linux用户态操作GPIO首先需要export导出

news2024/11/16 13:55:29

在这里插入图片描述
在使用系统调用来实现 GPIO(通用输入输出端口)的输入输出操作时,同样需要先通过 export 属性文件来导出 GPIO,这是因为 Linux 内核对 GPIO 的管理和访问机制决定了这一点。

以下是具体原因:

内核设备模型:

在 Linux 系统中,GPIO 通常由内核通过设备树或平台代码进行管理。内核将 GPIO 引脚视为资源,通过 /sys/class/gpio 目录提供用户空间接口。为了简化和统一访问,内核要求在使用 GPIO 前,对 GPIO 进行声明和配置。

资源分配和管理:

通过向 export 文件写入 GPIO 编号,内核能确保相应的 GPIO 引脚被正确配置,并避免同一引脚被多个进程同时访问。这个过程涉及分配和初始化内核数据结构,以便用户空间程序可以安全地控制 GPIO。

动态配置:

不同的 SoC(系统级芯片)和开发板可能有不同的 GPIO 数量和用途。通过 export 操作,系统可以动态地配置和管理这些 GPIO 引脚,提高系统的灵活性和可维护性。

权限控制:

向 export 文件写入 GPIO 编号后,内核会在 /sys/class/gpio 目录下创建相应的目录和文件(如 gpioN 目录及其子文件),这些文件的权限可以通过标准的文件系统权限控制机制进行管理,确保只有授权的用户或进程可以访问这些 GPIO 引脚。

统一接口:

通过 export 和 unexport 文件,提供了一个统一的接口来管理 GPIO 引脚。这些操作不仅限于特定的硬件平台,而是适用于各种 Linux 支持的硬件,这种抽象使得用户空间程序更加通用。

使用示例

假设你要使用 GPIO 24 作为输出引脚,典型的步骤如下:

导出 GPIO:

sh
Copy Code
echo 24 > /sys/class/gpio/export
设置方向:

sh
Copy Code
echo out > /sys/class/gpio/gpio24/direction
设置值:

sh
Copy Code
echo 1 > /sys/class/gpio/gpio24/value  # 设置为高电平
echo 0 > /sys/class/gpio/gpio24/value  # 设置为低电平
释放 GPIO:
当不再需要使用该 GPIO 时,可以取消导出:

sh
Copy Code
echo 24 > /sys/class/gpio/unexport

总结

通过 export 文件来导出 GPIO 是为了让内核知道用户空间程序正在使用哪一个 GPIO 引脚,从而进行必要的初始化和管理,确保资源的正确分配和安全访问。这种机制使得 GPIO 的管理更加系统化和规范化,提高了系统的可靠性和灵活性。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1812679.html

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

相关文章

加密解密工具免费分享12款,最新文件加密软件排行榜已出炉!

2024年,信息技术的快速发展让我们步入了一个数字化的时代,数据的交换和存储变得异常频繁和庞大。与此同时,数据泄露和盗窃的风险也日益增加,让人们对数据/文件/文件夹传输过程中的安全产生了更深刻的理解和关注。因此,…

vue-cli 快速入门

vue-cli (目前向Vite发展) 介绍:Vue-cli 是Vue官方提供一个脚手架,用于快速生成一个Vue的项目模板。 Vue-cli提供了如下功能: 统一的目录结构 本地调试 热部署 单元测试 集成打包上线 依赖环境:NodeJ…

成功解决IndexError: index 0 is out of bounds for axis 1 with size 0

成功解决IndexError: index 0 is out of bounds for axis 1 with size 0 🛠️ 成功解决IndexError: index 0 is out of bounds for axis 1 with size 0摘要引言正文内容(详细介绍)🤔 错误分析:为什么会发生IndexError&…

flask基础知识1

目录 1.介绍 2.体验一下 3.配置参数: 4.路由和URL 1.路由 2.动态路由: 自定义转换器: 3.使用自定义转换器 5.url_for函数 6.request参数 7.处理响应: 1.重定向: 2.返回json数据: 3.返回模板&…

接口测试 Mock 工具使用 - 弱网测试

在当今移动互联网的时代,网络的形态非常多变,不光有 2G, 3G,4G,不同的制式、不同的速率,让我们移动应用运行的场景更加丰富。而且移动产品使用场景非常多变,如近地铁,上公交,进电梯&…

C#中的Web抓取:避免被阻挡

C# 是一种广泛应用于企业级项目和应用程序的多功能编程语言。它源自 C 系列语言,具有高效和强大的特点,使其成为任何开发人员工具包中不可或缺的一部分。 由于其广泛的应用,C# 提供了大量的工具,使开发人员能够解决复杂的解决方案…

DeepSpeed Mixture-of-Quantization (MoQ)

属于QAT (Quantization-Aware Training)的一种,训练阶段用量化。 特点是: 1. 从16-bit INT开始训练,逐渐减1bit,训练一些steps就减1bit,直至减至8bit INT; 2. (可选,不一定非用&a…

如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?

前言 昨天分享了在 .NET Core Console 项目中应用 NLog 写日志的详细例子,有几位小伙伴私信说 ASP.NET Core Web Api 项目中无法使用,其实在 ASP.NET Core Web Api 项目中应用 NLog 写日志,跟 .NET Core Console 项目是有些不一样的&#xf…

css font-family

知乎的font-family的设置理解 -apple-system, BlinkMacSystemFont 这两个值是为了确保在macOS和iOS系统上能够使用系统默认字体进行文本渲染。-apple-system特别为Safari浏览器设计,而BlinkMacSystemFont则主要针对基于Chromium的浏览器(如Chrome&#…

OS进程取样器OS Process Sampler执行CMD/Shell命令

Apache JMeter - Users Manual: Component Reference 1.背景 项目上最近需要测试一种很少用到的DICOM协议,但是网上资料很少,基本上可以总结为三种方案: 直接发送TCP 16进制数据包,但是参数化数据准备难度大通过开发封装jar包发送,需要开发组提供通过发送cmd命令给前置机…

【精选研报】#2形态识别,均线的收敛与发散

下载地址https://pan.baidu.com/s/1L1wPR7kXCb-ZbrgwFKcIvg?pwd8888

Qt线程间的同步(QMutex、QReadWriteLock、QSemaphone、QWaitCondition、信号槽)

同步方法: 1、互斥锁QMutex、函数互斥锁QMutexLocker。 2、读写锁QReadWriteLock、读锁QReadLockerr、写锁QWriteLocker。 3、信号量QSemaphore(QSystemSemaphore支持进程间的同步)。 4、条件变量QWaitConditon。 5、信号槽(第五个…

Jmeter07:函数

1 Jmeter组件:函数 1.1 是什么? 是程序中的封装单元(最小的),封装一些功能实现 1.2 为什么? 优点1:易读 易维护 优点2:实现功能复用 1.3 怎么用? 流程: 1&…

[ADS信号完整性分析]深入理解IBIS AMI模型设计:从基础到实践

在高速数字设计领域,信号完整性(SI)分析对于确保系统性能至关重要。IBIS AMI(Algorithmic Model Interface)模型作为一种强大的工具,能够帮助设计师在系统层面上评估和优化SERDES(串行器/解串器…

【STM32】基于I2C协议的OLED显示(利用U82G库)

【STM32】基于I2C协议的OLED显示(利用U82G库) 文章目录 【STM32】基于I2C协议的OLED显示(利用U82G库)一、实验背景二、U8g2介绍(一)获取(二)简介 三、实践(一)CubexMX配置(二)U8g2配…

【wiki知识库】06.文档管理接口的实现--SpringBoot后端部分

目录 一、🔥今日目标 二、🎈SpringBoot部分类的添加 1.调用MybatisGenerator 2.添加DocSaveParam 3.添加DocQueryVo 三、🚆后端新增接口 3.1添加DocController 3.1.1 /all/{ebokId} 3.1.2 /doc/save 3.1.3 /doc/delete/{idStr} …

Pixi.js学习 (五)动画效果与变量逻辑控制

目录 前言 一、动画效果 1.1 帧频 1.2 帧频函数 二、变量逻辑控制 2.1 定义变量的语法 2.2 使用变量控制逻辑 2.3 使用变量控制追加效果 三、实战 例题一:完成天天酷跑 例题一代码: 总结 前言 为了提高作者的代码编辑水品,作者在使用博客的时…

day35|1005.K次取反后最大化的数组和 134. 加油站135. 分发糖果

文章目录 python语法记录 sort格式 1005.K次取反后最大化的数组和思路方法一方法二 按照绝对值排序 教程🎈✨ 背住 按照绝对值进行降序排序的语法是: 134. 加油站思路方法一 教程解法方法二 暴力求解 135. 分发糖果思路方法一 总结 python语法记录 sort …

【AI大模型】Transformers大模型库(七):单机多卡推理之device_map

目录​​​​​​​ 一、引言 二、单机多卡推理之device_map 2.1 概述 2.2 自动配置,如device_map"auto" 2.3 手动配置,如device_map"cuda:1" 三、总结 一、引言 这里的Transformers指的是huggingface开发的大模型库&#x…

MapTR代码复现-nucenes数据集

前言 本节将对环视车道线MapTR算法进行复现,使用nuscenes-mini数据集! 一、环境配置 1、基础环境: ubuntu20.04,pytorch1.10.0,python3.8,cuda11.3 2、源码下载 下载地址: git clone http…