linux網絡卡驅動開發一之網絡卡子系統模型

2021-06-26 06:40:03 字數 1758 閱讀 3472

自己感覺前段時間的學習,一直是東一榔頭,西一棒子,所以決定聽「趙磊」大哥的話:這個世界太浮躁,需要靜下心來做點兒學問。於是,哥們鼓起勇氣開始分析linux核心中的dm9000驅動程式

1.網路相關的程式在linux**中的層次機構

從哥們第一天進公司起,就讓哥們開始整理****,我以為,整理**應該是從乙個較高的層次去整理,只有對整個**的架構,設計流程了解了,才能算的上是去整理。

所以,什麼東西都是經歷過後,才能明白其中的奧秘,不是有句叫做:一覽眾山小嘛,所以,我將先從從乙個高的層次,或者說乙個抽象的層次,來闡述一下網路相關的東西(重點討論驅動程式)在linux核心中的層次結構

圖一好的,你看到了,我們的裝置驅動程式是處於實際硬體裝置層之上的一層,所以,也算起到了承上啟下的作用,它是在核心空間的,真個linux核心**有相當大的一部分就是裝置驅動程式。

2.實際的網路的傳遞過程

下面,我們說一下實際的網路包究竟經過怎樣乙個流程從使用者空間傳送到驅動,再到實際的硬體裝置的,或者怎樣由實際的裝置接收之後,經由裝置驅動層傳遞到使用者空間的。上圖。。。

圖二好了,這下你清楚了吧?嗯?看不明白?好吧,怎麼說哥們既然決定講了,就將它個翻天覆地,透透徹徹。。。

(1)接收過程,如上如,網路上的資料報到達網絡卡後,網絡卡產生中斷,然後裝置驅動層收到中斷後,開始進行網路包的接收,接收完之後呼叫乙個netif_rx函式交給網路協議層(層次結構上圖一),然後就是一層一層的網上傳到使用者空間了

(2)傳送過程,從使用者空間過來的資料報,經過層層穿越之後,到達網路協議層,然後呼叫乙個dev_queue_xmit()函式之後就不管了,剩下的交給驅動層經過處理後,使用函式hard_start_xmit()函式傳送,然後硬體上網絡卡開始傳送資料報了

這就是整個過程,如果你還是不明白,額。。。那麼我只能建議你看看《計算機網路》謝老爺子寫的那本,第四版或者第五版都行,如果你對中斷這塊兒的機制不了解,額。。。可以看看微控制器相關的東西,其實,通俗的講,中斷就是一種機制,什麼機制呢,舉個例子就是,假如你正在上課,忽然同學打**給你,此時,你呢,上課的狀態就先斷了,而要先接聽**,這就是一種中斷,當然,實際的各種硬體裝置的中斷要比這個複雜,比如儲存現場了等等,基本上是這個意思,中斷是一種機制,這種機制有利於提高工作效率,還拿剛才的上課舉例子,你總不能上課時一直在看有沒有**打來吧,你需要設定鈴聲,等**來了通知你。。。好了。。如果說你還是不太明白。。哥啊。。咱問「百哥」或是「谷姐」吧。。

好了,扯淡到此為止,分析馬上開始。。。。開始上圖。。。

看見這兩個檔案了嗎?看了哈。。嗯。。。這就是我們分析的重點連個檔案。。。嗯?在哪?額。。。\linux-2.6.39.1\drivers\net 目錄下。。。不要告訴哥們你不會用source insight昂,嗯?你真不會,好吧。。哥們只能勉為其難的告訴你這是乙個檢視**的好工具。。剩下怎麼用。。你可以去問「百哥」了。。

好了,我們開啟dm9000.c 一共2056行。。嗯。。不多。。在我們的征服範圍之內。。。嗯?什麼?你嫌多?唉。。其實我也嫌多啊。。我恨不得就一行。。。不過,像咱 這農二代,這點苦還是要吃的的。。好歹說哥們參加工作的第乙個專案也寫了2000多行**呢。。

好了。。還是上圖吧。。不然你會說我囉嗦了。。雖然本來就是有點兒囉嗦。。哈哈。。

1嗯。。相信你自己。。你沒看錯。。是從最後一行往上走的。。為什麼?鐵道部發言說了。。「我只能說這是乙個奇蹟」,難怪linux都是乙個奇蹟。。。大家都知道對於應用程式,我們一般習慣於找main函式,然後開始分析,不過對於驅動,哥們只能拿告訴你,沒有main函式,那我們開始從哪分析呢。。。答案是:module_init,模組初始化函式,這才是驅動程式的入口,當然還有乙個它的清理函式module_exit

Linux驅動之虛擬網絡卡

底層 工作在核心層的朋友應該有這種感覺,才開始學的時候真的很難,也就是說上手難,我就拿linux驅動來說吧,寫乙個完整的驅動,你得裝乙個虛擬機器跑linux吧,用來編譯驅動程式,虛擬機器裡面需要安裝一些庫和工具,驅動程式必須跑在乙個完整的系統上,所以首先你得搭建好整個系統,你還得了解硬體時序等,這些...

linux 網絡卡驅動

如何安裝linux網絡卡驅動呢,看看下面的說明。適用機型 所有xseries 205 所有xseries 206 所有xseries 225 所有xseries 226 所有xseries 235 所有xseries 236 所有xseries 255 所有xseries 305 所有xseries...

linux網絡卡驅動安裝

有些主機板裝linux之後網絡卡沒驅動的。就要安裝驅動 方法如下 2.cd arl1e x.x.x.x src 3.make install 4.lib modules 2.6.18 238.5.1.el5 kernel drivers net atl1e atl1e.ko 5 insmod arl...