上一章我们详细的讲解了 Linux 下的驱动分离与分层,以及总线、设备和驱动这样的驱动框架。基于总线、设备和驱动这样的驱动框架, Linux 内核提出来 platform 这个虚拟总线,相应的也有 platform 设备和 platform 驱动。
上一章我们讲解了传统的、未采用设备树的 platform 设备和驱动编写方法。最新的 Linux 内核已经支持了设备树,因此在设备树下如何编写 platform驱动就显得尤为重要,本章我们就来学习一下如何在设备树下编写 platform 驱动。

1、设备树下的 platform 驱动简介

platform 驱动框架分为总线、设备和驱动,其中总线不需要我们这些驱动程序员去管理,这个是 Linux 内核提供的,我们在编写驱动的时候只要关注于设备和驱动的具体实现即可。==在没有设备树的 Linux 内核下,我们需要分别编写并注册 platform_device 和 platform_driver,分别代表设备和驱动。==在使用设备树的时候,设备的描述被放到了设备树中,因此 platform_device 就不需要我们去编写了,我们只需要实现 platform_driver 即可。

1.1、修改 pinctrl-stm32.c 文件

在前面第 25 章的时候我们详细的讲解了 pinctrl,但是在后续的实验中却一直没有使用pinctrl也就是之前讲的pinctrl子系统知识,按道理来讲,在我们使用某个引脚的时候需要先配置其电气属性,比如复用、输入还是输入、默认上下拉等!但是在前面的实验中均没有配置引脚的电气属性,也就是引脚的 pinctrl配置。这是因为 ST 针对 STM32MP1 提供的 Linux 系统中,其 pinctrl 配置的电气属性只能在platform 平台下被引用,前面的实验都没用到 platform,所以 pinctrl 配置是不起作用的!
Linux 系统启动运行过程中会自动解析设备树下的 pinctrl 配置,然后初始化引脚的电气属性,不需要 platform 驱动框架。所以 pinctrl 什么时候有效,不同的芯片厂商有不同的处理方法,一切以实际所使用的芯片为准!
对于 STM32MP1 来说,在使用 pinctrl 的时候需要修改一下 pinctrl-stm32.c 这个文件,否则当某个引脚用作 GPIO 的时候会提示此引脚无法申请到!
Pasted image 20250405091637.png
Pasted image 20250405091652.png
Pasted image 20250405091704.png
Pasted image 20250405092644.png

1.2、创建设备的 pinctrl 节点

上面已经说了,在 platform 驱动框架下必须使用 pinctrl 来配置引脚复用功能。我们以本章实验需要用到的 LED0 为例,编写 LED0 引脚的 pinctrl 配置。打开 stm32mp15-pinctrl.dtsi 文件, STM32MP1 的所有引脚 pinctrl 配置都是在这个文件里面完成的,在 pinctrl 节点下添加如下所示内容:
Pasted image 20250405092821.png
Pasted image 20250405092834.png
Pasted image 20250405093105.png

1.3、在设备树中创建设备节点

接下来要在设备树中创建设备节点来描述设备信息,重点是要设置好 compatible 属性的值,因为 platform 总线需要通过设备节点的 compatible 属性值来匹配驱动!这点要切记。
Pasted image 20250405093252.png
Pasted image 20250405093304.png

1.4、编写 platform 驱动的时候要注意兼容属性

上一章已经详细的讲解过了,在使用设备树的时候 platform 驱动会通过 of_match_table 来保存兼容性值,也就是表明此驱动兼容哪些设备。所以, of_match_table 将会尤为重要,比如本例程的 platform 驱动中 platform_driver 就可以按照如下所示设置:
Pasted image 20250405095615.png
Pasted image 20250405095839.png
最后就是编写驱动程序,基于设备树的 platform 驱动和上一章无设备树的 platform 驱动基本一样,都是当驱动和设备匹配成功以后先根据设备树里的 pinctrl 属性设置 PIN 的电气特性再去执行 probe 函数。我们需要在 probe 函数里面执行字符设备驱动那一套,当注销驱动模块的时候 remove 函数就会执行,都是大同小异的。

2、检查引脚复用配置

2.1、检查引脚 pinctrl 配置

Pasted image 20250405100143.png
正点原子 STM32MP1 开发板上将 PI0 连接到了 LED0 上,也就是将其用作普通的 GPIO,对应的 pinctrl 配置就是示例代码 35.1.2.1。但是 stm32mp15-pinctrl.dtsi 是 ST 根据自己官方 EVK开发板编写的,因此 PI0 就可能被 ST 官方用作其他功能,大家在 stm32mp15-pinctrl.dtsi 里面找到如下所示代码:
Pasted image 20250405100306.png
从图 35.2.1.1 可以看出, ST 官方默认将 PI0 复用为 LCD_G5,前面说了,一个 IO 只能复用为一个功能,因此我们需要将图 35.2.1.1 中的“<STM32_PINMUX(‘I’, 0, AF14)>”屏蔽掉,因为我们现在要将 PI0 用作 GPIO。同样的,继续在 stm32mp15-pinctrl.dtsi 文件里面查找,会发现如图 35.2.1.2 所示的地方也将 PI0 复用为了 LCD_G5:
Pasted image 20250405100718.png
当然可能会有小伙伴会问,为什么之前实验不用屏蔽这些复用功能?
因为之前的实验并未用到pinctrl这个配置,也未用到platform。之前只是初步的讲了pinctrl子系统的知识!

2.2、检查 GPIO 占用

Pasted image 20250405101347.png

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

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

相关文章

Eclipse 视图(View)

Eclipse 视图(View) Eclipse 视图(View)是 Eclipse 界面的重要组成部分,它提供了用户交互的平台,使得用户可以通过图形界面来编辑、调试、分析代码等。在本文中,我们将深入探讨 Eclipse 视图的功能、使用方法以及它们在软件开发中的作用。 1. 视图的功能 Eclipse 视图具…

Python解决“数字插入”问题

Python解决“数字插入”问题 问题描述测试样例解题思路代码 问题描述 小U手中有两个数字 a 和 b。第一个数字是一个任意的正整数&#xff0c;而第二个数字是一个非负整数。她的任务是将第二个数字 b 插入到第一个数字 a 的某个位置&#xff0c;以形成一个最大的可能数字。 你…

ubuntu部署ollama+deepseek+open-webui

ubuntu部署ollamadeepseekopen-webui 全文-ubuntu部署ollamadeepseekopen-webui 大纲 Ollama部署 安装Ollama&#xff1a;使用命令apt install curl和curl -fsSL https://ollama.com/install.sh | sh ollama-v网络访问配置&#xff1a;设置环境变量OLLAMA_HOST0.0.0.0:11434&…

Java的Selenium常用的元素操作API

click 触发当前元素的点击事件 clear() 清空内容 sendKeys(...) 往文本框一类元素中写入内容 getTagName() 获取元素的的标签名 getAttribute(属性名) 根据属性名获取元素属性值 getText() 获取当前元素的文本值 isDisplayed() 查看元素是否显示 get(String url) 访…

洛谷题单3-P1035 [NOIP 2002 普及组] 级数求和-python-流程图重构

题目描述 已知&#xff1a; S n 1 1 2 1 3 … 1 n S_n 1\dfrac{1}{2}\dfrac{1}{3}…\dfrac{1}{n} Sn​121​31​…n1​。显然对于任意一个整数 k k k&#xff0c;当 n n n 足够大的时候&#xff0c; S n > k S_n>k Sn​>k。 现给出一个整数 k k k&#xff0…

CMDB平台(进阶篇):3D机房大屏全景解析

在数字化转型的浪潮中&#xff0c;数据中心作为企业信息架构的核心&#xff0c;其高效、智能的管理成为企业竞争力的关键因素之一&#xff0c;其运维管理方式也正经历着革命性的变革。传统基于二维平面图表的机房监控方式已难以满足现代企业对运维可视化、智能化的需求。乐维CM…

小白速通:Verilog流水线实现及时序分析

目录 题目&#xff1a;时序分析&#xff1a;时钟频率为50MHz数据1: a10, b20, c30, d40, e2数据2: a5, b15, c25, d35, e3数据3: a8, b12, c16, d24, e4 流水线效率分析 题目&#xff1a; verilog中&#xff0c;y(abcd)*e&#xff0c;时钟频率为50Mhz&#xff0c;用流水线的形式…

【RK3588 嵌入式图形编程】-SDL2-扫雷游戏-创建网格

创建网格 文章目录 创建网格1、概述2、更新Globals.h文件3、创建单元4、创建网格5、传递事件6、清空单元7、反馈单元格已清除8、测试9、完整代码10、总结在本文中,将详细介绍如何构建一个二维的交互式扫雷单元格网格。 1、概述 在本文中,我们将专注于构建扫雷游戏的基础结构…

高精度矢量内积计算方法 (单精度浮点, 超长矢量)

高精度矢量内积计算方法 (单精度浮点, 超长矢量) 对于单精度浮点类型的超长矢量(超过1亿元素)内积计算&#xff0c;累加误差确实是一个重要问题。以下是几种减少误差的方法&#xff1a; 1. Kahan求和算法 这是最常用的补偿求和算法&#xff0c;可以有效减少累加误差&#xf…

Java基础:Logback日志框架

什么是日志 日志技术 可以将系统执行信息&#xff0c;方便的记录到指定位置&#xff08;控制台&#xff0c;文件中&#xff0c;数据库中&#xff09; 可以随时可以开关的形式控制日志的启停&#xff0c;无需侵入到源代码中去进行修改 LogBack日志框架 LogBack快速入门 logb…

MessageQueue --- RabbitMQ WorkQueue and Prefetch

MessageQueue --- RabbitMQ WorkQueue and Prefetch 什么是WorkQueue分发机制 --- RoundRobin分发机制 --- PrefetchSpring example use prefetch --- Fair Dispatch 什么是WorkQueue Work queues&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同…

RNN模型与NLP应用——(9/9)Self-Attention(自注意力机制)

声明&#xff1a; 本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】&#xff0c;结合自身的理解所作&#xff0c;旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。 材料来源&#xff1a;【Shusenwang】的视频课程【RNN模型及NLP应用…

详解AI采集框架Crawl4AI,打造智能网络爬虫

大家好&#xff0c;Crawl4AI作为开源Python库&#xff0c;专门用来简化网页爬取和数据提取的工作。它不仅功能强大、灵活&#xff0c;而且全异步的设计让处理速度更快&#xff0c;稳定性更好。无论是构建AI项目还是提升语言模型的性能&#xff0c;Crawl4AI都能帮您简化工作流程…

从零开始玩python--python版植物大战僵尸来袭

大家好呀&#xff0c;小伙伴们&#xff01;今天要给大家介绍一个超有趣的Python项目 - 用pygame制作植物大战僵尸游戏的进阶版本。相信不少小伙伴都玩过这款经典游戏&#xff0c;今天我们就用Python来实现它&#xff0c;让编程学习变得更加有趣&#xff01;&#x1f31f; 一、…

图解AUTOSAR_SWS_FlashTest

AUTOSAR Flash Test模块详解 基于AUTOSAR 4.4.0规范的Flash测试模块分析与图解 目录 概述 1.1 Flash Test模块的作用 1.2 工作原理架构设计 2.1 整体架构 2.2 依赖关系状态管理 3.1 状态转换图 3.2 前台与后台测试模式配置结构 4.1 配置类图 4.2 关键配置参数交互流程 5.1 序列…

【mongodb】mongodb的字段类型

目录 1. 基本数据类型1.1 String1.2 Number1.3 Boolean1.4 Date1.5 Null1.6 ObjectId1.7 Array1.8 Binary Data1.9 Object 2. 特殊数据类型2.1 Regular Expression2.2 JavaScript2.3 Symbol2.4 Decimal1282.5 Timestamp2.6 MinKey/MaxKey2.7 DBPointer 3. 常用字段类型示例4. 注…

MySQL篇(五)MySQL主从同步原理深度剖析

MySQL篇&#xff08;五&#xff09;MySQL主从同步原理深度剖析 MySQL篇&#xff08;五&#xff09;MySQL主从同步原理深度剖析一、引言二、MySQL主从同步基础概念主库&#xff08;Master&#xff09;从库&#xff08;Slave&#xff09;二进制日志&#xff08;Binary Log&#x…

论文学习16:Learning Transferable Visual Models From Natural Language Supervision

代码来源 Learning Transferable Visual Models From Natural Language Supervisionhttps://arxiv.org/pdf/2103.00020 模块作用 当前最先进的计算机视觉系统被训练用于预测一组固定的、预先定义的目标类别。这种受限的监督方式限制了它们的通用性和可用性&#xff0c;因为要…

[MySQL初阶]MySQL(9)事务机制

标题&#xff1a;[MySQL初阶]MySQL&#xff08;9&#xff09;事物机制 水墨不写bug 文章目录 一、认识事务1、多线程访问数据库出现的问题2、对CURD的限制是通过事务机制实现的3、事务的四个属性4、哪些引擎支持事务 二、事务的提交与autocommit设置三、事务的隔离性和隔离级别…

spring-cloud-alibaba-nacos-config使用说明

一、核心功能与定位 Spring Cloud Alibaba Nacos Config 是 Spring Cloud Alibaba 生态中的核心组件之一&#xff0c;专为微服务架构提供动态配置管理能力。它通过整合 Nacos 的配置中心功能&#xff0c;替代传统的 Spring Cloud Config&#xff0c;提供更高效的配置集中化管理…