農林漁牧網

您現在的位置是:首頁 > 農業

Linux裝置驅動程式是做什麼功能的?

2023-01-02由 數理紅蘋果 發表于 農業

口能做什麼動作

Linux 裝置驅動程式,

英文名 device driver

能夠比較形象地表明它的作用

driver 就是 類似 馬車伕 司機 機器操作員 的工作。

現在 考慮 一個 飛行員 駕駛 飛機 在機場。

飛機 什麼時候 可以起飛,降落

需要聽 航管排程 塔臺 的指令

聽到起飛,降落指令後

飛行員 需要操縱飛機

使飛機 發動機,機翼,起落架 配合做出起飛動作。

Linux裝置驅動程式是做什麼功能的?

一個空客飛機

Linux裝置驅動程式是做什麼功能的?

一個波音飛機

在 這裡,飛行員 從 上層接收 一套指令,起飛,降落等。

然後 對下層 就是 飛機,做出一系列操作,使飛機 順利完成上邊 指令的動作。

飛行員 在 這裡,做的工作,就是把上邊的指令,轉換為下邊的動作。

所以,飛行員需要熟悉 所駕駛飛機的操作手冊。

駕駛 空客飛機 和 波音飛機。

飛行員培訓的內容也會不同。

開發 Linux 一個裝置驅動程式,

需要 哪些相關背景知識呢?

用簡短的話說

就是 兩套介面函式

一本資料手冊。

兩套介面函式,

其中一套是 裝置型別 的介面函式。

是驅動程式對上層的介面函式

另外一套 是 匯流排提供的介面函式。

是驅動程式對下層的介面函式

Linux裝置驅動程式是做什麼功能的?

驅動程式類似吊車司機

一本資料手冊,datasheet 就是對應晶片的資料手冊。

裝置型別,是根據 裝置的功能分的。

比如 網絡卡 是 網路裝置

硬碟 是 塊裝置

串列埠是 字元裝置

匯流排型別,是決定於裝置透過什麼方式接入系統,

常見的 匯流排 有 USB,pci, I2c, spi 等。

要操作 控制 裝置 的 asic 晶片,和 Asic 晶片通訊,收發資料,需要 能夠讀寫 Asic 上的 register。

而呼叫匯流排提供的一套介面函式,就可以和asic 通訊,控制 asic 了。

同樣是 網絡卡,既有 usb 介面的,也有PCIe 介面的。

USB 介面的 裝置,既有u盤,也有 USB 轉串列埠。

所以 對上 和 對下 的介面 有多重組合。

現在 假設 要 開發一個 PCIe 介面 的 網絡卡 驅動程式。

那對上的 介面,就是網路裝置 的 這一套函式。

對下的介面,就是PCIe 匯流排的 這一套介面函式。

開發 這個驅動程式,現在要 先熟悉 這個網絡卡晶片 的 資料手冊。

實際 開發工作,就是實現 網絡卡的 一套介面函式,比如 裝置 如何 open, 如何髮網絡包,如何收網路包。

比如往外 發一個網路包,該 如何 設定 網絡卡的 暫存器,網絡卡晶片資料手冊裡有詳細說明。

按照 pcie 匯流排的規範,就可以讀寫對應的暫存器。

現在 晶片開發熱,不少人才 從 系統整合公司 跳入 晶片開發公司,晶片開發,設計階段一般採用 fpga 晶片驗證。

那給 FPGA 開發驅動,和給 asic 開發驅動有什麼不同嗎?

對驅動軟體開發來說 流程是完全一樣的。

只不過 asic 的資料手冊 已經固定了。

而 fpga 的,fpga 程式開發人員在不斷修改。

我們 給 PC 機 安裝 一個 Linux,比如 Ubuntu,一般來說系統可以識別出 網絡卡的型別,網絡卡功能正常。 明天換一個型號的網絡卡 插上去,系統依然能夠識別。

那 linux 是 如何知道 系統裡 插的是什麼網絡卡的?

原來網絡卡出廠時,裡邊就寫好了 廠商號,裝置號,裝置型別等 資訊。

系統啟動時,匯流排列舉 時,就會讀出這些資訊,與系統裡的 裝置驅動程式 進行匹配。

每個 裝置驅動程式 也有 它支援 哪些 廠商號,和,裝置號,以及型別的列表。

Linux裝置驅動程式是做什麼功能的?

結婚也是一種匹配關係

二者匹配上了,就能正常驅動了。

如果沒有找到匹配的驅動程式,

就會顯示,系統沒有這個裝置的驅動程式。