1. 程式人生 > >Linux下的網路裝置驅動(一)

Linux下的網路裝置驅動(一)

網路裝置介面層主要是為變化多端的網路定義了一個統一且抽象的net_device,實現了多種硬體在軟體層次上的統一。網路裝置驅動主要是填充net_device的成員並註冊net_device來實現硬體操作函式和核心的掛接。通常情況下,網路裝置驅動以中斷方式接受資料,而net_device中則定義了poll_controller這種純輪詢的介面方式,另外由於寬頻介面每秒會收到幾千個資料包,如果使用中斷方式會導致系統性能下降,為了提高linux在寬頻系統上的效能,網路子系統開發者建立了一種基於輪詢的資料接收方式是NAPI(New API),其資料接收流程是接收中斷來臨—關閉接收中斷—以輪詢方式接收完所有資料—開啟接收中斷—接收中斷來臨……”
,與NAPI相關的函式有新增NAPI,使能NAPI,排程NAPI,具體函式是netif_napi_addnapi_enablenapi_schedule。最後需要注意的是對於NAPI方式和中斷方式接收資料,驅動設計上還是有一些不同的,比如NAPI方式是用netif_receive_skb函式將資料包傳遞給核心,而不是使用netif_rx函式。