嵌入式linux--sysfs文件系统以及操作GPIO

在这里插入图片描述

sysfs文件系统

在Linux系统中,/sys路径是一个特殊的虚拟文件系统(Virtual File System),用于提供对内核和设备的运行时信息的访问。它是sysfs文件系统的挂载点,提供了一种以文件和目录形式表示系统设备、总线、驱动程序和其他内核对象的方式。

/sys路径的主要作用如下:

  1. 设备和总线信息:/sys路径下的子目录包含了与系统设备和总线相关的信息。例如,你可以在/sys/class目录下找到各种设备的类别目录,如GPIO、I2C、SPI等。通过浏览这些目录和文件,你可以获取设备的属性、状态和配置信息。

  2. 内核对象:/sys路径还提供了对内核对象的访问。例如,你可以在/sys/kernel目录下找到与内核相关的信息,如内核版本、参数和模块信息等。这些信息可以用于系统的监控和诊断。

  3. 调试接口:/sys路径提供了一些调试接口,允许你对内核和设备进行调试和配置。通过读写特定的文件,在运行时可以修改某些内核参数和设备属性,进行调试和性能优化。

  4. 动态设备管理:/sys路径中的一些目录用于动态设备管理。例如,当你插入一个USB设备时,相关的设备信息将在/sys/bus/usb目录下动态创建,你可以通过监视这些目录和文件来检测设备的插入和移除事件。

/sys路径为用户空间提供了一种方便的方式来获取和配置内核和设备的信息。通过浏览和操作/sys路径下的文件和目录,你可以获取到有关系统硬件、内核对象和设备的详细信息,以及对其进行调试和配置的能力。

一个简单的gpio

在Linux中,可以通过C程序来操作GPIO(General Purpose Input/Output)引脚,实现对外部设备的控制和数据交互。操作GPIO的原理是通过文件系统中的GPIO设备文件来读写GPIO引脚的状态。下面是一个简单的GPIO控制的示例程序:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

#define GPIO_PIN 17  // 要操作的GPIO引脚号

int main() {
    int fd;
    char buf[2];

    // 打开GPIO设备文件
    fd = open("/sys/class/gpio/gpio17/value", O_RDWR);
    if (fd < 0) {
        perror("无法打开GPIO设备文件");
        exit(1);
    }

    // 设置GPIO引脚为输出模式
    write(fd, "out", 3);

    // 控制GPIO引脚输出高电平
    write(fd, "1", 1);
    sleep(1);  // 延时1秒

    // 控制GPIO引脚输出低电平
    write(fd, "0", 1);
    sleep(1);  // 延时1秒

    // 关闭GPIO设备文件
    close(fd);

    return 0;
}

上述示例程序中,我们首先通过open()函数打开GPIO设备文件/sys/class/gpio/gpio17/value,其中gpio17表示要操作的GPIO引脚号,value表示GPIO引脚的状态文件。接着,通过write()函数设置GPIO引脚为输出模式,并通过write()函数向GPIO设备文件写入10来控制GPIO引脚输出高电平或低电平。最后,通过close()函数关闭GPIO设备文件。

请注意,在使用GPIO之前,你需要确保GPIO引脚已经被正确配置和映射到用户空间。这通常需要进行一些额外的设置,如导出GPIO引脚、设置引脚方向等。具体的设置步骤可以参考Linux系统的文档和GPIO驱动的相关文档。

要编译上述示例程序,可以使用以下命令:

gcc gpio_example.c -o gpio_example

然后,运行生成的可执行文件gpio_example即可控制GPIO引脚的状态。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AIGC】一起学习prompt提示词(4/4)【经典】【15种提示词技巧】

写的时候并没有设计好&#xff0c;要做多少期&#xff0c;还是有始有终的比较好&#xff0c;为了方便阅读&#xff0c;我把之前的3期&#xff0c;改下名字&#xff0c;放到这里。 【AIGC】一起学习prompt提示词&#xff08;1/4&#xff09; 内容摘要&#xff1a;提示词是什么…

蓝眼开源云盘部署全过程(手动安装)

环境概述&#xff1a; 系统-Centos7.4 数据库-MySQL8 云盘系统-Tank4.0.1 前提&#xff1a;操作系统已完成安装&#xff0c;有外部网络。 一.安装数据库 cd到合适的目录进行下载安装操作&#xff0c;期间不要切换出去。 wget https://dev.mysql.com/get/mysql80-community-r…

【Android】统一系统动画

需求&#xff1a;除panel动画效果为弹出之外&#xff0c;其余的应用效果为渐入渐出 从系统层面统一把控动画效果&#xff0c;而不是单个应用自己处理 Android系统版本&#xff1a;9.0 代码地址 \frameworks\base\core\res\res\values\styles.xml 当时看注释&#xff0c;以为…

图像分类:弥合像素和理解之间的差距

一、介绍 在人工智能的广阔领域中&#xff0c;图像分类作为一种关键应用脱颖而出&#xff0c;它无缝地融合了计算机视觉和机器学习的复杂性。图像分类的核心是训练机器对数字图像中的对象或场景进行识别和分类。这项技术有着广泛的应用&#xff0c;从自动驾驶汽车和医疗诊断到社…

VSCode 使用CMakePreset找不到cl.exe编译器的问题

在用vscode开发c项目的时候&#xff0c;使用预先配置的CMakePresets.json可以把一些特定的cmake选项固定下来&#xff0c;在配置时直接使用 "cmake --config --preset presetname"就可以进行配置&#xff0c;免去在命令行输入过多的配置参数。 但是在vscode中&#…

Java实现俄罗斯方块

规则 1.方块会从上方缓慢下落&#xff0c;玩家可以通过键盘上的上下左右键来控制方块。 2.方块移到区域最下方或是着地到其他方块上无法移动时&#xff0c;就会固定在该处&#xff0c;而新的方块出现在区域上方开始落下。 3.当区域中某一列横向格子全部由方块填满&#xff0c;…

阿里云腾讯云大比拼!阿里云99,腾讯云88!

首先&#xff0c;我们来看一下阿里云和腾讯云在云服务器价格上的差异。根据官方公布的信息&#xff0c;阿里云在双11大促活动中推出了全年最低价的云服务器&#xff0c;最低价格为87元1年。而腾讯云的云服务器价格稍高&#xff0c;最低为88元1年。虽然价格上的差距很小&#xf…

javaweb---maventomcat使用教程

文章目录 今日内容0 复习昨日1 Maven1.0 引言1.1 介绍1.2 下载1.3 安装1.3.1 解压1.3.2 配置环境变量1.3.3 测试 1.4 仓库1.5 Maven配置1.5.1 修改仓库位置1.5.2 设置镜像 2 IDEA - MAVEN2.1 idea关联maven2.2 创建java项目2.3 java项目结构2.4 pom2.5 导入依赖2.5.1 查找依赖2…

CocosCreator3.8神秘面纱 CocosCreator 项目结构说明及编辑器的简单使用

我们通过Dashboard 创建一个2d项目&#xff0c;来演示CocosCreator 的项目结构。 等待创建完成后&#xff0c;会得到以下项目工程&#xff1a; 一、assets文件夹 assets文件夹&#xff1a;为资源目录&#xff0c;用来存储所有的本地资源&#xff0c;如各种图片&#xff0c;脚本…

synchronized jvm实现思考

底层实现时&#xff0c;为什么使用了cxq队列和entryList双向链表&#xff1f;这里为什么不跟AQS中使用一个队列就行了&#xff0c;加了一个entryList的目的是为了什么&#xff1f; 个人理解这里多一个entryList&#xff0c;可能是用于减少频繁的cas操作。假设存在很多锁竞争时&…

[Unity3D] C# 十进制、二进制、十六进制 之间进制的转换

//十进制 --> 二进制 int data 100; string bin Convert.ToString(data, 2); // “1100100”//十进制 --> 十六进制 int data 100; string hex “”;hex Convert.ToString(data, 16); // “64” hex “0X” Convert.ToString(data, 16); // “0X64” hex string.…

为开发GPT-5,OpenAI向微软寻求新融资

11月14日&#xff0c;金融时报消息&#xff0c;OpenAI正在向微软寻求新一轮融资&#xff0c;用于开发超级智能向AGI&#xff08;通用人工智能&#xff09;迈进&#xff0c;包括最新模型GPT-5。 最近&#xff0c;OpenAI召开了首届开发者大会&#xff0c;推出了GPT-4 Turbo、自定…

js添加dom到指定div之后,并给添加的dom类名,然后设置其样式,以及el-popover层级z-index过高问题解决。

遇到一个需求,Vue项目做一个表格,要求表头与表格内容分开,如下效果所示,表头与表格有个高度间隔边距(箭头所示),因为默认我们的el-table的表头与内容是一起的: 思路:通过querySelector获取el-table__header-wrapper元素,通过createElement创建一个div,通过 newElem…

Postman配置环境请求接口

一、准备配置dev、test、demo、eprod 二、使用切换环境变量调用接口 三、使用登录接口自动获取token

【吞噬星空】罗峰成功抵达虬龙星,宇宙超级富二代登场,不容错过

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料《吞噬星空》93集&#xff0c;在虬龙星港口&#xff0c;当罗峰的飞船一进入&#xff0c;牵引信号就立刻响起&#xff0c;像一道无形的指引线&#xff0c;将他飞船牵引至指定的停靠区域。罗峰踏出飞船…

如何检查 Docker 和 Kubernetes 是否可以访问外部网络,特别是用于拉取镜像的仓库?

要检查 Docker 和 Kubernetes 是否可以访问外部网络&#xff0c;尤其是用于拉取容器镜像的仓库&#xff0c;您可以按照以下步骤进行&#xff1a; 1. 检查节点的网络连接 首先&#xff0c;您需要确保 Kubernetes 节点能够访问外部网络。这可以通过在节点上执行 ping 命令来测试…

VN5620以太网测试——DoIP配置

文章目录 前言一、DoIP简介二、Vector Hardware Configuration三、Diagnostics/ISO TP Configuration四、Diagnostic Console五、添加Ethernet Packet Builder前言 CANoe(CAN open environment)VN5620 :是一个紧凑而强大的接口,用于以太网网络的分析、仿真、测试和验证。 V…

【6】Spring Boot 3 集成组件:knift4j+springdoc+swagger3

目录 【6】Spring Boot 3 集成组件&#xff1a;knift4jspringdocswagger3OpenApi规范SpringFox Swagger3SpringFox工具&#xff08;不推荐&#xff09; Springdoc&#xff08;推荐&#xff09;从SpringFox迁移引入依赖配置jAVA Config 配置扩展配置&#xff1a;spring securit…

istio安装文档

1、重装命令 istioctl manifest generate --set profiledemo | kubectl delete --ignore-not-foundtrue -f - 2、下载 参考&#xff1a;02、istio部署到k8s中 - 简书 (jianshu.com) 参考 Istio / 入门 curl -L https://istio.io/downloadIstio | ISTIO_VERSION1.20.0 TAR…

[工业自动化-22]:西门子S7-15xxx编程 - 软件编程 - 如何PLC建立用户界面: SIMATIC 面板式HMI 或工控机PC HMI

目录 前言&#xff1a; 一、PLC&#xff08;可编程逻辑控制器&#xff09;的用户界面支持方式 1.1 概述 1.2 西门子&#xff08;Siemens&#xff09;的人机界面&#xff08;HMI&#xff09;支持多种类型 1.3 PC HMI VS SIMATIC HMI 二、PC—HMI—PLC连接架构的实现 三、…