虚拟pinctrl驱动

之前呢,我们讲解了在内核中pinctrl子系统是怎么实现的,今天我们来尝试一下自己去写一个pinctrl子系统:

首先呢,我们来看看一个pinctrl子系统需要做的事情:

上面的话,我们看了一个pinctrl子系统需要的三大功能以及在驱动程序中对应的三大结构体

下面我们来看看编写驱动程序时我们需要干什么:

我们是需要去搭建俩个驱动程序的,一个是pin controller设备节点的驱动程序,一个是client设备节点的驱动程序

设备树文件已经给出了,下面我们来看看驱动程序应该怎么去写:

下面我们来慢慢看:

我们先来把驱动程序的框架搭建出来:

接着就是去构建platform_deiver结构体了:


这样子在驱动程序和设备树节点通过compatible属性匹配后,probe函数就会被调用,那么在这里面,我们就需要去解析设备树,也就是需要去实现Pinctrl desc结构体:

首先就是分配pinctrl desc结构体了:

接着就是去设置了:

第一个作用就是去描述引脚了,单个引脚就只需要靠pins npins去描述就行,对于一组引脚,我们就需要去配置相应的结构体virtual_pctrl_ops去进行描述了:

接着就是实现这个结构体里面的函数指针了:第一个就是获取一共有多少组,我们这里为了图方便,这里一个引脚就代表一组吧:

所以我们这个函数只需要去返回引脚的数量就行了

接着就是获取组的名字:

一样的,我们只需要去返回pins结构体数组里面的名字就行

接着就是去获取组的引脚:

那个把设备树上面的信息转换成mapping结构体我们后面再讲,因为有点复杂,我们接着来看probe函数:

接着就是去设置pinctrl子系统的第二个功能,也就是引脚复用了,一样的,我们只需要去配置好virtual_pmx_ops结构体就可以了:

先来看第一个函数,这个是用来查看一共有多少个功能的:这里面全是静态的,是比较简单的,其实还有一种动态的从设备树里面去获取的方法

第二个就是去获取这个功能的名字了:

第三个就是获取指定功能的引脚组:

最后一个也就是最重要的,也就是去把对应的组设置成指定的功能:但是因为没有硬件寄存器去给我们操作,所以我们去打印信息就行了,毕竟只是虚拟的嘛,所以没有必要去搞的那么复杂

那么pinctrl子系统的第二个功能,引脚复用就讲完了,我们再回看probe函数:

第三个功能就是去配置引脚功能了:

这样子就大概虚拟的把指定的引脚设置成相应的配置模式了

那么我们去设置pinctrl desc结构体就搞完了,最后去注册就行了:

那么我们就只剩下怎么去从设备树中去注册一个Mapping结构体了,client驱动只需要去写一个简单的platform_driver就可以了

接着我们来看看怎么去注册mapping结构体:

那么到这里,我们就彻底讲完啦,完结,撒花(doge.)

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

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

相关文章

Spring Boot自动配置原理解析

文章目录 前言一、SpringBootConfiguration二、EnableAutoConfiguration2.1、AutoConfigurationPackage2.2、Import(AutoConfigurationImportSelector.class) 三、ComponentScan四、自动配置源码4.1、获取所有候选的自动配置类4.2、过滤不满足条件的自动配置 总结 前言 在常规的…

2025/3/20 心得

第一题。 M. B - Smartphone Addiction 问题描述 高桥的智能手机电池容量为NN毫安时。在时间0.50.5、1.51.5、2.52.5等时刻(即对于每个整数nn,时间为n 0.5n0.5),电池电量减少11毫安时。 高桥将在时间00带着充满电的手机离开…

MQTT之重复消息(6、在项目中遇到的问题)

项目背景: 在 Spring Boot MQTT 5.0 环境中,RTU设备向SpringBoot平台发送心跳数据、业务监控数据。同时SpringBoot平台可以向RTU设备下发指令,RTU在执行完指令之后向平台发送响应数据。 问题一、SpingBoot平台发送指令给RTU设备,RTU设备能够…

Cesium 全面介绍

一、Cesium 是什么? Cesium 是一个开源的 JavaScript 库,专门用于构建高性能的 3D 地理空间可视化应用。它基于 WebGL 技术,无需插件即可在浏览器中渲染全球地形、影像、3D 模型、矢量数据等,支持从卫星视角到地下管网的 全维度空…

Trae-中国首款免费AI原生IDE

Trae 简介 Trae 是由字节跳动于2025年1月推出的国内首个原生AI集成开发环境(IDE),旨在通过AI技术赋能开发者,简化编程流程。其核心功能基于Claude 3.5和GPT-4o等先进AI模型,支持智能代码生成、优化及多模态交互&#…

1.3 斐波那契数列模型:LeetCode 746. 使用最小花费爬楼梯

动态规划解最小花费爬楼梯问题:LeetCode 746. 使用最小花费爬楼梯 1. 题目链接 LeetCode 746. 使用最小花费爬楼梯 题目要求:给定一个整数数组 cost,其中 cost[i] 是从楼梯第 i 阶向上爬所需支付的费用。你可以从下标 0 或 1 的台阶开始爬&a…

游戏开发中的贝塞尔曲线:感受丝滑的数学之美

这是一篇vip文章,如果你还不是vip,可以移步https://www.ilikexff.cn/articles/165免费阅读。 介绍 贝塞尔曲线是计算机图形学中最重要的概念之一,以其在表示曲线时的灵活性和精确性而闻名。广泛应用于计算机图形学、动画、路径规划等领域的数学曲线。 贝塞尔曲线的数学原理基…

强化学习课程:stanford_cs234 学习笔记(2)introduction to RL

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言5、强化学习课程大纲5.1 课程内容主:5.2 马尔可夫决策过程:5.2.1 马尔可夫性 markov propterty5.2.2 马尔可夫过程 markov process5.2.3…

第 26 场 蓝桥月赛 部分题解

第 26 场 蓝桥月赛 2.灯笼猜谜3.元宵分配4.摆放汤圆5.元宵交友(运行超时 通过90%) 2.灯笼猜谜 分析:以当前位置为视角,要想移动的距离尽可能的少,按顺序猜谜语,给你一个区间,有三种情况&#xf…

JAVA实战开源项目:体育馆使用预约平台(Vue+SpringBoot) 附源码

本文项目编号 T 144 ,文末自助获取源码 \color{red}{T144,文末自助获取源码} T144,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

解决【vite-plugin-top-level-await】 插件导致的 Bindings Not Found 错误

解决【vite-plugin-top-level-await】 插件导致的 Bindings Not Found 错误 环境设置 操作系统: macOS硬件平台: M1 Pro前端框架: Vue 3Node.js 版本: 20 在使用 Vue 项目时,我们尝试集成 vite-plugin-top-level-await 插件以支持顶层 await 语法。然而&#xff…

推荐系统(十九):优势特征蒸馏(Privileged Features Distillation)在商品推荐中的应用(二)

在上一篇文章《推荐系统(十八):优势特征蒸馏(Privileged Features Distillation)在商品推荐中的应用》中,笔者实现了一个基于 PFD 思想的 Demo。其中,Teacher 模型和 Student 模型都是简单的单任务(CTR)模型,在本节,笔者将基于 PFD 思想实现一个多任务模型:其中,Tea…

深度学习之卷积

从全连接到卷积 MLP的缺陷,假设有如下的场景: 分类猫和狗的图片 使用一个还不错的相机采集图片(12M像素)RGB图片有 36M元素使用100大小的单隐藏层MLP,模型有 3.6B元素 远多于世界上所有猫和狗总数(900M狗,600M猫) …

目标识别与双目测距(1)环境搭建:Ubuntu+yolov5+pcl库

环境情况 ubuntu 18.04 → 20.04(最终) 安装Ubuntu1804虚拟机系统 Anaconda:可参考我的另一篇文章 Python 3.6.13 → 3.8(最终)Anaconda3-2021.05 目标识别:YOLOv5相关 1、安装git sudo apt install gi…

LinuxTCP/UDP基础概念

TCP(传输控制协议) TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议。它的主要特点包括: 面向连接:在传输数据之前,需要通过“三次握手”建立连接;传输结束后,通过“四次挥手”断开…

MP3、WAV、RM、PNG格式

MP3、WAV、RM、PNG格式 MP3 是一种音频压缩格式,采用了 MPEG-1 Audio Layer 3 或 MPEG-2 Audio Layer 3 编码标准.MP3 格式能够以较小的文件大小存储高质量的音频,可在多种设备如手机、MP3 播放器、电脑上播放,是目前应用最广泛的音频格式之一. MPEG-1 是MPEG(Moving Pictu…

力扣hot100:滑动窗口——找到字符串中所有字母异位词

题目链接:找到字符串中所有字母异位词 考虑用滑动窗口,窗口大小固定为字符串p的长度,用一个for循环控制子串的结束位置。 怎么判断是字母异位词? 1、排序:字符串中所有符合条件的字母异位词与目标串p在经过排序后是…

人工智能通识速览一(神经网络)(编辑中)

上篇:人工智能通识速览一(机器学习) 人工智能通识速览一(机器学习)(编辑中)-CSDN博客https://blog.csdn.net/siper12138/article/details/146512068?sharetypeblogdetail&sharerId1465120…

【数据标准】数据标准化框架体系-基础类数据标准

导读:数据标准化的四大基础类标准(业务术语、业务规则、命名规范、代码标准)是企业数据治理的核心支柱。主要作用体现在​消除业务与技术间的语义鸿沟​(通过统一术语与命名规范),​保障数据全生命周期的质…

可发1区的超级创新思路(python\matlab实现):MPTS+Lconv+注意力集成机制的Transformer时间序列模型

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用场景 该模型主要用于时间序列数据预测问题,包含功率预测、电池寿命预测、电机故障检测等等。 一、模型整体架构(本文以光伏功率预测为例) 本模型由多尺度特征提取模块(MPTS)…