詳細透徹的分析DM9000網絡卡驅動程式(1)

2021-07-05 16:04:54 字數 1761 閱讀 2027

自己感覺前段時間的學習,一直是東一榔頭,西一棒子,所以決定聽「趙磊」大哥的話:這個世界太浮躁,需要靜下心來做點兒學問。於是,哥們鼓起勇氣開始分析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

詳細透徹的分析DM9000網絡卡驅動程式(5)

上回書說到分配乙個網路裝置然後進行了初始化,接下來我們繼續啊,上 上 我了個去,啊 什麼時候能少點?可惜了我們這個時代的青年要完成祖國賦予的歷史使命,就要做出不懈努力,畢竟it業不想娛樂圈那樣,像楊冪就擊敗了影后得到了 最後歡迎mtv女歌手 獎,哎,為什麼能得這個獎?你懂我懂大家都懂,不就難理解為什...

驅動 DM9000網絡卡驅動分析

preface 核心原始碼版本 linux 2.6.18 網絡卡驅動 linux核心網路分層結構 dm9000晶元 dm9000是一款高度整合低功耗快速乙太網處理器,該晶元整合了mac和phy。dm9000可以和cpu直接連線,支援8位 16位和32位資料匯流排寬度。該晶元支援10m和100m自適應...

DM9000網絡卡驅動移植

網絡卡驅動移植 步驟1 確定相異性 步驟2 修改 一般就是修改 iobase 和中斷 按照原理圖,其片選訊號可能是往固定段落記憶體寫資料,即是片選到這個裝置。這個也是統一編址的一種方式。根據原理圖,修改其中段引腳,把其irq修改為原理圖上面的iro.網絡卡中本來就有記憶體,當網絡卡接受到資料時候,就...