Linux驅動程序框架以及概述

目錄

  • 驅動程序三種基本類型(組成)
  • 設備驅動程序功能
  • 驅動程序的內核模塊機制(開發模式)
  • 驅動程序框架
    • 三個主要部分
    • 1、字符設備驅動程序框架
    • 2、塊設備驅動程序框架
    • 2、網絡設備驅動程序框架

驅動程序三種基本類型(組成)

1、字符設備(Char Device)
2、塊設備(Block Device)
3、網絡設備(Net Device)

設備驅動程序功能

1、對設備初始化和釋放
2、把數據從內核傳送到硬件和從硬件讀取數據
3、讀取應用程序傳送給設備文件的數據和回送應用程序請求的數據
4、檢測和處理設備出現的錯誤

訪問特定硬件
訪問特定硬件就是訪問物理地址(如處理器內設備的寄存器、外設的地址映射)。然而由于MMU的內存映射以及對操作系統的保護,運行在用戶態的應用程序一般不能直接訪問硬件地址。因此需要驅動程序作為應用程序和訪問硬件之間的媒介。

驅動程序的內核模塊機制(開發模式)

靜態編譯、動態加載
Linux提供了一種內核模塊機制。一個模塊被編譯成單獨的內核模塊后,一開始可以不編譯到整個內核中,當內核需要加入該模塊的時候,不需要重新編譯整個內核,只需要將該內核模塊插入(加載)到正在運行的內核中。同樣,也可以從正在運行的內核中卸載。

Linux設備驅動可以使用兩種方式被編譯和加載:
1、直接編譯到Linux內核,隨Linux啟動時加載,隨時可以使用該驅動程序;
2、編譯成一個可加載和刪除的模塊,用insmod加載,rmmod刪除。

在這里插入圖片描述

驅動程序框架

三個主要部分

在這里插入圖片描述
1、設備初始化/釋放:
負責對設備進行初始化和釋放
初始化檢測所要驅動的硬件設備是否存在、能否正常工作。如果設備正常,則對設備及相關驅動程序
需要的軟件狀態進行配置/初始化。
2、上半部分:服務于文件系統I/O
負責:通過文件系統從應用程序讀取數據,把數據通過文件系統回送給應用程序(文件系統層<->設備驅動層)
這部分由文件系統相關的系統調用執行,和調用進程屬于同一個進程,具有調用進程的運行環境,只是由用戶態變成了內核態。
3、下半部分:服務于硬件設備的I/O
負責:把數據從內核傳送到硬件,從硬件讀取數據到內核(設備驅動曾<->硬件層)
這部分可以通過中斷方式實現,對于多數設備可以提高CPU處理效率。
這部分也可以不通過中斷方式實現,只要能完成設備驅動層和硬件之間的數據通信即可。

1、字符設備驅動程序框架

在這里插入圖片描述

2、塊設備驅動程序框架

在這里插入圖片描述

2、網絡設備驅動程序框架

在這里插入圖片描述

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

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

相關文章

curl 使用整理(轉載)

我一向以為&#xff0c;curl只是一個編程用的函數庫。 最近才發現&#xff0c;這個命令本身&#xff0c;就是一個無比有用的網站開發工具&#xff0c;請看我整理的它的用法。 curl網站開發指南 阮一峰 整理 curl是一種命令行工具&#xff0c;作用是發出網絡請求&#xff0c;然…

Linux內核邏輯結構

linux內核從邏輯上可以分為5個部分&#xff1a; 1、進程調度 進程調度控制進程對CPU的訪問。當需要選擇下一個進程運行時&#xff0c;由調度程序選擇最值得運行的程序。可運行進程實際上是僅等待CPU資源的進程&#xff0c;如果某個進程在等待其他資源&#xff0c;則該進程是不可…

對批量文件重命名

一、 文件夾下存放各種不同名稱的同類型文件 F:\test 二、重命名格式從a0開始&#xff0c;數字依次遞增&#xff0c;a0,a1,a2,a3… import ospathr"F:\test"#要修改文件的路徑 namer"a"#命名從什么開始 num0#默認從0開始&#xff0c;即a0,a1,a2...... …

替換Quartus 自帶編輯器 (轉COM張)

正文 此處以Quartus II 11.1和Notepad v5.9.6.2為例。 1. 使用QII自動調用Notepad來打開HDL、sdc、txt等文件&#xff1b;并且可以在報錯的時候&#xff0c;Notepad可以直接高亮所報錯的行&#xff08;此模式下&#xff0c;Notepad最大化后效果最佳&#xff09;。 方法&#xf…

scala 方法重載_Scala中的方法重載

scala 方法重載Scala方法重載 (Scala method overloading) Method overloading is a method that is redefined in different ways under the same name. Method overloading is one of the methods used to implement polymorphism in Scala. 方法重載是一種使用相同名稱以不…

C#網頁自動登錄和提交POST信息的多種方法 新人學習中

網頁自動登錄和提交POST信息的核心就是分析網頁的源代碼&#xff08;HTML&#xff09;&#xff0c;在C#中&#xff0c;可以用來提取網頁HTML的組件比較多&#xff0c;常用的用WebBrowser、WebClient、HttpWebRequest這三個。 以下就分別用這三種方法來實現&#xff1a;1、WebBr…

四、采集和制作數據集

一、采集數據 安裝labelme&#xff1a;pip install labelme 打開labelme&#xff1a;labelme 將收集好的照片(320320&#xff0c;png格式)存放到一個文件夾中&#xff0c;例如我的是F:\test&#xff0c;再此文件夾下再創建個文件夾label用于存放標簽文件 使用labelme打開數據…

MTFBWU的完整形式是什么?

MTFBWU&#xff1a;愿力量與您同在 (MTFBWU: May The Force Be With You) MTFBWU is an abbreviation of “May The Force Be With You". MTFBWU是“愿力量與你同在”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media n…

VMware14.0 安裝 CentOS7.2

大致流程 對于VMware14.0安裝包用百度網盤下載即可。 鏈接&#xff1a;https://pan.baidu.com/s/1DEGa47EbI1Fup_MTXhv0xg 提取碼&#xff1a;izo6 華為云CentOS7 下載劃線的。其他步驟與大致流程里一樣。 最后輸入root 以及配置的密碼即可&#xff1a;密碼輸入時是沒有任何顯…

基于visual Studio2013解決C語言競賽題之1049抓牌排序

&#xfeff;&#xfeff;&#xfeff;&#xfeff;&#xfeff;&#xfeff;題目解決代碼及點評/* 功能&#xff1a;插入排序。許多玩牌的人是以這樣的方式來對他們手中的牌進行排序的&#xff1a;設手中原有3張牌已排好序&#xff0c;抓1張新牌&#xff0c;若這張新牌的次序在…

學習Lucene筆記一:創建索引

public class HelloLucene {/*** 建立索引* param args*/public void index(){IndexWriter writer null; try {//1.創建Directory,// Directory directory new RAMDirectory();//索引是建立在內存中的Directory directory FSDirectory.open(new File("D:/Lucene/ind…

【C++進階】C++創建文件/屏幕輸出流類(將信息同時輸出到文件和屏幕)

在軟件的調試技術中&#xff0c;很重要的一個技術是將軟件運行過程中的一些信息寫入到“日志文件”中。但是同時還要將信息顯示到屏幕上&#xff0c;以方便程序員實時查看這些信息。 最簡單的一種辦法是這樣的&#xff1a; std::ofstream output("debug.log", ios::…

五、加載數據集

之前寫過加載數據集的一些小筆記&#xff0c;這里詳細內容就不再敘述了 詳細學習可以參考該博文二、PyTorch加載數據 一、分析 因為U-net網絡架構是輸入1通道&#xff0c;大小為(572,572)的灰度圖&#xff0c;圖片大小無所謂&#xff0c;我的思路是將三通道的圖像使用OpenCV進…

CDMA的完整形式是什么?

CDMA&#xff1a;碼分多址 (CDMA: Code Division Multiple Access) CDMA is an abbreviation of Code Division Multiple Access. Code Division Multiple Access is a digital cellular technology and displays a network of multiple accesses. The various radio communica…

BCD碼與十進制的相互轉換

BCD碼是用每四位代替一位十進制數&#xff08;0 到 9 的某一位數&#xff09; 例如&#xff1a;0x25 就代表25 十六進制的每位轉換成二進制代表四個位。 下面是bcd轉char short int long c語言程序 //************************************************************…

DSP關于存儲器讀寫、IO讀寫時序圖的注意點

這里的存儲器圖不涉及插入等待周期。 IO設備的圖可以自行減去插入等待周期&#xff0c;然后觀察。 存儲器讀讀寫 存儲器寫寫讀 I/O設備讀寫操作

折騰430 launchpad

launchpad到手也已經很長時間了&#xff0c;團購了一個g2的&#xff0c;一個鐵電的&#xff0c;現在馬上又要來一個g2的&#xff0c;感覺手上的東西太多了&#xff0c;急需消化一下&#xff0c;首先呢還是先把430搞定吧。 ---------------------------------------------------…

oem模式是什么_OEM的完整形式是什么?

oem模式是什么OEM&#xff1a;原始設備制造商 (OEM: Original Equipment Manufacturer) OEM is an abbreviation of "Original Equipment Manufacturer". Its meaning has changed over time. In former times, it alluded to a corporation that manufactures produ…

媽了個巴卡

配置文件修改&#xff1a; 一、打開PC端微信&#xff0c;打開咩了個咩小程序&#xff0c;點進入第一關&#xff0c;之后再關掉小程序 二、PC端微信設置里面&#xff0c;找到管理文件&#xff0c;打開文件夾 三、Applet下按修改日期找到a9結尾的文件 四、接著進入\usr\gamecac…

java中Iterator的小程序

import java.util.Collection; import java.util.HashSet; import java.util.Iterator;public class TestIterator {public static void main(String[] args){Collection booksnew HashSet();books.add("java講義");books.add("java的Ajax寶典");books.add…