Linux裝置驅動程式 基礎簡介

2021-09-27 03:42:57 字數 2429 閱讀 1615

裝置和模組的分類

安全問題

裝置驅動的作用在於提供機制,而不是提供策略。

1) 機制和策略分離的好處是啥?

可以使軟體包更易開發,也更容易根據不同的需求來調整以實現不同的策略。

2) 機制是啥?

機制是類似於提供什麼樣的功能。

3) 策略是啥?

策略類似於如何使用上面的功能

4) 驅動程式的機制和策略的分離有啥例子?

以軟碟機為例。軟碟機的驅動程式不帶策略,它的功能是將磁碟表示為乙個連續的資料塊陣列,系統高層負責提供策略。比如誰有權訪問軟盤驅動器,或者是直接訪問驅動器還是通過檔案系統訪問,以及使用者是否可以在驅動器上掛裝檔案系統等等,這些都是由系統高層決定的。每個環境可能會有不同的支援,因此驅動程式只要提供功能,盡量不帶入策略。

注意:編寫訪問硬體的核心**時,不要給使用者強加任何特定策略。因為不同的使用者有不同的需求,驅動程式應該處理如何使硬體可用的問題,而將怎樣使用硬體的問題留給上層應用程式。因此,當驅動程式只提供了訪問硬體的功能而沒有附加任何限制時,這個驅動程式就比較靈活。

1) 如果有一些特殊「策略」(比如通用的功能)時,是否可以在驅動程式中實現?

答案是肯定的。比如某個數字i/o驅動程式可以提供以位元組為單位訪問硬體的方法,這樣就可以避免每個使用驅動程式的應用程式重複編寫額外**來處理單個資料位的麻煩。

驅動程式的設計主要還是綜合考慮以下三個方面的因素:

1) 提供給使用者盡量多的選項

2) 編寫驅動程式要占用的時間

3) 盡量保持程式簡單而不至於錯誤叢生

不帶策略的驅動程式包括的一些典型的特徵:

1) 同時支援同步和非同步操作

2) 驅動程式能夠被多次開啟

3) 充分利用硬體特徵

4) 不具備用來「簡化任務」的或提供與策略相關的軟體層

5) …

不帶策略是軟體設計者的乙個共同目標

linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類:字元模組、塊模組或網路模組。注意:這種將模組分為不同型別或類的分類方式並不是非常嚴格,程式猿可以構造乙個大的模組,在其中實現不同型別的裝置驅動程式。但是,為每個新功能能建立乙個不同的模組,從而可以實現良好的伸縮性和擴充套件性

回環介面是啥?

回環介面在不同領域有不同的解釋,這裡只說網路裝置中的回環介面。

在網路裝置中,loopback被用來代表某些用於管理目的的虛擬介面,其含義中,並沒有「回環」的體現。

loopback虛擬介面會分配到乙個ip位址,但是這個ip位址不會對應到實際的物理介面。網路裝置中的loopback位址主要用來管理目的,例如裝置發出的報警。

網路裝置中的應用程式(管理程式)使用loopback位址傳送可接收資料流,而不是使用實際實體地址介面的位址。

對於外部來說,直接使用loopback位址來檢視裝置對應的資訊(比如報警資訊),與網絡卡的實體地址無關。

這裡我們也可以把這種位址理解為網路裝置提供的某個服務的位址。

具體解析見:

系統中的所有安全檢查都是由核心**進行的,如果核心有安全漏洞,則整個系統就會有安全漏洞。
在正式發行的核心版本中,只有授權使用者才能裝載模組。

也就是說,系統呼叫init_module會檢查呼叫程序是否具有將模組裝載到核心的權利。

因此,執行正式發布的核心時,只有超級使用者或者成功稱為超級使用者的入侵者才能使用特權**。

**驅動程式編寫者應當盡量避免在**中實現安全策略。**安全策略問題最好在系統管理員的控制之下,由核心的高層來實現。【當然了,這個也不是必須的,還需要視情況而定。】

驅動程式編寫者應當避免由於自身原因引入安全方面的缺陷。比如緩衝區溢位等。

任何從使用者程序得到的輸入只有經過核心嚴格驗證後才能使用。

必須小心對待未初始化的記憶體:任何從核心中得到的記憶體,都必須在提供給使用者程序或者裝置之前清零或以其他方式初始化,否則就有可能發生資訊洩露(比如資料和密碼的洩露等)。

如果裝置要解釋和分析傳送給它的資料,則必須確保使用者不能將可能破壞系統的任何東西傳送給它。

考慮裝置操作可能會造成的影響。比如:某些特定操作(比如格式化磁碟)可能會影響整個系統,那麼就應該將這種操作限制於特權使用者。

小心使用從第三方獲得的軟體。不應該執行乙個預編譯好的核心。畢竟原始碼是開放的,你不能保證你拿到的是無害的:)

linux核心也可編譯為不支援模組方式,從而可以關閉任何模組相關的安全漏洞。但是在這種情況下,所有所需的驅動程式必須直接編譯到核心中。【另外,在2.2及以後的核心版本中,我們還可以通過權能機制禁止在系統啟動後裝載核心模組。】

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...

裝置驅動(1) 驅動程式簡介

裝置驅動是幹什麼用的?linux裝置驅動程式使得特定的硬體響應乙個定義良好的內部程式設計介面 系統呼叫open read write close 這些介面完全隱藏了裝置的工作細節。使得使用者通過呼叫標準的系統呼叫來完成對於硬體的操作。字元裝置是一種按位元組順序訪問的裝置,因此字元裝置通常至少要實現o...