1. 程式人生 > >Linux設備驅動程序(一)設備驅動程序簡介

Linux設備驅動程序(一)設備驅動程序簡介

包括 收集 字符設備 調度器 計算機 啟動 驅動程序 str 單個

  • 機制or策略:

驅動提供機制(what),而不是提供策略(how);

  • 內核功能劃分:

根據內核完成任務的不同,可分為如下幾個部分:

1. 進程管理

負責進程的的創建和銷毀,並處理它們和外部之間的連接(輸入輸出)。不同進程之間的通信是整個系統的基本功能,因此由內核處理。

除此之外,控制進程如何共享CPU的調度器也是進程管理的一部分。

概括來說,內核進程管理就是在單個或者多個CPU上實現了多個進程的抽象。

2. 內存管理

內存是計算機的主要資源之一,用來管理內存的策略是決定系統性能的一個關鍵因素。

內核在有限的可用資源上為每個進程都創建了一個虛擬地址空間。

內核的不同部分在和內存管理子系統交互時,使用一組函數調用,如malloc/free,以及其他一些復雜的函數。

3. 文件系統

unix的每個對象都可以當做文件來看待。

內核在沒有結構的硬件上構造了結構化的文件系統。

linux支持多種文件系統類型,實質上是在物理介質上組織數據的不同方式。

4. 設備控制

幾乎每個系統操作最終都會映射到物理設備上。除了處理器,內存以及其他很有限的幾個對象外,所有設備控制操作都由與被控制設備的相關代碼來完成,即驅動程序。

內核必須為系統中的每個外設嵌入相應的驅動程序。

5. 網絡功能

網絡功能必須由操作系統管理,因為大部分網絡操作與具體進程無關:數據包的傳入是異步時間。在某個進程處理這些數據包之前,必須收集,標識,分發這些數據包。系統負責在應用程序和網絡接口之間傳遞數據包,並根據網絡活動控制程序的指向。

另外,路由和地址解析也都由內核處理。

  • 可裝載模塊

linux內核提供的特性可在運行時擴展,即在系統啟動並且運行時,我們可以向內核添加或從內核移除功能。

可在運行時添加到內核中的代碼叫做“模塊”。

linux內核支持好幾種模塊類型,包括但不限於設備驅動程序。

每個模塊由沒有連接成一個完整可執行程序的目標代碼組成。

添加模塊--insmod 移除模塊--rmmod

  • 設備和模塊的分類

linux將設備分為三種類型:字符設備,塊設備,網絡設備。

1. 字符設備:

字符設備是能夠像字節流一樣被訪問的設備,由字符設備驅動程序實現這種特性。

字符設備驅動程序通常至少需要實現open,close,read,write系統調用。

字符設備可以通過/dev目錄下的文件系統節點訪問。

字符設備與普通文件的唯一差別:普通文件的訪問可以前後移動訪問的位置,而大多數字符設備是一個只能順序訪問的數據通道。

2. 塊設備:

塊設備和字符設備類似,也是通過/dev目錄下的文件系統節點來訪問。

塊設備上能過容納文件系統。

linux可以讓應用程序像字符設備一樣地讀寫塊設備,允許一次傳遞任意多字節的數據。

塊設備和字符設備的區別:僅僅在於內核內部數據的管理方式,也就是內核以及驅動程序之間的軟件接口,而這些不同對於用戶來說是透明的。內核中,字符驅動和塊驅動具有完全不同的接口。

3. 網絡接口

網絡事務都是經過網絡接口形成的。

通常,接口是個硬件設備,但也可以是個純軟件設備,比如回環接口。

網絡接口由內核中的網絡子系統驅動,負責發送和接收數據包,但它不需要了解每項十五如何映射到實際傳送的數據包。

由於不是面向流的設備,因此將網絡接口映射到文件系統的節點比較困難。unix仍然給它們分配一個唯一的名字(比如eth0),但這個名字在文件系統中不存在對應的節點。

內核和網絡設備驅動程序之間的通信,完全不同於內核和字符以及塊設備驅動程序之間的通信,內核調用一套和數據包傳輸相關的函數而不是read,write等。

Linux設備驅動程序(一)設備驅動程序簡介