当前位置: 首页 > article >正文

Linux pinctrl与gpio子系统详解

pinctrl子系统概述pinctrl子系统是Linux内核中用于管理引脚复用和配置的框架。它允许开发者通过设备树或代码动态配置芯片引脚的功能如GPIO、I2C、SPI等。pinctrl子系统通过抽象硬件差异提供统一的API接口简化了驱动开发。pinctrl的核心数据结构包括pinctrl_dev和pinctrl_desc。pinctrl_desc描述引脚控制器的能力和操作集pinctrl_dev代表一个具体的引脚控制器实例。开发者需要实现pinctrl_ops和pinmux_ops中定义的回调函数。设备树中pinctrl的配置通常如下pinctrl: pinctrl1000000 { compatible vendor,pinctrl; reg 0x1000000 0x1000; uart0_default: uart0_default { mux { function uart0; groups uart0_tx, uart0_rx; }; config { bias-disable; drive-strength 8; }; }; };gpio子系统架构gpio子系统提供通用的GPIO操作接口包括方向设置、读写和中断处理。其核心是gpio_chip结构体描述GPIO控制器的属性和操作集。gpiolib作为中间层向上提供统一的用户接口向下抽象硬件差异。GPIO控制器在设备树中的典型定义gpio0: gpio2000000 { compatible vendor,gpio; reg 0x2000000 0x1000; ngpios 32; gpio-controller; #gpio-cells 2; interrupt-controller; #interrupt-cells 2; };pinctrl与gpio协同工作当GPIO功能需要引脚复用时pinctrl子系统先配置引脚为GPIO模式再由gpio子系统接管控制。例如将引脚P1.2设置为GPIO输出pinctrl { gpio_out: gpio_out { config { pins P1.2; function gpio; output-high; }; }; };驱动代码中通过以下方式申请和使用GPIOstruct gpio_desc *desc; desc gpiod_get(dev, led, GPIOD_OUT_HIGH); gpiod_set_value(desc, 0);驱动实现示例以下代码展示一个同时使用pinctrl和gpio子系统的LED驱动#include linux/module.h #include linux/gpio/consumer.h #include linux/pinctrl/consumer.h struct pinctrl *pinctrl; struct pinctrl_state *pins_default; struct gpio_desc *led_gpio; static int led_probe(struct platform_device *pdev) { pinctrl devm_pinctrl_get(pdev-dev); pins_default pinctrl_lookup_state(pinctrl, default); pinctrl_select_state(pinctrl, pins_default); led_gpio devm_gpiod_get(pdev-dev, led, GPIOD_OUT_LOW); gpiod_direction_output(led_gpio, 1); return 0; } static struct platform_driver led_driver { .driver { .name led-driver, .of_match_table of_match_ptr(led_of_match), }, .probe led_probe, }; module_platform_driver(led_driver);对应的设备树节点led { compatible vendor,led; pinctrl-names default; pinctrl-0 led_pins; gpios gpio0 15 GPIO_ACTIVE_HIGH; }; led_pins: led_pins { config { pins P2.7; function gpio; bias-pull-up; }; };中断处理实现gpio子系统支持中断功能以下示例展示如何配置GPIO中断static irqreturn_t button_isr(int irq, void *dev_id) { struct gpio_desc *desc dev_id; int val gpiod_get_value(desc); // 处理中断逻辑 return IRQ_HANDLED; } static int button_probe(struct platform_device *pdev) { struct gpio_desc *btn; int irq, ret; btn devm_gpiod_get(pdev-dev, button, GPIOD_IN); irq gpiod_to_irq(btn); ret request_irq(irq, button_isr, IRQF_TRIGGER_FALLING, button, btn); return ret; }调试与验证调试pinctrl和gpio子系统时可以通过以下sysfs节点获取信息/sys/kernel/debug/pinctrl/ /sys/class/gpio/常用的调试命令包括cat /proc/interrupts dmesg | grep pinctrl gpiodetect gpioinfo性能优化建议在高速GPIO应用中建议采取以下优化措施使用gpiolib提供的批量操作API如gpiod_set_array()对于频繁切换的GPIO考虑直接操作寄存器使用中断线程化减少延迟启用GPIO缓存功能避免重复配置通过合理使用pinctrl和gpio子系统可以构建稳定高效的嵌入式驱动。这两个子系统已在内核中得到充分验证适用于大多数嵌入式场景。 不畏惧挫折勇敢面对生活中的每一次考验每一次磨砺都在为我们的人生增添厚重的底色。每个清晨都是新的开始愿我们都能怀揣希望迎接每一天的挑战努力去创造属于自己的未来。有梦就去追无所畏惧让心灵在努力的拼搏中飞翔迎接生命中的每一次闪光与机会。坚持梦想坚定想法是生活的重要组成唯有在探索中不断前行才能收获生命中的精彩。每一次的微笑都是生命的馈赠愿我们都能在这优美的旋律中感受生活的真谛与温暖。https://github.com/ticbrewhete71/buw_4mhp/issues/48https://github.com/hellcourt42/29f_txuo/issues/46https://github.com/tadrits611/z3u_bxsp/issues/46https://github.com/willss46/k63_9o51/issues/47https://github.com/slakrishbirk86/uk5_aa9y/issues/47

相关文章:

Linux pinctrl与gpio子系统详解

pinctrl子系统概述 pinctrl子系统是Linux内核中用于管理引脚复用和配置的框架。它允许开发者通过设备树或代码动态配置芯片引脚的功能,如GPIO、I2C、SPI等。pinctrl子系统通过抽象硬件差异,提供统一的API接口,简化了驱动开发。 pinctrl的核心…...

基于龙蜥anolis在gpu上通过docker手动编译部署ollama

一、安装dockeryum install docker二、下载docker镜像docker pull registry.openanolis.cn/openanolis/anolisos:23.4三、编写Docker filevim DockerfileFROM registry.openanolis.cn/openanolis/anolisos:23.4MAINTAINER wangchaodong<wang479961270vip.qq.com>ARG ARCH…...

开箱即用:星图平台镜像快速部署Qwen3-VL:30B,Clawdbot打通飞书通道

开箱即用&#xff1a;星图平台镜像快速部署Qwen3-VL:30B&#xff0c;Clawdbot打通飞书通道 1. 前言&#xff1a;从私有化部署到飞书接入 在上一篇文章中&#xff0c;我们已经完成了Qwen3-VL:30B多模态大模型在CSDN星图AI云平台的私有化部署。现在&#xff0c;我们将聚焦于如何…...

BGP邻居建立全流程详解:从TCP握手到路由交换的完整抓包分析

BGP邻居建立全流程详解&#xff1a;从TCP握手到路由交换的完整抓包分析 在网络协议的世界里&#xff0c;BGP&#xff08;Border Gateway Protocol&#xff09;犹如一位经验丰富的外交官&#xff0c;负责在不同自治系统&#xff08;AS&#xff09;之间建立信任关系并交换路由信息…...

基于STM32的多模态老人安全监护终端设计

1. 项目概述1.1 系统设计背景与工程定位老龄化社会进程加速带来显著的公共健康监护挑战。临床统计表明&#xff0c;65岁以上人群年均跌倒发生率超过30%&#xff0c;其中约20%导致严重功能损伤&#xff1b;而阿尔茨海默病早期患者走失事件中&#xff0c;72小时内未获救助者死亡率…...

Realistic Vision V5.1负面提示词避坑指南:精准解决手部崩坏与塑料CG感

Realistic Vision V5.1负面提示词避坑指南&#xff1a;精准解决手部崩坏与塑料CG感 1. 为什么需要关注负面提示词 在AI图像生成领域&#xff0c;负面提示词(Negative Prompt)的重要性常常被低估。对于Realistic Vision V5.1这样的顶级写实模型来说&#xff0c;恰当的负面提示…...

为什么你的FPGA断电就‘失忆’?深入解析SRAM与FLASH配置方案差异

为什么你的FPGA断电就“失忆”&#xff1f;SRAM与FLASH配置方案全解析 每次断电后FPGA就像被施了“失忆咒”&#xff1f;这背后其实是存储介质的特性差异在作祟。作为硬件工程师&#xff0c;我们常遇到这样的场景&#xff1a;实验室调试时一切正常&#xff0c;设备断电重启后逻…...

亚洲美女-造相Z-Turbo效果对比:Z-Image-Turbo基模 vs LoRA微调版实测分析

亚洲美女-造相Z-Turbo效果对比&#xff1a;Z-Image-Turbo基模 vs LoRA微调版实测分析 想用AI画出好看的亚洲美女图片&#xff0c;但总觉得生成的图片风格不对味&#xff0c;或者细节不够精致&#xff1f;今天&#xff0c;我们就来实测一个专门针对亚洲美女形象进行优化的AI绘画…...

4个步骤掌握ComfyUI-WanVideoWrapper:AI视频生成工作流从搭建到精通

4个步骤掌握ComfyUI-WanVideoWrapper&#xff1a;AI视频生成工作流从搭建到精通 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper AI视频生成技术正快速发展&#xff0c;但许多开发者在模型部署过…...

基于卷积神经网络的FRCRN模型结构详解与调优指南

基于卷积神经网络的FRCRN模型结构详解与调优指南 你有没有遇到过这样的烦恼&#xff1f;在嘈杂的咖啡馆里录制的语音&#xff0c;回放时背景人声和咖啡机噪音混在一起&#xff0c;根本听不清&#xff1b;或者&#xff0c;一段重要的会议录音&#xff0c;因为设备底噪和空调风声…...

当电脑按下电源键没反应时:硬件自检故障排查全图解(2023新版)

当电脑按下电源键没反应时&#xff1a;硬件自检故障排查全图解&#xff08;2023新版&#xff09; 1. 故障排查前的准备工作 遇到电脑按下电源键毫无反应的情况&#xff0c;先别急着拆机。正确的准备工作能帮你事半功倍。首先确保电源插座正常供电——这个看似简单的步骤&#x…...

嵌入式JWT RS256签名验证库深度解析

1. JWT_RS256库深度解析&#xff1a;面向嵌入式系统的JWT RS256签名验证实现1.1 应用背景与工程定位在物联网边缘设备身份认证场景中&#xff0c;JWT&#xff08;JSON Web Token&#xff09;已成为服务端与终端设备间轻量级、自包含的身份凭证标准。RS256&#xff08;RSA Signa…...

基于国密 SM3/SM4/SM2 的前后端数据完整性校验实战(附完整代码)

基于国密 SM3/SM4/SM2 的前后端数据完整性校验实战(附完整代码) 在政务、金融、电力等关键领域,数据在传输过程中不仅要保证机密性(不被窃取),还要保证完整性(不被篡改)。国密算法(SM2/SM3/SM4)作为国内标准,正被越来越多项目采用。本文将以一个真实项目中的前端代码…...

别再直接`helm install`了!遇到API错误时,我的‘下载-解压-排查-安装’四步排查法

Helm安装避坑指南&#xff1a;四步排查法解决90%的部署问题 每次看到终端里飘红的Error: INSTALLATION FAILED提示&#xff0c;是不是感觉血压瞬间飙升&#xff1f;作为Kubernetes生态中最受欢迎的包管理工具&#xff0c;Helm虽然极大简化了应用部署流程&#xff0c;但各种API版…...

别再死磕ICEM了!用Fluent Meshing搞定旋转周期性网格,手把手教你从SpaceClaim到求解器

Fluent Meshing旋转周期性网格实战&#xff1a;从几何处理到求解验证 在计算流体动力学&#xff08;CFD&#xff09;领域&#xff0c;周期性边界条件的处理一直是叶轮机械、换热器等领域仿真的关键环节。传统工作流中&#xff0c;ICEM CFD常被视为网格划分的"黄金标准&qu…...

迭代优化实战:如何用SPIRAN ART SUMMONER一步步完善你的作品

迭代优化实战&#xff1a;如何用SPIRAN ART SUMMONER一步步完善你的作品 1. 理解SPIRAN ART SUMMONER的核心优势 SPIRAN ART SUMMONER不同于普通的图像生成工具&#xff0c;它将《最终幻想10》的美学理念深度融入AI生成过程。这个工具最独特的地方在于它的"迭代优化&quo…...

StardewXnbHack:突破《星露谷物语》资源限制的创新工具

StardewXnbHack&#xff1a;突破《星露谷物语》资源限制的创新工具 【免费下载链接】StardewXnbHack A simple one-way XNB unpacker for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/st/StardewXnbHack StardewXnbHack是一款专为《星露谷物语》设计的XN…...

时间空间限制和数据范围

在算法中&#xff0c;写对代码只是第一步&#xff0c;更快&#xff0c;时间更少&#xff0c;不溢出才是核心&#xff0c;如果没有考虑时间和空间的限制&#xff0c;就会导致TLE(超时&#xff09;和MLE&#xff08;内存超限&#xff09;。一、时间空间限制时间限制&#xff1a;1…...

跨地域双活集群:分布式database TDengine异地多活的高可用部署指南

随着大型企业向全球化与云原生演进&#xff0c;传统的“同城主备”架构已经无法满足极端灾难&#xff08;如地震、区域断网&#xff09;下的业务连续性需求。“异地多活&#xff08;Geo-Active-Active&#xff09;”正成为现代顶级架构的终极目标。跨地域双活集群意味着分布在数…...

纸张计数显示装置:基于STM32与电容传感技术的高精度检测系统

纸张计数显示装置&#xff1a;基于STM32与电容传感技术的高精度检测系统 【免费下载链接】2019-Electronic-Design-Competition 【电赛】2019 全国大学生电子设计竞赛 &#xff08;F题&#xff09;纸张数量检测装置 &#xff08;基于STM32F407 & FDC2214 & USART HMI&a…...

STM32F103C8T6上跑ThreadX:CubeMX配置避坑与MDK工程搭建全记录

STM32F103C8T6移植ThreadX实战&#xff1a;从CubeMX配置到MDK工程搭建的深度解析 1. 环境准备与工具链选择 在开始移植ThreadX之前&#xff0c;确保你的开发环境已经准备就绪。对于STM32F103C8T6这款经典的Cortex-M3内核MCU&#xff0c;我们需要以下工具&#xff1a; STM32Cube…...

如何用OpenLRC实现音频到多语言字幕的智能转换

如何用OpenLRC实现音频到多语言字幕的智能转换 【免费下载链接】openlrc Transcribe and translate voice into LRC file using Whisper and LLMs (GPT, Claude, et,al). 使用whisper和LLM(GPT&#xff0c;Claude等)来转录、翻译你的音频为字幕文件。 项目地址: https://gitc…...

【无标题】游昕游戏(安徽游昕网络科技有限公司) 是 2018 年成立于合肥的手游公司,主打 正版怀旧复刻、三端互通、零氪 / 散人友好 的长线运营模式

游昕游戏&#xff08;安徽游昕网络科技有限公司&#xff09; 是 2018 年成立于合肥的手游公司&#xff0c;主打 正版怀旧复刻、三端互通、零氪 / 散人友好 的长线运营模式&#xff0c;核心是传奇、奇迹、英雄年代、热血江湖等经典 IP 的官服复刻。一、公司基本信息全称&#xf…...

OpenCV图像缩放实战:从cv2.resize()参数选择到性能优化

1. 从零理解cv2.resize()的核心参数 第一次接触OpenCV的图像缩放功能时&#xff0c;我也被那一堆参数搞得头晕眼花。后来在项目中反复调试才发现&#xff0c;掌握这几个关键参数组合&#xff0c;就能解决90%的图片尺寸调整问题。先来看这个函数的基本结构&#xff1a; cv2.resi…...

Qwen3模型AE视频制作辅助:根据脚本自动生成分镜视觉预览

Qwen3模型AE视频制作辅助&#xff1a;根据脚本自动生成分镜视觉预览 1. 引言 如果你做过视频&#xff0c;尤其是那种需要精心设计分镜和视觉效果的片子&#xff0c;肯定有过这样的经历&#xff1a;脑子里有个很棒的想法&#xff0c;但要把这个想法变成一个个具体的镜头画面&a…...

RetinaFace效果实测:在低分辨率监控截图中仍保持92%以上关键点定位精度

RetinaFace效果实测&#xff1a;在低分辨率监控截图中仍保持92%以上关键点定位精度 想象一下&#xff0c;你手头有一张从老旧监控摄像头截取的模糊照片&#xff0c;人脸只有几十个像素点大小&#xff0c;还带着点运动模糊。你想从中精准定位出眼睛、鼻子和嘴角的位置——这听起…...

GitHub Trending霸榜!深度解析AI Coding辅助神器 Superpowers

AI 编程已经不能说是“火”了&#xff0c;而是切切实实改变了程序员的工作方式&#xff08;低情商&#xff1a;已经在抢程序员的工作了&#xff09;。就拿博主我自己来说&#xff0c;作为一个在互联网摸爬滚打 10 年的“资深老兵”&#xff0c;过去半年里我也已经从手写代码转向…...

Linux用户与组管理及文件权限配置详解

Linux用户与组管理用户&#xff08;user&#xff09; 每个使用Linux系统的个体或进程都需要一个用户账户&#xff0c;系统资源访问的最小权限单元。root用户&#xff1a;UID0&#xff0c;拥有最高权限 系统用户&#xff1a;UID 1-999&#xff08;通常用于服务进程&#xff09; …...

Janus-Pro-7B实现简单编译器前端:词法分析与语法树生成演示

Janus-Pro-7B实现简单编译器前端&#xff1a;词法分析与语法树生成演示 最近在琢磨怎么把大模型的能力用到计算机科学的教学里&#xff0c;特别是编译原理这块。编译原理听起来挺唬人的&#xff0c;什么词法分析、语法树&#xff0c;很多同学一上来就被这些概念给绕晕了。传统…...

伏羲天气预报实时进度监控:Web界面日志输出与异常诊断方法

伏羲天气预报实时进度监控&#xff1a;Web界面日志输出与异常诊断方法 1. 系统概述 伏羲天气预报系统&#xff08;FuXi&#xff09;是复旦大学开发的15天全球天气预报级联机器学习系统&#xff0c;基于Nature npj Climate and Atmospheric Science发表的论文实现。这个系统通…...