Linux內(nèi)核數(shù)據(jù)包處理流程.doc

Linux內(nèi)核數(shù)據(jù)包處理流程.doc

ID:55631718

大小:96.00 KB

頁數(shù):22頁

時(shí)間:2020-05-21

Linux內(nèi)核數(shù)據(jù)包處理流程.doc_第1頁
Linux內(nèi)核數(shù)據(jù)包處理流程.doc_第2頁
Linux內(nèi)核數(shù)據(jù)包處理流程.doc_第3頁
Linux內(nèi)核數(shù)據(jù)包處理流程.doc_第4頁
Linux內(nèi)核數(shù)據(jù)包處理流程.doc_第5頁
資源描述:

《Linux內(nèi)核數(shù)據(jù)包處理流程.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、Linux內(nèi)核數(shù)據(jù)包處理流程-數(shù)據(jù)包接收與其說這篇文章分析了網(wǎng)卡驅(qū)動中中數(shù)據(jù)包的接收,還不如說是以e100為例,對網(wǎng)卡驅(qū)動編寫的一個(gè)說明。當(dāng)然,對數(shù)據(jù)包的接收說的很清楚。轉(zhuǎn)載數(shù)據(jù)包的接收作者:kendoKernel:2.6.12一、從網(wǎng)卡說起這并非是一個(gè)網(wǎng)卡驅(qū)動分析的專門文檔,只是對網(wǎng)卡處理數(shù)據(jù)包的流程進(jìn)行一個(gè)重點(diǎn)的分析。這里以Intel的e100驅(qū)動為例進(jìn)行分析。大多數(shù)網(wǎng)卡都是一個(gè)PCI設(shè)備,PCI設(shè)備都包含了一個(gè)標(biāo)準(zhǔn)的配置寄存器,寄存器中,包含了PCI設(shè)備的廠商ID、設(shè)備ID等等信息,驅(qū)動程序使用

2、來描述這些寄存器的標(biāo)識符。如下:CODE:structpci_device_id{????__u32vendor,device;????????/*VendoranddeviceIDorPCI_ANY_ID*/????__u32subvendor,subdevice;????/*SubsystemID'sorPCI_ANY_ID*/????__u32class,class_mask;????/*(class,subclass,prog-if)triplet*/????kernel_ulong_tdri

3、ver_data;????/*Dataprivatetothedriver*/};這樣,在驅(qū)動程序中,常常就可以看到定義一個(gè)structpci_device_id類型的數(shù)組,告訴內(nèi)核支持不同類型的PCI設(shè)備的列表,以e100驅(qū)動為例:#defineINTEL_8255X_ETHERNET_DEVICE(device_id,ich){????PCI_VENDOR_ID_INTEL,device_id,PCI_ANY_ID,PCI_ANY_ID,????PCI_CLASS_NETWORK_ETHERN

4、ET<<8,0xFFFF00,ich}????staticstructpci_device_ide100_id_table[]={????INTEL_8255X_ETHERNET_DEVICE(0x1029,0),????INTEL_8255X_ETHERNET_DEVICE(0x1030,0),????INTEL_8255X_ETHERNET_DEVICE(0x1031,3),……/*略過一大堆支持的設(shè)備*/????{0,}};在內(nèi)核中,一個(gè)PCI設(shè)備,使用structpci_driver結(jié)構(gòu)來描述

5、,structpci_driver{????structlist_headnode;????char*name;????structmodule*owner;????conststructpci_device_id*id_table;????/*mustbenon-NULLforprobetobecalled*/????int??(*probe)??(structpci_dev*dev,conststructpci_device_id*id);????/*Newdeviceinserted*/????

6、void(*remove)(structpci_dev*dev);????/*Deviceremoved(NULLifnotahot-plugcapabledriver)*/????int??(*suspend)(structpci_dev*dev,pm_message_tstate);????/*Devicesuspended*/????int??(*resume)(structpci_dev*dev);????????????????/*Devicewokenup*/????int??(*enab

7、le_wake)(structpci_dev*dev,pci_power_tstate,intenable);??/*Enablewakeevent*/????void(*shutdown)(structpci_dev*dev);????structdevice_driver????driver;????structpci_dynidsdynids;};因?yàn)樵谙到y(tǒng)引導(dǎo)的時(shí)候,PCI設(shè)備已經(jīng)被識別,當(dāng)內(nèi)核發(fā)現(xiàn)一個(gè)已經(jīng)檢測到的設(shè)備同驅(qū)動注冊的id_table中的信息相匹配時(shí),它就會觸發(fā)驅(qū)動的probe函數(shù)

8、,以e100為例:/**定義一個(gè)名為e100_driver的PCI設(shè)備*1、設(shè)備的探測函數(shù)為e100_probe;*2、設(shè)備的id_table表為e100_id_table*/staticstructpci_drivere100_driver={????.name=??????DRV_NAME,????.id_table=????e100_id_table,????.probe=??????e100_probe,????.remove=????__dev

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

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

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