裝置驅動的藝術之旅 Linux 網絡卡驅動

2021-07-09 02:19:14 字數 2411 閱讀 7149

from: 裝置驅動的藝術之旅

通俗的講網絡卡即網路裝置卡,是計算機連線網路的大門。

常見的網絡卡型別

我們最常見的網絡卡就是pci插槽的網絡卡,不管是你的台式電腦,筆記本,亦或是伺服器等都隨處可以見

! 這裡需要說明的是乙太網控制器內部其實是遊mac(**訪問控制器) + phy(物理層編碼解碼晶元)組成。

所以其實一般有兩種方案來實現乙太網控制。

一種是mac和phy糅合一起 – 一般都做成pci網絡卡

還有一種便是mac和phy分離的設計,此種設計一般多用於嵌入式領域以及交換機領域。可能是cpu自帶mac或者mac被fpga等程式設計器代替,而後在外圍電路中將phy晶元與mac控制器連線即可!

網絡卡的主要功能

a.將源裝置的資料封裝為幀,並通過介質《網線、對無線網路來說就是電磁波》將資料傳送到網路上去。

b.接收網路上其它裝置傳過來的幀,並將幀重新組合成資料,通過協議確定目標裝置後將資料流傳輸到目標裝置上。

簡而言之就是傳送 + 接收!

網路裝置卡的速率是什麼

我們常常說,你的電腦是百兆乙太網嗎?還是千兆乙太網?

這裡說的百兆/千兆指的是傳輸速率!單位是bps.

百兆即100mbps 換算城m/s 就是100 / 8 ≈ 12.5m/s,這只是理論值哦!一般自家的區域網可以達到此速度,但是你家裡的寬頻一般達不到這麼高,撐死也就是2,3m/s的樣子,因為和速率相關的肯定就是傳輸介質,所以具體原因主要是因為基礎建設的環境複雜性以及基礎建設的設施的差異性!可能在比較落後的地方一般也就是幾百kb!

可能我們常見也就是百兆了,可是在如今大資料時代,企業早已經更新換代,千兆/萬兆都已經很投入使用!甚至十萬兆可能在未來兩三年也即將登陸!

我們說的千兆光模組/萬兆光模組是什麼?

簡單的說,光模組的作用就是光電轉換,傳送端把電訊號轉換成光訊號,通過光纖傳送後,接收端再把光訊號轉換成電訊號。我們都知道一般百兆預設都是使用雙絞線這種介質來進行傳輸的,但是並不是說使用其它的介質就不能傳輸,只是介於此種介質成本最低廉,環境搭建成本較低,所以才廣泛使用!如果百兆使用光釺傳輸可以嗎?當然可以!你加乙個百兆光模組即可!

現在超六類雙絞線也可以支援千兆的速率,但是還是有很多人來採用千兆光模組來搭建環境!具體使用什麼介質來傳輸多少頻寬的資料!全部經由自己選擇,根據需求選擇最適合你的布局!

linux 核心中對乙太網控制器的支援

linux 核心提供了豐富的封裝函式,支援各種介面的網路控制器。

核心為不同的網路裝置提供了一層封裝函式,更便於使用:

網路裝置型別

封裝函式

函式定義

乙太網裝置(ethernet)

alloc_etherdev(sizeof_priv)

alloc_netdev_mqs(sizeof_priv, 「eth%d」, ether_setup, txqs, rxqs);

光纖分布式資料介面(fddi)

alloc_fddidev(int sizeof_priv)

alloc_netdev(sizeof_priv, 「fddi%d」, fddi_setup)

高效能並行介面(hppi)

alloc_hippi_dev(int sizeof_priv)

alloc_netdev(sizeof_priv, 「hip%d」, hippi_setup)

令牌環(token ring)

alloc_trdev(int sizeof_priv)

alloc_netdev(sizeof_priv, 「tr%d」, tr_setup)

光纖通道(fibre channel)

alloc_fcdev(int sizeof_priv)

alloc_netdev(sizeof_priv, 「fc%d」, fc_setup)

紅外資料介面(inda)

alloc_irdadev(int sizeof_priv)

alloc_netdev(sizeof_priv, 「irda%d」, irda_device_setup)

上述我也說了,網路裝置的作用的就是傳送和接收!

那麼如何傳送?如何接收?

傳送流程

接收流程

有了報文流向我們就可以去設計我們自己的網絡卡驅動程式了!

上述圖不是我本人所畫,我覺得畫的非常不錯.

原圖鏈結請戳這裡和這裡..

by: keven - 點滴積累

驅動 linux裝置驅動 字元裝置驅動開發

preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...

Linux裝置驅動

一.簡介 作業系統是通過各種驅動程式來駕馭硬體裝置,它為使用者遮蔽了各種各樣的裝置,驅動硬體是作業系統最基本的功能,並且提供統一的操作方式。正如我們檢視螢幕上的文件時,不用去管到底使用nvidia晶元,還是ati晶元的顯示卡,只需知道輸入命令後,需要的文字就顯示在螢幕上。硬體驅動程式是作業系統最基本...

linux裝置驅動

1 flash的程式設計原理都是只能將1寫為0,而不能將0寫為1。所以在flash程式設計之前,必須將對應的塊擦除,而擦除的過程就是把所有位都寫為1的過程,塊內的所有位元組變為0xff。2 nand flash與nor flash相比容量大 低 nand flash中每個塊的最大擦寫次數是100萬次...