1. 程式人生 > >搞Linux裝置驅動,你應該明白這幾個問題

搞Linux裝置驅動,你應該明白這幾個問題

 想要深入理解linux裝置驅動,你必須明確以下幾個問題:

· 應用程式、庫、核心、驅動程式的關係

· 裝置型別

· 裝置檔案、主裝置號與從裝置號

· 驅動程式與應用程式的區別

· 使用者態與核心態

· Linux驅動程式功能

一、應用程式、庫、核心、驅動程式的關係

1) 應用程式呼叫一系列函式庫,通過對檔案的操作完成一系列功能:       

應用程式以檔案形式訪問各種硬體裝置(Linux特有的抽象方式,把所有的硬體訪問抽象為對檔案的讀寫、設定)

函式庫:

部分函式無需核心的支援,由庫函式內部通過程式碼實現,直接完成功能

部分函式涉及到硬體操作或核心的支援,由核心完成對應功能,我們稱其為系統呼叫

2) 核心處理系統呼叫,根據裝置檔案型別、主裝置號、從裝置號(後面會講解),呼叫裝置驅動程式;

3) 裝置驅動直接與硬體通訊;

二、裝置型別

硬體是千變萬化的,沒有八千也有一萬了,就像世界上有三種人:男人、女人、女博士一樣,linux做了一個很偉大也很艱難的分類:把所有的硬體裝置分為三大類:字元裝置、塊裝置、網路裝置。

1) 字元裝置:字元(char)裝置是個能夠像位元組流(類似檔案)一樣被訪問的裝置。

對字元裝置發出讀/寫請求時,實際的硬體I/O操作一般緊接著發生;

字元裝置驅動程式通常至少要實現open、close、read和write系統呼叫。

比如我們常見的lcd、觸控式螢幕、鍵盤、led、串列埠等等,就像男人是用來幹活的一樣,他們一般對應具體的硬體都是進行出具的採集、處理、傳輸。

2) 塊裝置:一個塊裝置驅動程式主要通過傳輸固定大小的資料(一般為512或1k)來訪問裝置。

塊裝置通過buffer cache(記憶體緩衝區)訪問,可以隨機存取,即:任何塊都可以讀寫,不必考慮它在裝置的什麼地方。

塊裝置可以通過它們的裝置特殊檔案訪問,但是更常見的是通過檔案系統進行訪問。

只有一個塊裝置可以支援一個安裝的檔案系統。 

比如我們常見的電腦硬碟、SD卡、U盤、光碟等,就像女人一樣是用來儲存資訊的。

3) 網路介面:任何網路事務都經過一個網路介面形成,即一個能夠和其他主機交換資料的裝置。

訪問網路介面的方法仍然是給它們分配一個唯一的名字(比如eth0),但這個名字在檔案系統中不存在對應的節點。

核心和網路裝置驅動程式間的通訊,嵌入式物聯網等系統學習企鵝意義氣嗚嗚吧久零就易,完全不同於核心和字元以及塊驅動程式之間的通訊,核心呼叫一套和資料包傳輸相關的函式(socket函式)而不是read、write等。

比如我們常見的網絡卡裝置、藍芽裝置,就像女博士一樣,數量稀少但又不可或缺。

linux中所有的驅動程式最終都能歸到這三種裝置中,當然他們之間也沒有非常嚴格的界限,這些都是程式中對他們的劃分而已,比如一個sd卡,我們也可以把它封裝成字元裝置去操作也是沒有問題的。就像。。。

三、裝置檔案、主裝置號、從裝置號

有了裝置型別的劃分,那麼應用程式應該怎樣訪問具體的硬體裝置呢?

或者說已經確定他是一個男人了,那麼怎麼從萬千世界中區分他與他的不同呢?

答案是:姓名,在linux驅動中也就是裝置檔名。

那麼重名怎麼辦?

答案是:身份證號,在linux驅動中也就是裝置號(主、從)。

裝置檔案:

linux系統中有一個約定俗成的說法:“一切皆檔案”,應用程式使用裝置檔案節點訪問對應裝置, Linux下的各種硬體裝置以檔案的形式存放於/dev目錄下,可以使用ls /dev 檢視Linux把對硬體的操作全部抽象成對檔案的操作(open,read,write,close,…)

每個裝置檔案都有其檔案屬性(c或者b),使用ls /dev -l 的命令檢視, 表明其是字元裝置或者塊裝置,網路裝置沒有在這個資料夾下,用來明其性別(男人、女人)

主裝置號、從裝置號

在裝置管理中,除了裝置型別外,核心還需要一對被稱為主從裝置號的引數,才能唯一標識一個裝置,類似人的身份證號

主裝置號:

用於標識驅動程式,相同的主裝置號使用相同的驅動程式,例如:S3C2440 有串列埠、LCD、觸控式螢幕三種裝置,他們的主裝置號各不相同;

從裝置號:

用於標識同一驅動程式的不同硬體

例:PC的IDE裝置,主裝置號用於標識該硬碟,從裝置號用於標識每個分割槽,2440有三個串列埠,每個串列埠的主裝置號相同,從裝置號用於區分具體屬於那一個串列埠。

四、驅動程式與應用程式的區別

· 

應用程式以main開始

· 

· 

驅動程式沒有main,它以一個模組初始化函式作為入口

· 

· 

應用程式從頭到尾執行一個任務

· 

· 

驅動程式完成初始化之後不再執行,等待系統呼叫

· 

· 

應用程式可以使用glibc等標準C函式庫

· 

· 

驅動程式不能使用標準C庫

· 

五、使用者態與核心態的區分

· 

驅動程式是核心的一部分,工作在核心態

· 

· 

應用程式工作在使用者態

· 

· 

資料空間訪問問題

· 

· 

無法通過指標直接將二者的資料地址進行傳遞

· 

· 

系統提供一系列函式幫助完成資料空間轉換

· 

get_userput_usercopy_from_usercopy_to_user

六、Linux驅動程式功能

· 

對裝置初始化和釋放資源

· 

· 

把資料從核心傳送到硬體和從硬體讀取資料

· 

· 

讀取應用程式傳送給裝置檔案的資料和回送應用程式請求的資料

· 

· 

檢測和處理裝置出現的錯誤(底層協議)

· 

· 

用於區分具體裝置的例項

相關推薦

Linux裝置驅動應該明白問題

 想要深入理解linux裝置驅動,你必須明確以下幾個問題: · 應用程式、庫、核心、驅動程式的關係 · 裝置型別 · 裝置檔案、主裝置號與從裝置號 · 驅動程式與應用程式的區別 · 使用者態與核心態 · Linux驅動程式功能 一、應用程式、庫、核心、驅動程式的關係 1) 

定資料清洗只需要

資料清洗是資料分析過程中不可或缺的一個環節,通過資料清洗,可以統一資料的格式,減少資料存在的多種問題,以提高分析過程的效率並且使分析結果有所保證。 在收集資料或者中,我們獲取到的資料可能是這樣的: 亦或是這樣的: 還可能是這樣的: 這個時候

學習Python爬蟲不安裝常用的庫?

  1:urllib urllib.request 這兩個庫是python自帶的庫,不需要重新安裝 在python中輸入如下程式碼: 返回結果為HTTPResponse的物件: <http.client.HTTPResponse obje

linux裝置驅動tty串列埠程式設計 如何檢視linux下串列埠是否可用?串列埠名稱等

如何檢視linux下串列埠是否可用?串列埠名稱等? 檢視串列埠是否可用,可以對串列埠傳送資料比如對com1口,echo lyjie126 > /dev/ttyS0 檢視串列埠名稱使用 ls -l /dev/ttyS* 一般情況下串列埠的名稱全部在dev下面,如果你沒

這些Linux數據恢復工具用過哪

linux數據恢復不論你運用的是臺式電腦仍是筆記本,需求重視的要點之一都是怎麽保護好你的名貴數據。由於總會有各種突發狀況使你的系統潰散,然後你要做的就是恢復數據。不論你怎麽想,要是我失去了一切的數據卻無法恢復的話,我會分分鐘肢解了這臺破電腦。不過幸虧的是,如今商場上有不少的數據恢復工具,能協助咱們從體系的硬盤

來自開發者技術前線 高級程序員需要養成7習慣

等等 網絡七層協議 有意 數據 爆發 程序員開發 提高 程序解耦 功能 要有負責心 在我們的每日工作中,有一半以上時間是在解決各種Bug。高級程序員在面對這些Bug時會從多個維度思考,Bug出現的時間、系統環境、硬件版本以及軟件版本等等。接著修復問題,嚴格自測,上線後觀察,

常見的 4 種HTML5錯誤用法用錯了

特性 tail flow 清晰 per 描述 收藏 語義 了解 一、不要使用section作為div的替代品 人們在標簽使用中最常見到的錯誤之一就是隨意將HTML5的等價於——具體地說,就是直接用作替代品(用於樣式)。在XHTML或者HTML4中,我們常看到這樣

常見的4種HTML5錯誤用法用錯了

常見 投票 都是 其中 conda con 代碼 圖表 簡單 一、不要使用section作為div的替代品 人們在標簽使用中最常見到的錯誤之一就是隨意將HTML5的等價於——具體地說,就是直接用作替代品(用於樣式)。在XHTML或者HTML4中,我們常看到這樣的代碼: Pa

6關於Java包裝類拆箱和裝箱的判斷題能做對

雖然 Java 語言是典型的面向物件程式語言,但其中的八種基本資料型別並不支援面向物件程式設計,基本型別的資料不具備“物件”的特性——不攜帶屬性、沒有方法可呼叫。為此,Java為每種基本資料型別分別設計了對應的類,稱之為包裝類(Wrapper Classes)。 裝箱(Box

關於SQL Server 2017需要知道5重點

SQL Server 2017增加了一些最新的資料服務和分析功能,包括強大的AI功能、對R和Python的支援。 當技術主管為公司定義其分析策略時,大多數人認為AI、機器學習、自然語言處理和資料探勘是這些計劃的關鍵組成部分。在過去幾年中,許多分析功能很受歡迎,但它們仍然是複雜、昂貴,並且有一些特殊

從計算機視覺的小白變為大神需要經歷階段

如果想要機器能夠進行思考,我們需要先教會它們去看。  李飛飛——Director of Stanford AI Lab and Stanford Vision Lab 計算機視覺(Computer vision)是一門研究如何使機器“看”的科學,更進一步的說,就

這些優秀的 Spring Cloud 開源軟體知道的有

點選上方“程式設計師大咖”,選擇“置頂公眾號”關鍵時刻,第一時間送達!來自:開源最前線(ID:O

2018年web前端經典面試題總結能做對

對程式設計師小哥哥小姐姐來說,很多時候差的不是技術,卻過不了面試那一關。這時候我們就需要總結分析一下面試題目了,揣摩公司與hr的心理及需求,有時候我們忽略的小問題就是決定能不能拿到offer的重要因素,希望大家都可以找到自己心儀的工作,從容應對面試~ 1、webpack怎麼引入第三方的庫?

管理者如何面對不確定性環境變化的重要特徵知道麼

文 / 陳春花 如何面對不確定性是我最近一直關注的主要話題之一,因為管理者在今天需要擁有的最重要的能力是:管理不確定性。以下是有關不確定性問題的幾個主要的視角和解決之道。 對於環境的理解,需要從根本上去把握,而不是簡單看現象。這是一個變化異常的時代,很多認知都被現象所

30關於程式設計師的梗看懂了

0.殺一個程式設計師不需要用槍,改三次需求就可以了。 1.問:程式設計師最討厭康熙的哪個兒子。答:胤禩。因為他是八阿哥(bug)。 2.朋友今天遇到的真事:客戶說我們裝置卡,死活找不到原因,工程師趕到現場,給客戶換了個滑鼠墊,故障排除…… 3.百度研發的無人駕駛汽車,你會發現有些地方你是

大資料入門需要懂常識

一、大資料分析的五個基本方面   1、視覺化分析   大資料分析的使用者有大資料分析專家,同時還有普通使用者,但是他們二者對於大資料分析最基本的要求就是視覺化分析,因為視覺化分析能夠直觀的呈現大資料特點,同時能夠非常容易被讀者所接受,就如同看圖說話一樣簡單明瞭。   2、

關於小米智慧家庭套裝的十小常識能答出

1:小米智慧家庭套裝都有神馬東西? 回答:包含小米多功能閘道器、小米人體感測器、小米門窗感測器和小米無線開關各一個,其中閘道器是智慧家庭套裝的控制中心,感測器需要配合閘道器才能使用。 2:同一個閘道器可以繫結多個人體感測器、門窗感測器或者是無線開關嗎? 回答:多功能閘道器可以連入多個子裝置,閘道器是自

java中常見的異常都遇見過

       在我們學習java的過程中,我們會遇到各種各樣的出錯情況和各種各樣的異常情況,那麼這麼多異常你都遇到過多少個呢?下面就讓我們一起來認識認識這些異常! 算術異常:ArithmeticException 空指標異常:NullPointerException 型

關於Android strings.xml-應該瞭解的原則

但是說不定什麼時候你使用不同的string了,這時你就需要重新建立兩個新的string,而且還要修改java程式碼。如果一開始你就使用兩個string的話,你需要修改的就只有strings.xml檔案。 res/values/strings.xml 2. 你永遠不

IT職場經緯 |阿里web前端面試考題能答出來

有很多小夥伴們特別關心面試Web前端開發工程師時,面試官都會問哪些問題。今天小卓把收集來的“阿里Web前端開發面試題”整理貼出來分享給大傢伙看看,趕緊收藏起來做準備吧~~   一、CSS盒子模型,絕對定位和相對定位   1)清除浮動,什麼時候需要清除浮動,清除浮動