Linux網路驅動程式編寫(一)(轉)

worldblog發表於2007-08-10
Linux網路驅動程式編寫(一)(轉)[@more@]

  工作需要寫了我們公司一塊網路卡的Linux驅動程式。經歷一個從無到有的過程,深感技術交流的重要。Linux作為挑戰微軟壟斷的強有力武器,日益受到大家的喜愛。真希望她能在中國迅速成長。把程式文件貼出來,希望和大家探討Linux技術和應用,促進Linux在中國的普及。

  本文可隨意轉載,但請不要在盈利性出版物上刊登。

  一.Linux系統裝置驅動程式概述

  1.1 Linux裝置驅動程式分類

  Linux裝置驅動程式在Linux的核心原始碼中佔有很大的比例,原始碼的長度日益增加,主要是驅動程式的增加。在Linux核心的不斷升級過程中,驅動程式的結構還是相對穩定。在2.0.xx到2.2.xx的變動裡,驅動程式的編寫做了一些改變,但是從2.0.xx的驅動到2.2.xx的移植只需做少量的工作。

  Linux系統的裝置分為字元裝置(char device),塊裝置(block device)和網路裝置(network device)三種。字元裝置是指存取時沒有快取的裝置。塊裝置的讀寫都有快取來支援,並且塊裝置必須能夠隨機存取(random access),字元裝置則沒有這個要求。典型的字元裝置包括滑鼠,鍵盤,序列口等。塊裝置主要包括硬碟軟盤裝置,CD-ROM等。一個檔案系統要安裝進入作業系統必須在塊裝置上。

  網路裝置在Linux裡做專門的處理。Linux的網路系統主要是基於BSD unix的socket機制。在系統和驅動程式之間定義有專門的資料結構(sk_buff)進行資料的傳遞。系統裡支援對傳送資料和接收資料的快取,提供流量控制機制,提供對多協議的支援。

  1.2 編寫驅動程式的一些基本概念

  無論是什麼作業系統的驅動程式,都有一些通用的概念。作業系統提供給驅動程式的支援也大致相同。下面簡單介紹一下網路裝置驅動程式的一些基本要求。

  1.2.1 傳送和接收

  這是一個網路裝置最基本的功能。一塊網路卡所做的無非就是收發工作。所以驅動程式裡要告訴系統你的傳送函式在哪裡,系統在有資料要傳送時就會呼叫你的傳送程式。還有驅動程式由於是直接操縱硬體的,所以網路硬體有資料收到最先能得到這個資料的也就是驅動程式,它負責把這些原始資料進行必要的處理然後送給系統。這裡,作業系統必須要提供兩個機制,一個是找到驅動程式的傳送函式,一個是驅動程式把收到的資料送給系統。是驅動程式把收到的資料送給系統。

  1.2.2 中斷

  中斷在現代計算機結構中有重要的地位。作業系統必須提供驅動程式響應中斷的能力。一般是把一箇中斷處理程式註冊到系統中去。作業系統在硬體中斷髮生後呼叫驅動程式的處理程式。Linux支援中斷的共享,即多個裝置共享一箇中斷。

  1.2.3 時鐘

  在實現驅動程式時,很多地方會用到時鐘。如某些協議裡的超時處理,沒有中斷機制的硬體的輪詢等。作業系統應為驅動程式提供定時機制。一般是在預定的時間過了以後回撥註冊的時鐘函式。在網路驅動程式中,如果硬體沒有中斷功能,定時器可以提供輪詢(poll)方式對硬體進行存取。或者是實現某些協議時需要的超時重傳等。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-940216/,如需轉載,請註明出處,否則將追究法律責任。

相關文章