70. Linux驅動開發與裸機開發區別,字符設備驅動開發

一、裸機驅動開發回顧

1、底層,跟寄存器打交道,有些MCU提供了庫。

二、Linux驅動開發思維

1、Linux下驅動開發直接操作寄存器不現實。
2、根據Linux下的各種驅動框架進行開發。一定要滿足框架,也就是Linux下各種驅動框架的掌握。
3、驅動最終表現就是/dev/xxx文件。打開、關閉、讀寫、。。。
4、現在新的內核支持設備樹,這個一個.dts文件,此文件 描述了板子的設備信息。

三、Linux驅動開發分類

linux驅動分為三大類:
1、字符設備驅動,最多的。
2、塊設備驅動,存儲
3、網絡設備驅動,
一個設備不說是一定只屬于某一個類型。比如USB WIFI,SDIO WIFI,屬于網絡設備驅動,因為他又有USB和SDIO,因此也屬于字符設備驅動。

四、應用程序和驅動的交互原理

1、驅動就是獲取外設、或者傳感器數據,控制外設。數據會提交給應用程序。Linux驅動編譯既要編寫一個驅動,還要我們編寫一個簡單的測試應用程序,APP。單片機下驅動和應用都是放到一個文件里面,也就是雜糅到一起。Linux下驅動和應用是完全分開的。

用戶空間(用戶態)和內核空間(內核態):
Linux操作系統內核和驅動程序運行在內核空間、應用程序運行在用戶空間。

應用程序想要訪問內核資源,怎么辦,有三種方法:系統調用、異常(中斷)和陷入。

應用程序不會直接調用系統調用,而是通過API函數來間接的調用系統調用,比如POSIX、API和C庫等。unix類操作系統中最常用的編程接口就是POSIX。
應用 程序使用open函數 打開一個設備文件。

每個系統調用都有一個系統調用號。
系統調用處于內核空間,應用程序無法直接訪問,因此需要“陷入“到內核,方法就是軟中斷。陷入內核以后還要指定系統調用號。

五、字符設備驅動開發流程

1,Linux里面一切皆文件,驅動設備表現就是一個/dev/下的文件,/dev/led。應用程序調用open函數打開設備,比如led。應用程序通過write函數向/dev/led寫數據,比如寫1表示打開,寫0表示關閉。如果要關閉設備那么就是close函數。
2,編寫驅動的 時候也需要編寫驅動對應的open、close,write函數。字符設備驅動fileoptions_struct.

1、驅動最終是被應用調用的,在寫驅動的時候要考慮應用開發的便利性。
2、驅動是分驅動框架的,要按照驅動框架來編寫,對于字符設備驅動來說,重點編寫應用程序對應的open、close、read、write等函數。

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

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

相關文章

【JavaScript 簡明入門教程】為了Screeps服務的純JS入門教程

0 前言 0-1 Screeps: World 眾所不周知,?Screeps: World是一款面向編程愛好者的開源大型多人在線即時戰略(MMORTS)沙盒游戲,其核心機制是通過編寫JavaScript代碼來控制游戲中的單位(稱為“Creep”)&#…

第12章:優化并發_《C++性能優化指南》notes

優化并發 一、并發基礎與優化核心知識點二、關鍵代碼示例與測試三、關鍵優化策略總結四、性能測試方法論多選題設計題答案與詳解多選題答案: 設計題答案示例 一、并發基礎與優化核心知識點 線程 vs 異步任務 核心區別:std::thread直接管理線程&#xf…

[C++面試] RAII資源獲取即初始化(重點)

一、入門 1、什么是 RAII? RAII(Resource Acquisition Is Initialization,資源獲取即初始化)是 C 的核心編程范式,核心思想是 ?將資源的生命周期與對象的生命周期綁定: ?資源獲取:在對象構造…

Unity粒子系統

目錄 一、界面參數介紹1.主模塊2.Emission 模塊3.Shape 模塊4.Velocity over Lifetime 模塊5.Noise 模塊6.Limit Velocity Over Lifetime 模塊7.Inherit Velocity 模塊8.Force Over Lifetime 模塊9.Color Over Lifetime 模塊10.Color By Speed 模塊11.Size over Lifetime 模塊1…

Docker-清理容器空間prune

docker system prune -a 是一個非常有用的命令,用于清理 Docker 系統中未使用的資源,包括停止的容器、未使用的網絡、卷以及未被任何容器引用的鏡像(懸空鏡像和所有未使用的鏡像)。以下是關于該命令的詳細說明: 命令格…

LabVIEW遠程控制通訊接口

abVIEW提供了多種遠程控制與通訊接口,適用于不同場景下的設備交互、數據傳輸和系統集成。這些接口涵蓋從基礎的網絡協議(如TCP/IP、UDP)到專用技術(如DataSocket、遠程面板),以及工業標準協議(如…

LeetCode hot 100—尋找重復數

題目 給定一個包含 n 1 個整數的數組 nums ,其數字都在 [1, n] 范圍內(包括 1 和 n),可知至少存在一個重復的整數。 假設 nums 只有 一個重復的整數 ,返回 這個重復的數 。 你設計的解決方案必須 不修改 數組 nums…

linux - centos7 部署 redis6.0.5

事先說明 本篇文章只解決在部署redis中出現的問題,并沒有部署redis的全過程,詳細部署過程可以參考Linux安裝部署Redis(超級詳細) - 長沙大鵬 - 博客園 執行 make 命令時報錯 原因:是因為gcc版本太低 升級gcc版本時 出現沒有可用軟件包 devt…

31天Python入門——第15天:日志記錄

你好,我是安然無虞。 文章目錄 日志記錄python的日志記錄模塊創建日志處理程序并配置輸出格式將日志內容輸出到控制臺將日志寫入到文件 logging更簡單的一種使用方式 日志記錄 日志記錄是一種重要的應用程序開發和維護技術, 它用于記錄應用程序運行時的關鍵信息和…

AI Agent開發大全第八課-Stable Diffusion 3的本地安裝全步驟

前言 就像我們前面幾課所述,本系列是一門體系化的教學,它不像網上很多個別存在的單篇博客走“吃快餐”模式,而是從扎實的基礎來帶領大家一步步邁向AI開發高手。所以我們的AI課程設置是相當全面的,除了有牢固的基礎知識外還有外面互聯網上也搜不到的生產級實戰。 前面講過…

用selenium+ChromeDriver豆瓣電影 肖申克的救贖 短評爬取(pycharm 爬蟲)

一、豆瓣電影 肖申克的救贖 短評urlhttps://movie.douban.com/subject/1292052/comments 二、基本知識點講解 1. Selenium 的基本使用 Selenium 是一個用于自動化瀏覽器操作的庫,常用于網頁測試和爬蟲。代碼中使用了以下 Selenium 的核心功能: webdriv…

開源在線客服系統源碼-前端源碼加載邏輯

客服源碼是使用Golang(又稱Go)開發的,Go是Google公司開發的一種靜態強類型、編譯型、并發型,并具有垃圾回收功能的編程語言。Go 天生支持并發。好處太多就不多說了。 全源碼客服系統用戶,想要針對自己的業務,進行二次開發&#xf…

Oracle數據庫服務器地址變更與監聽配置修改完整指南

一、前言 在企業IT運維中,Oracle數據庫服務器地址變更是常見的運維操作。本文將詳細介紹如何安全、高效地完成Oracle數據庫服務器地址變更及相關的監聽配置修改工作,確保數據庫服務在遷移后能夠正常運行。 二、準備工作 1. 環境檢查 確認新舊服務器I…

g對象在flask中主要是用來實現什么

在Flask中,g對象(全稱flask.g)是一個線程局部(thread-local)的臨時存儲對象,主要用于在單個請求的上下文(request context)中共享數據。它的核心作用是為同一請求的不同處理階段&…

工具介紹《WireShark》

Wireshark 過濾命令中符號含義詳解 一、比較運算符 Wireshark 支持兩種比較運算符語法:英文縮寫(如 eq)和 C語言風格符號(如 ),兩者功能等價。 符號(英文縮寫)C語言風格符號含義示…

JavaScrip-模版字符串的詳解

1.模版字符串的詳解 1.1 模版字符串的使用方法 在ES6之前,如果我們想要將字符串和一些動態的變量(標識符)拼接到一起,是非常丑陋的(ugly) ES6允許我們使用模版字符串來嵌入變量或者表達式來進行拼接 首先,…

STM32C011 進入停止模式和待機模式

對于STM32C011J4M3微控制器,你可以使用HAL庫來實現進入停止模式(Stop Mode)和待機模式(Standby Mode)。下面是進入停止模式和待機模式的示例代碼: 進入停止模式代碼示例: #include "stm3…

海康設備http監聽接收報警事件數據

http監聽接收報警事件數據 海康獲取設備報警事件數據兩種方式: 1、sdk 布防監聽報警事件數據(前面文章有示例) 2、http監聽接收報警事件數據 http監聽接收報警事件數據,服務端可以使用netty通過端口來監聽獲取事件數據。 WEB 端…

FastAPI 全面指南:功能解析與應用場景實踐

FastAPI 全面指南:功能解析與應用場景實踐 FastAPI 是一個現代、快速(高性能)的 Python Web 框架,用于構建 API。它基于標準 Python 類型提示,使用 Starlette 和 Pydantic 構建,提供了極高的性能并簡化了開…

【STM32】編寫程序控制開發板的RGB LED燈

目錄 1、原理圖2、文件結構3、使用寄存器模式點亮3.1、什么是寄存器3.2、寄存器開發的本質3.3、寄存器開發步驟3.4、主要源碼3.4.1、main.c3.4.2、drv_gpio.h3.4.3、drv_gpio.c3.4.4、使用BSRR和BRR影子寄存器優化drv_gpio.c3.4.5、效果演示 4、使用標準庫模式點亮4.1、使用標準…