Linux驅動開發練習案例

1 開發目標

1.1 架構圖

操作系統:基于Linux5.10.10源碼和STM32MP157開發板,完成tf-a(FSBL)、u-boot(SSBL)、uImage、dtbs的裁剪;

驅動層:為每個外設配置DTS并且單獨封裝外設驅動模塊。其中電壓ADC測試,采用linux內核自帶的stm32mp-xx驅動。

應用層:在linux環境下,通過xxx、xxx、xxx使用c語言開發一款WebServer,對內訪問驅動獲取數據或遙控硬件,向外部用戶提供restful api訪問接口;

1.2 驅動層功能

序號驅動名稱掛載設備技術點備注
1wd_drv/dev/wd_drvi2c總線模型同一總線不同地址
2light_drv/dev/light_drvi2c總線模型
3led_drv/dev/led_drvplatform模型
4dd_drv/dev/dd_drvspi總線模型
5key_drv/dev/key_drvio信號驅動

阻塞式IO獲取中斷事件;

根據不同按鈕事件開關不同的led燈

6電壓測量

/sys/bus/iio/devices/iio:device0

/in_voltage1_raw

adc數據采集

1.3 應用層功能

序號名稱apiapi描述
1led1控制xx.xx.xx.xx:8080/api/led1

{"value":true}? value的值控制燈的亮/滅

2led2控制xx.xx.xx.xx:8080/api/led2{"value":false}
3數顯管控制??xx.xx.xx.xx:8080/api/dd_show

{"value":"0-溫度"}? 顯示溫度,2位小數

{"value":"1-濕度"}? 顯示濕度,2位小數

{"value":"2-光照"}? 顯示光照,整數

{"value":"3-電壓值"}? 顯示電壓值,整數,單位mV

4獲取測量值xx.xx.xx.xx:8080/api/state

返回值:

{

????"voltage":?95.9244,??//電壓值,單位mV

????"light":?83, ????????//光照強度

????"sd":?54.8788,????????//濕度

????"wd":?24.7079????????//溫度

}

2 效果展示(部分)

2.1?webserver的界面效果

PS:并非通過html/css寫的,而是通過mongoose官網編輯器生成:?Mongoose官網

2.2 驅動模塊安裝列表

2.3?控制效果展示

(1)在web上,通過點擊LED1或LED2的Toggle組件,可以實時控制LED亮滅

(2)在web上,通過下拉框,可以選擇當前數顯管顯示什么內容(例如:溫度和電壓)

2.4 postman測試restful-api接口(部分)

3? 源碼

源碼地址

iot_drivers:? 驅動源碼(見git)

webserver:? webserver源碼(見git)

linux設備樹配置(部分):

/ {myled{  //led設備樹compatible = "zr,myled";led-gpios = <&gpioe 10 0>,<&gpiof 10 0>,<&gpioe 8 0>;};mykey{  //按鍵設備樹interrupt-parent = <&gpiof>;interrupts=<9 0>,<7 0>,<8 0>;};};//基于I2C總線的 溫度度傳感器樹 和 光照傳感器設備樹
&i2c1{pinctrl-names = "default", "sleep";//指定管腳復用的兩種不同模式pinctrl-0 = <&i2c1_pins_b>;//設置默認模式下的管腳復用pinctrl-1 = <&i2c1_sleep_pins_b>;i2c-scl-rising-time-ns = <100>;//設置時鐘線上升沿的時間i2c-scl-falling-time-ns = <7>;status = "okay";//狀態設置為OKAY/delete-property/dmas;  //刪除無用的屬性/delete-property/dma-names;mywd@40{compatible="zr,mywd";reg=<0X40>;};mylight@1e{compatible="zr,mylight";reg=<0x1e>;};
};//基于spi總線的 數顯管設備樹
&spi4{pinctrl-names="default","sleep";pinctrl-0=<&spi4_pins_b>;pinctrl-1=<&spi4_sleep_pins_b>;//添加對片選線管腳的描述cs-gpios=<&gpioe 11 0>;status="okay";mydd@0{compatible="zr,mydd";spi-max-frequency = <10000000>;//設置當前spi工作的最大頻率為10Mreg=<0>;    };
};//基于iio的電壓采集設備樹
&adc {vdd-supply = <&vdd>;vdda-supply = <&vdd>;vref-supply = <&vdd>;status = "okay";adc1: adc@0 {st,adc-channels = <0 1>;st,min-sample-time-nsecs = <10000>;status = "okay";};
};

4、待探索問題

(1)基于webserver的websocket的實現

(2)pwm、dma、定時器的輸入捕獲中斷驅動的編寫

(3)ADC驅動手動編寫

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76783.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode-代碼隨想錄-哈希表-贖金信

題目 題目鏈接&#xff1a;383. 贖金信 - 力扣&#xff08;LeetCode&#xff09; 給你兩個字符串&#xff1a;ransomNote 和 magazine &#xff0c;判斷 ransomNote 能不能由 magazine 里面的字符構成。 如果可以&#xff0c;返回 true &#xff1b;否則返回 false 。 maga…

精品可編輯PPT | “新基建”在數字化智慧高速公路中的支撐應用方案智慧建筑智慧交通解決方案施工行業解決方案

本文詳細闡述了“新基建”在數字化智慧高速公路中的支撐應用方案&#xff0c;從政策背景出發&#xff0c;指出國家在交通領域的一系列發展規劃和指導意見&#xff0c;強調了智慧交通建設的重要性。分析了當前高速公路存在的問題&#xff0c;如基礎感知設施不足、協同水平低、服…

C語言求3到100之間的素數

一、代碼展示 二、運行結果 三、感悟思考 注意: 這個題思路他是一個試除法的一個思路 先進入一個for循環 遍歷3到100之間的數字 第二個for循環則是 判斷他不是素數 那么就直接退出 這里用break 是素數就打印出來 在第一個for循環內 第二個for循環外

英語—四級CET4考試—蒙猜篇—匹配題

蒙猜方法一 匹配題的做題&#xff1a; 方法一&#xff1a; 首先&#xff0c;什么都不想&#xff0c;把問題中ing形式的&#xff0c;大寫字母的&#xff0c;人名&#xff0c;地名&#xff0c;最后幾個依次框起來。 然后&#xff0c;比如46題&#xff0c;口里默念meaningful lif…

股票日數據使用_未復權日數據生成前復權日周月季年數據

目錄 前置&#xff1a; 準備 代碼&#xff1a;數據庫交互部分 代碼&#xff1a;生成前復權 日、周、月、季、年數據 前置&#xff1a; 1 未復權日數據獲取&#xff0c;請查看 https://blog.csdn.net/m0_37967652/article/details/146435589 數據庫使用PostgreSQL。更新日…

系統與網絡安全------Windows系統安全(6)

資料整理于網絡資料、書本資料、AI&#xff0c;僅供個人學習參考。 共享文件夾 發布共享文件夾 Windows共享概述 微軟公司推出的網絡文件/打印機服務系統 可以將一臺主機的資源發布給其他主機共有 共享訪問的優點 方便、快捷相比光盤 U盤不易受文件大小限制 可以實現訪問…

BN 層的作用, 為什么有這個作用?

BN 層&#xff08;Batch Normalization&#xff09;——這是深度神經網絡中非常重要的一環&#xff0c;它大大改善了網絡的訓練速度、穩定性和收斂效果。 &#x1f9e0; 一句話理解 BN 層的作用&#xff1a; Batch Normalization&#xff08;批歸一化&#xff09;通過標準化每一…

判斷HiveQL語句為ALTER TABLE語句的識別函數

寫一個C#字符串解析程序代碼&#xff0c;邏輯是從前到后一個一個讀取字符&#xff0c;遇到匹配空格、Tab和換行符就繼續讀取下一個字符&#xff0c;遇到大寫或小寫的字符a&#xff0c;就讀取后一個字符并匹配是否為大寫或小寫的字符l&#xff0c;以此類推&#xff0c;匹配任意字…

基于編程的運輸設備管理系統設計(vue+springboot+ssm+mysql8.x)

基于編程的運輸設備管理系統設計&#xff08;vuespringbootssmmysql8.x&#xff09; 運輸設備信息管理系統是一個全面的設備管理平臺&#xff0c;旨在優化設備管理流程&#xff0c;提高運輸效率。系統提供登錄入口&#xff0c;確保只有授權用戶可以訪問。個人中心讓用戶可以查…

6.1 python加載win32或者C#的dll的方法

python很方便的可以加載win32的方法以及C#編寫的dll中的方法或者變量&#xff0c;大致過程如下。 一.python加載win32的方法&#xff0c;使用win32api 1.安裝庫win32api pip install win32api 2.加載所需的win32函數并且調用 import win32api win32api.MessageBox(0,"…

前端精度計算:Decimal.js 基本用法與詳解

一、Decimal.js 簡介 decimal.js 是一個用于任意精度算術運算的 JavaScript 庫&#xff0c;它可以完美解決浮點數計算中的精度丟失問題。 官方API文檔&#xff1a;Decimal.js 特性&#xff1a; 任意精度計算&#xff1a;支持大數、小數的高精度運算。 鏈式調用&#xff1a;…

SQL Server 數據庫實驗報告

??????? 1.1 實驗題目&#xff1a;索引和數據完整性的使用 1.2 實驗目的&#xff1a; &#xff08;1&#xff09;掌握SQL Server的資源管理器界面應用&#xff1b; &#xff08;2&#xff09;掌握索引的使用&#xff1b; &#xff08;3&#xff09;掌握數據完整性的…

AI繪畫中的LoRa是什么?

Lora是一個多義詞&#xff0c;根據不同的上下文可以指代多種事物。以下將詳細介紹幾種主要的含義&#xff1a; LoRa技術 LoRa&#xff08;Long Range Radio&#xff09;是一種低功耗廣域網&#xff08;LPWAN&#xff09;無線通信技術&#xff0c;以其遠距離、低功耗和低成本的特…

哈希表(Hashtable)核心知識點詳解

1. 基本概念 定義&#xff1a;通過鍵&#xff08;Key&#xff09;直接訪問值&#xff08;Value&#xff09;的數據結構&#xff0c;基于哈希函數將鍵映射到存儲位置。 核心操作&#xff1a; put(key, value)&#xff1a;插入鍵值對 get(key)&#xff1a;獲取鍵對應的值 remo…

數據流和重定向

1、數據流 不管正確或錯誤的數據都是默認輸出到屏幕上&#xff0c;所以屏幕是混亂的。所以就需要用數據流重定向將這兩 條數據分開。數據流重定向可以將標準輸出和標準錯誤輸出分別傳送到其他的文件或設備去 標準輸入&#xff08;standard input&#xff0c;簡稱stdin&#xff…

詳解 MySQL 索引的最左前綴匹配原則

MySQL 的最左前綴匹配原則主要是針對復合索引&#xff08;也稱為聯合索引&#xff09;而言的。其核心思想是&#xff1a;只有查詢條件中包含索引最左側&#xff08;第一列&#xff09;開始的連續一段列&#xff0c;才能讓 MySQL 有效地利用該索引。 一、 復合索引的結構 復合…

MyBatis注解開發增刪改查基礎篇

本文是MyBatis注解開發的基礎篇&#xff0c;將通過實際場景&#xff0c;詳細介紹MyBatis注解式開發的使用&#xff0c;這是MyBatis很強大的一個特性&#xff0c;可以直接在接口方法上定義 SQL 語句&#xff0c;從而實現數據庫的增刪改查操作。 本文目錄 一、環境依賴二、創建對…

周末總結(2024/04/05)

工作 人際關系核心實踐&#xff1a; 要學會隨時回應別人的善意&#xff0c;執行時間控制在5分鐘以內 堅持每天早會打招呼 遇到接不住的話題時拉低自己&#xff0c;抬高別人(無陰陽氣息) 朋友圈點贊控制在5min以內&#xff0c;職場社交不要放在5min以外 職場的人際關系在面對利…

【HTML】純前端網頁小游戲-戳破彩泡

分享一個簡單有趣的網頁小游戲 - 彩色泡泡爆破。玩家需要點擊屏幕上隨機出現的彩色泡泡來得分。 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

如何實現單例模式?

一、模式定義與核心價值 單例模式&#xff08;Singleton Pattern&#xff09;是一種創建型設計模式&#xff0c;保證一個類僅有一個實例&#xff0c;并提供全局訪問點。其核心價值在于&#xff1a; ??資源控制??&#xff1a;避免重復創建消耗性資源&#xff08;如數據庫連…