搞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)清除浮動,什麼時候需要清除浮動,清除浮動