1. 程式人生 > >linux驅動基礎開發1——linux 裝置驅動基本概念

linux驅動基礎開發1——linux 裝置驅動基本概念


二、裝置型別

硬體是千變萬化的,沒有八千也有一萬了,就像世界上有三種人:男人、女人、女博士一樣,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,…)