Linux網(wǎng)卡驅(qū)動(dòng)程序分析.doc

Linux網(wǎng)卡驅(qū)動(dòng)程序分析.doc

ID:52199041

大小:52.50 KB

頁(yè)數(shù):12頁(yè)

時(shí)間:2020-03-24

Linux網(wǎng)卡驅(qū)動(dòng)程序分析.doc_第1頁(yè)
Linux網(wǎng)卡驅(qū)動(dòng)程序分析.doc_第2頁(yè)
Linux網(wǎng)卡驅(qū)動(dòng)程序分析.doc_第3頁(yè)
Linux網(wǎng)卡驅(qū)動(dòng)程序分析.doc_第4頁(yè)
Linux網(wǎng)卡驅(qū)動(dòng)程序分析.doc_第5頁(yè)
資源描述:

《Linux網(wǎng)卡驅(qū)動(dòng)程序分析.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、(轉(zhuǎn))Linux網(wǎng)卡驅(qū)動(dòng)程序分析              學(xué)習(xí)應(yīng)該是一個(gè)先把問(wèn)題簡(jiǎn)單化,再把問(wèn)題復(fù)雜化的過(guò)程。一開(kāi)始就著手處理復(fù)雜的問(wèn)題,難免讓人有心驚膽顫,捉襟見(jiàn)肘的感覺(jué)。讀Linux網(wǎng)卡驅(qū)動(dòng)也是一樣。那長(zhǎng)長(zhǎng)的源碼夾雜著那些我們陌生的變量和符號(hào),望而生畏便是理所當(dāng)然的了。不要擔(dān)心,事情總有解決的辦法,先把一些我們管不著的代碼切割出去,留下必須的部分,把框架掌握了,那其他的事情自然就水到渠成了

2、,這是筆者的心得。      一般在使用的Linux網(wǎng)卡驅(qū)動(dòng)代碼動(dòng)輒3000行左右,這個(gè)代碼量以及它所表達(dá)出來(lái)的知識(shí)量無(wú)疑是龐大的,我們有沒(méi)有辦法縮短一下這個(gè)代碼量,使我們的學(xué)習(xí)變的簡(jiǎn)單些呢?經(jīng)過(guò)筆者的不懈努力,在仍然能夠使網(wǎng)絡(luò)設(shè)備正常工作的前提下,把它縮減到了600多行,我們把暫時(shí)還用不上的功能先割出去。這樣一來(lái),事情就簡(jiǎn)單多了,真的就剩下一個(gè)框架了。      下面我們就來(lái)剖析這個(gè)可以執(zhí)行的框架。 &

3、nbsp;      限于篇幅,以下分析用到的所有涉及到內(nèi)核中的函數(shù)代碼,我都不予列出,但給出在哪個(gè)具體文件中,請(qǐng)讀者自行查閱。    首先,我們來(lái)看看設(shè)備的初始化。當(dāng)我們正確編譯完我們的程序后,我們就需要把生成的目標(biāo)文件加載到內(nèi)核中去,我們會(huì)先ifconfigeth0down和rmmod8139too來(lái)卸載正在使用的網(wǎng)卡驅(qū)動(dòng),然后insmod8139too.o把我們的驅(qū)動(dòng)加載進(jìn)去(其中8139too.o是我們編譯生成的目標(biāo)文件)。就

4、像C程序有主函數(shù)main()一樣,模塊也有第一個(gè)執(zhí)行的函數(shù),即module_init(rtl8139_init_module);在我們的程序中,rtl8139_init_module()在insmod之后首先執(zhí)行,它的代碼如下:    staticint__initrtl8139_init_module(void)  {        returnpci_module_init(&rtl

5、8139_pci_driver);  }    它直接調(diào)用了pci_module_init(),這個(gè)函數(shù)代碼在Linux/drivers/net/eepro100.c中,并且把rtl8139_pci_driver(這個(gè)結(jié)構(gòu)是在我們的驅(qū)動(dòng)代碼里定義的,它是驅(qū)動(dòng)程序和PCI設(shè)備聯(lián)系的紐帶)的地址作為參數(shù)傳給了它。rtl8139_pci_driver定義如下:    staticstructpci_driverrtl8139_pci_dri

6、ver={        name:MODNAME,          id_table:rtl8139_pci_tbl,        probe:rtl8139_init_one,        

7、;remove:rtl8139_remove_one,  };      pci_module_init()在驅(qū)動(dòng)代碼里沒(méi)有定義,你一定想到了,它是Linux內(nèi)核提供給模塊是一個(gè)標(biāo)準(zhǔn)接口,那么這個(gè)接口都干了些什么?筆者跟蹤了這個(gè)函數(shù),里面調(diào)用了pci_register_driver(),這個(gè)函數(shù)代碼在Linux/drivers/pci/pci.c中,pci_register_driver做了三件事情。  ①是把帶過(guò)來(lái)的參數(shù)rtl813

8、9_pci_driver在內(nèi)核中進(jìn)行了注冊(cè)。內(nèi)核中有一個(gè)PCI設(shè)備的大的鏈表,這里負(fù)責(zé)把這個(gè)PCI驅(qū)動(dòng)掛到里面去。  ②是查看總線上所有PCI設(shè)備(網(wǎng)卡設(shè)備屬于PCI設(shè)備的一種)的配置空間,如果發(fā)現(xiàn)標(biāo)識(shí)信息與rtl

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。