15.1linux設備樹下的platform驅動編寫(知識)_csdn

上一章我們詳細的講解了 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;提供更高效的配置集中化管理…