1.1 Linux裝置驅動程式分類
Linux系統的裝置分為三類:
(1)字元裝置(char device)
(2)塊裝置(block device)
(3)網路裝置(network device)。
字元裝置是指存取時沒有緩衝的裝置。(滑鼠,鍵盤,串列口)
塊裝置的讀寫都有緩衝來支援,並且塊裝置必須能夠隨機存取(random access)(硬碟,磁碟片,CD-ROM等)。一個檔案系統要安裝進入作業系統必須在塊裝置上。
網路裝置在Linux裡做專門的處理。為屏蔽物理裝置的多樣性,liunx對所有的網路裝置抽象,並定義統一概念:介面(interface)。對於每一個已經驅動了的網路裝置,都用一個struct device的資料結構表示。
網路裝置與字元裝置及塊裝置的不同
(1)網路介面不存在於linux檔案系統中,而是在核心中用一個net_device資料結構表示。而字元和塊裝置都存在與之對應的裝置檔案 (/dev/hda1).
(2)網路裝置在資料包發送和接收時,直接通過介面訪問,而不需要進行檔案的操作。
(3)網路介面是在系統初始化的時產生的,對於核心支援但不存在的物理裝置,將不存在與只對應的net_device結構。
在系統和驅動程式之間定義有專門的資料結構(sk_buff)進行資料的傳遞。系統裡支援對發送資料和接收資料的緩衝,提供流量控制機制,提供對多協議的支援。
1.2 編寫驅動程式的一些基本概念
1.2.1 發送和接收
這是一個網路裝置最基本的功能。
OS必須要提供兩個機制:
(1)找到驅動程式的發送函數
(2)驅動程式把收到的資料送給系統。
1.2.2 中斷
作業系統在硬體中斷髮生後調用驅動程式的處理常式。Linux支援中斷的共用,即多個裝置共用一個中斷。
1.2.3 時鐘
在網路驅動程式中,如果硬體沒有中斷功能,定時器可以提供輪詢(poll)方式對硬體進行存取。或者是實現某些協議時需要的逾時重傳等
上一篇:《[linux driver]用I/O命令訪問PCI匯流排裝置配置空間》
下一篇:《【Linux device driver】網路裝置驅動程式(二)》