亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 73339 | 回復(fù): 61
打印 上一主題 下一主題

【原】Linux-千兆網(wǎng)卡驅(qū)動實現(xiàn)機制淺析 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-03-25 20:08 |只看該作者 |倒序瀏覽
Linux-千兆網(wǎng)卡驅(qū)動實現(xiàn)機制淺析

2009-3

by Minit




     本人對網(wǎng)卡驅(qū)動沒有太多實踐經(jīng)驗,此分析純屬學(xué)習(xí)總結(jié)所為,希望各位CU的大牛能及時的提出其中的問題,也歡迎大家積極拍磚,我拋磚引玉,你們拋磚給我吧^_^。我相信這其中的分析一定有不太正確的地方,希望各位能夠不吝賜教。如果轉(zhuǎn)載請注明出處。


1.引言
    本分析主要針對e1000網(wǎng)卡,驅(qū)動源碼為7.3.20-k2。本文的目的不是為了講述如何編寫驅(qū)動程序,主要是分析網(wǎng)卡驅(qū)動內(nèi)部的實現(xiàn)機制。通過此分析,希望可以理解驅(qū)動程序中的各個部分的關(guān)系,對網(wǎng)卡發(fā)送和接收數(shù)據(jù)包有直觀的了解,同時也希望對設(shè)計網(wǎng)卡驅(qū)動程序有幫助。由于網(wǎng)卡驅(qū)動程序與硬件和操作系統(tǒng)都有很緊密的聯(lián)系,故要把某些問題完全弄清楚,需要很多的經(jīng)驗與相關(guān)知識,介于自身的水平有限,且自身經(jīng)驗較少,故肯定存在很多問題,希望本文的讀者發(fā)現(xiàn)了問題不吝與作者聯(lián)系。

2.網(wǎng)卡驅(qū)動的體系結(jié)構(gòu)
       網(wǎng)卡作為一個PCI設(shè)備,其必須遵守相應(yīng)的PCI規(guī)范,即必須為網(wǎng)卡定義相應(yīng)的標(biāo)識號,每個PCI外設(shè)由一個總線編號、一個設(shè)備編號及一個功能編號來標(biāo)識。網(wǎng)卡驅(qū)動程序則需要定義相應(yīng)的pci_device_id結(jié)構(gòu)來表示其支持的PCI外設(shè)的標(biāo)識,通過在驅(qū)動程序的pci_device_id中查找設(shè)備標(biāo)識號,將驅(qū)動程序與設(shè)備聯(lián)系起來。網(wǎng)卡作為PCI設(shè)備,其包括兩類空間,一種是配置空間, CPU不能直接訪問,訪問這個空間,需要借助BIOS功能;另一種是普通的控制寄存器空間,這部分經(jīng)過映射后,CPU可以直接訪問控制。
       在硬件加電初始化時,BIOS統(tǒng)一檢查所有的PCI設(shè)備,并為每個設(shè)備分配一個物理地址,該地址通過BIOS獲得并寫到設(shè)備的配置空間內(nèi),驅(qū)動程序就可以將網(wǎng)卡的普通控制寄存器映射到一段內(nèi)存空間內(nèi),CPU通過訪問映射后的虛擬地址來操控網(wǎng)卡的寄存器。當(dāng)操作系統(tǒng)初始化時,其為每個PCI設(shè)備分配一個pci_dev結(jié)構(gòu),并將前面分配的物理地址寫到pci_devresource字段中。在網(wǎng)卡驅(qū)動程序中則可以通過讀取pci_dev中的resource字段獲得網(wǎng)卡的寄存器配置空間地址,其由函數(shù)pci_resource_start()pci_resource_end()獲得該空間的起始位置,通過ioremap()將該段位置映射到主存中,以便CPU訪問控制網(wǎng)卡的I/O和內(nèi)存空間。如重啟網(wǎng)卡設(shè)備,則是通過向映射后的網(wǎng)卡的相應(yīng)寄存器寫入命令實現(xiàn),其通過映射后的首地址及相應(yīng)的寄存器偏移量找到該寄存器的位置,然后通過函數(shù)writeb()寫該寄存器。有關(guān)相關(guān)寄存器對應(yīng)的偏移量,一般是通過網(wǎng)卡的相關(guān)的datasheet獲得。如果要獲取網(wǎng)卡的MAC地址,則一般通過函數(shù)readb()讀取首地址開始的前六位內(nèi)容即可得到。
    通過pci_read_config_pci_write_config_系列函數(shù)可以讀寫網(wǎng)卡的配置空間,如開啟網(wǎng)卡設(shè)備就是將網(wǎng)卡配置空間的command域置1,從而設(shè)備就可以將寄存器映射到內(nèi)存。如通過函數(shù)pci_read_config_byte(pci_dev pdev,PCI_INTERRUPT_LINE,&irq)獲得設(shè)備所分配的中斷號并保存在irq中。pci_read_config_pci_write_config_系列函數(shù)實際上是調(diào)用pci_bus_read_config_pci_bus_write_config_系列函數(shù)實現(xiàn)的,這些函數(shù)實際操作網(wǎng)卡對應(yīng)的PCI總線結(jié)構(gòu)。有關(guān)PCI寄存器的配置空間可參考《Linux Device Driver 3rd》或《PCI Bus Demystified》。
       網(wǎng)卡作為一個規(guī)范的PCI設(shè)備,其對應(yīng)的結(jié)構(gòu)體pci_dev代表了網(wǎng)卡設(shè)備,體現(xiàn)了作為PCI設(shè)備所應(yīng)有的規(guī)范。網(wǎng)卡的網(wǎng)絡(luò)傳輸性質(zhì),實際是通過另一結(jié)構(gòu)體net_device來體現(xiàn)的,該結(jié)構(gòu)體的初始化由網(wǎng)卡驅(qū)動程序?qū)崿F(xiàn)。內(nèi)核中對網(wǎng)卡的操作,其實質(zhì)就是對net_device結(jié)構(gòu)的操作,pci_devnet_device都表示網(wǎng)卡設(shè)備,只是體現(xiàn)的角度不一樣。net_device是對特定適配器的抽象,其為上層協(xié)議提供了統(tǒng)一的接口,網(wǎng)卡驅(qū)動則基于特定適配器實現(xiàn)了這一抽象。

       PCI
設(shè)備的驅(qū)動程序由pci_driver結(jié)構(gòu)體表示,故網(wǎng)卡驅(qū)動應(yīng)該是該結(jié)構(gòu)體的一個實例,在該結(jié)構(gòu)體中應(yīng)該要定義實現(xiàn)與網(wǎng)卡相關(guān)的參數(shù)以及相應(yīng)的操作。網(wǎng)卡驅(qū)動實際操作的特定適配器,是由與硬件相關(guān)的adapter所表示的結(jié)構(gòu)體,adapter體現(xiàn)了大部分與硬件相關(guān)的屬性,網(wǎng)卡驅(qū)動除了直接對pci_dev結(jié)構(gòu)操作外,其他對網(wǎng)卡設(shè)備的操作基本是對adapter結(jié)構(gòu)體的操作。adapter體現(xiàn)了net_devicepci_dev的關(guān)聯(lián),也實現(xiàn)了網(wǎng)絡(luò)設(shè)備的適配器無關(guān)性。與網(wǎng)卡設(shè)備pci_dev的通信是通過adapter來實現(xiàn)的,而這個實現(xiàn)則是網(wǎng)卡驅(qū)動所要完成的任務(wù)。

    下面圖2-1描述了三個重要數(shù)據(jù)結(jié)構(gòu)間的關(guān)系,pci_dev結(jié)構(gòu)體現(xiàn)了網(wǎng)卡的配置空間和I/O與內(nèi)存區(qū)域,net_device結(jié)構(gòu)則向內(nèi)核提供了操作網(wǎng)卡的抽象接口,其參數(shù)值可按照功能分為5個部分。e1000_adapter結(jié)構(gòu)除了體現(xiàn)相應(yīng)的硬件無關(guān)性外,還管理了發(fā)送與接收數(shù)據(jù)包的相應(yīng)緩沖空間,網(wǎng)卡的物理地址空間映射后的虛擬地址也在此結(jié)構(gòu)中保存。e1000_adapter結(jié)構(gòu)中的e1000_hw結(jié)構(gòu)主要保存網(wǎng)卡的硬件參數(shù),其值就是通過讀取pci_dev的內(nèi)容獲取而來的。以上的數(shù)據(jù)結(jié)構(gòu)在網(wǎng)卡工作時起著最核心的作用,同時也是編寫驅(qū)動程序必須操作的結(jié)構(gòu)體。
2-1 網(wǎng)卡驅(qū)動程序的主要數(shù)據(jù)結(jié)構(gòu)


[ 本帖最后由 Minit 于 2009-3-25 20:35 編輯 ]

評分

參與人數(shù) 1可用積分 +30 收起 理由
scutan + 30 原創(chuàng)內(nèi)容

查看全部評分

論壇徽章:
0
2 [報告]
發(fā)表于 2009-03-25 20:09 |只看該作者
3.  網(wǎng)卡設(shè)備的注冊與初始化
        網(wǎng)卡設(shè)備的注冊與初始化是在其相關(guān)的驅(qū)動程序的e1000_probe()函數(shù)中實現(xiàn)的,有關(guān)設(shè)備如何與該驅(qū)動相關(guān)聯(lián),以及如何調(diào)用到e1000_probe()的,在此不作介紹。在函數(shù)e1000_probe()中首先調(diào)用函數(shù)pci_enable_device()啟用設(shè)備,然后聲明了DMA空間,接著調(diào)用函數(shù)alloc_etherdev()生成結(jié)構(gòu)體net_device,該結(jié)構(gòu)體就表示了網(wǎng)卡設(shè)備,對net_device的參數(shù)進行了初始化后,調(diào)用register_netdev()注冊該設(shè)備。
        以上僅是對設(shè)備的注冊,設(shè)備的初始化主要包括對兩個結(jié)構(gòu)體的賦值,一個是net_device,另一個則是e1000_adapter。對e1000_adapter的初始化包括對其中的e1000_hw結(jié)構(gòu)的初始化,其調(diào)用函數(shù)e1000_sw_init()實現(xiàn)。在對e1000_hw的初始化過程中使用了ioremap()實現(xiàn)了網(wǎng)卡硬件地址與內(nèi)存虛擬地址之間的映射。
        對網(wǎng)卡設(shè)備進行撤銷則調(diào)用函數(shù)free_netdev()實現(xiàn)。有關(guān)網(wǎng)卡設(shè)備注冊與初始化的更詳細(xì)的過程可以參考《Understanding Linux Network Internals》。


[ 本帖最后由 Minit 于 2009-3-25 20:15 編輯 ]

論壇徽章:
0
3 [報告]
發(fā)表于 2009-03-25 20:10 |只看該作者
4.  網(wǎng)卡設(shè)備的啟動與關(guān)閉
       網(wǎng)卡設(shè)備啟動時首先調(diào)用函數(shù)e1000_open(),在該函數(shù)中調(diào)用e1000_request_irq()申請中斷號及其相應(yīng)的中斷處理程序e1000_intr(),其實際是調(diào)用request_irq()函數(shù)來實現(xiàn)的。在函數(shù)e1000_open()中調(diào)用e1000_setup_all_tx_resources()根據(jù)發(fā)送隊列數(shù)建立發(fā)送緩沖區(qū),每個緩沖區(qū)的建立由函數(shù)e1000_setup_tx_resources()實現(xiàn),在e1000_setup_tx_resources()中,主要是對描述發(fā)送緩沖區(qū)的結(jié)構(gòu)體e1000_tx_ring的初始化,其將DMA緩沖區(qū)與網(wǎng)卡所映射的虛擬地址空間聯(lián)系起來,使用函數(shù)pci_alloc_consistent()實現(xiàn)一致性映射。而虛擬地址空間與網(wǎng)卡的物理地址相對應(yīng),故而這三種空間就對應(yīng)了起來,DMA也就可以在此基礎(chǔ)上實現(xiàn)了,當(dāng)數(shù)據(jù)包內(nèi)容被映射到DMA緩沖區(qū)后,其將完全由設(shè)備操控。DMA的緩沖區(qū)的初始化在驅(qū)動程序的e1000_probe()函數(shù)中實現(xiàn)。e1000_open()函數(shù)會調(diào)用e1000_up()對網(wǎng)卡的一些相關(guān)的軟硬件參數(shù)與空間進行配置,如硬件寄存器的讀寫,數(shù)據(jù)包接收與發(fā)送空間的處理函數(shù)的初始化等。發(fā)送緩沖空間的初始化結(jié)構(gòu)及相互間的關(guān)系如圖4-1所示。
     接收緩沖區(qū)的初始化與上述類似,由e1000_setup_all_rx_resources()調(diào)用e1000_setup_rx_resources()對結(jié)構(gòu)體e1000_rx_ring進行初始化。接收緩沖空間的結(jié)構(gòu)如圖4-2所示。
4-1 發(fā)送緩沖區(qū)的結(jié)構(gòu)圖




                                                      圖4-2 接收緩沖區(qū)的結(jié)構(gòu)圖



    網(wǎng)卡的關(guān)閉由函數(shù)e1000_close()實現(xiàn),其會首先關(guān)閉中斷,然后釋放中斷號,并且會釋放網(wǎng)卡申請的相應(yīng)的空間。



[ 本帖最后由 Minit 于 2009-3-25 20:56 編輯 ]

論壇徽章:
0
4 [報告]
發(fā)表于 2009-03-25 20:11 |只看該作者
5.  發(fā)送與接收數(shù)據(jù)包
數(shù)據(jù)包的發(fā)送:

                                                                 圖5-1 發(fā)送數(shù)據(jù)包的結(jié)構(gòu)圖及相互關(guān)系

      根據(jù)發(fā)送隊列數(shù)num_tx_queues建立相應(yīng)的發(fā)送緩沖區(qū)結(jié)構(gòu)e1000_tx_ring,在該結(jié)構(gòu)中有描述該區(qū)域的指向e1000_tx_desc結(jié)構(gòu)的desc,該緩沖區(qū)指向的dma總線地址,用于接收硬件傳送來的用e1000_buffer結(jié)構(gòu)描述的緩沖塊數(shù)組buffer_info[],另外的幾個參數(shù)則主要用于描述這些緩沖塊,其中count表示緩沖塊的個數(shù),next_to_use和next_to_clean主要描述緩沖塊的使用狀態(tài),如已經(jīng)接收接收了數(shù)據(jù)的位置及準(zhǔn)備接收的位置,當(dāng)有新的數(shù)據(jù)包要發(fā)送時,首先由上層協(xié)議調(diào)用e1000_xmit_frame(),在該函數(shù)中接著調(diào)用e1000_tx_queue()根據(jù)相應(yīng)的參數(shù)找到緩沖塊存放,緩沖塊的初始化則由函數(shù)e1000_tx_map()實現(xiàn)。buffer_info指向的環(huán)形緩沖塊區(qū)域主要用來接收總線地址映射來的數(shù)據(jù)包,所有的緩沖塊用next_to_match連接成一個環(huán),每個緩沖塊用結(jié)構(gòu)體e1000_buffer表示,在該結(jié)構(gòu)中,skb存放數(shù)據(jù)包的內(nèi)容,dma表示該數(shù)據(jù)包所在的總線地址。此處使用函數(shù)pci_map_single()進行流式映射,的映射方向為PCI_DMA_TODEVICE,控制總線會把虛擬地址空間所指內(nèi)容映射到總線地址,然后將該內(nèi)容由網(wǎng)卡傳送出去。發(fā)送數(shù)據(jù)包的相關(guān)結(jié)構(gòu)圖及相互關(guān)系如圖5-1所示。
     e1000_tx_ring結(jié)構(gòu)中的desc所指向的buffer_addr記錄了每次發(fā)送的緩沖塊所映射的總線地址,即buffer_addr記錄的是總線地址。而desc本是一個虛擬地址,該虛擬地址是通過pci_alloc_consistent()映射的發(fā)送緩沖區(qū)的地址,其與DMA緩沖區(qū)中的一段總線地址相對應(yīng),該總線地址由e1000_tx_ring結(jié)構(gòu)中的dma成員保存,這種映射關(guān)系在對開啟網(wǎng)卡時就實現(xiàn)了,其與在發(fā)送數(shù)據(jù)包時映射的總線地址有區(qū)別,后者是在發(fā)送時動態(tài)進行的。
數(shù)據(jù)包的接收

                                                                圖5-2 接收數(shù)據(jù)包的結(jié)構(gòu)圖及相互關(guān)系
      根據(jù)接收隊列數(shù)num_rx_queues建立相應(yīng)的接收緩沖區(qū)結(jié)構(gòu)e1000_rx_ring,在該結(jié)構(gòu)中有描述該區(qū)域的指向e1000_rx_desc結(jié)構(gòu)的desc,該緩沖區(qū)指向的dma總線地址,用于接收硬件傳送來的用e1000_buffer結(jié)構(gòu)描述的緩沖塊數(shù)組buffer_info[],另外的幾個參數(shù)則主要用于描述這些緩沖塊,其中count表示緩沖塊的個數(shù),next_to_use和next_to_clean主要描述緩沖塊的使用狀態(tài),如已經(jīng)接收接收了數(shù)據(jù)的位置及準(zhǔn)備接收的位置,當(dāng)有新的數(shù)據(jù)包要到來時,則根據(jù)這兩個參數(shù)找到相應(yīng)的區(qū)域存放。對于需要分片接收的數(shù)據(jù)包則利用了ps_page和ps_page_dma來實現(xiàn),參數(shù)cpu指定了該接收緩沖隊列所屬的處理器?偩地址與要發(fā)送的虛擬地址間的映射方向為PCI_DMA_FROMDEVICE,控制總線會把總線地址的內(nèi)容映射到虛擬地址空間內(nèi)。接收數(shù)據(jù)包的相關(guān)結(jié)構(gòu)圖及相互關(guān)系如圖5-2所示。
     當(dāng)有新的數(shù)據(jù)包到達時,首先觸動中斷處理函數(shù)e1000_intr(),在函數(shù)中會為新來的數(shù)據(jù)包在緩沖塊數(shù)組buffer_info中找到一個新的緩沖塊位置,并完成e1000_buffer結(jié)構(gòu)的賦值。數(shù)據(jù)包的接收其實就是將總線地址指向的內(nèi)容拷貝到skb中,然后根據(jù)skb中的協(xié)議將其傳給相應(yīng)的上層協(xié)議的接收函數(shù)。


[ 本帖最后由 Minit 于 2009-3-25 20:57 編輯 ]

論壇徽章:
0
5 [報告]
發(fā)表于 2009-03-25 20:11 |只看該作者
6.  網(wǎng)卡驅(qū)動程序的設(shè)計
      編寫網(wǎng)卡驅(qū)動程序,需要對以下三類結(jié)構(gòu)體進行相應(yīng)的操作:
     1.與網(wǎng)絡(luò)協(xié)議棧相關(guān)的結(jié)構(gòu)體,如sk_buff結(jié)構(gòu)體。
     2.網(wǎng)卡和協(xié)議棧接口相關(guān)的結(jié)構(gòu)體,如net_device結(jié)構(gòu)體。
     3.與I/O總線相關(guān)的結(jié)構(gòu)體,如利用PCI總線進行數(shù)據(jù)包傳送的DMA緩沖區(qū)以及表示網(wǎng)卡的pci_dev結(jié)構(gòu)體。
    設(shè)計網(wǎng)卡驅(qū)動時,需要針對以上的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)相應(yīng)的功能,如對sk_buff結(jié)構(gòu)的操作實現(xiàn)對數(shù)據(jù)包的有效控制;對net_device結(jié)構(gòu)的操作可以對網(wǎng)卡進行操作(如開啟、關(guān)閉等),可以發(fā)送數(shù)據(jù)包以及輪詢數(shù)據(jù)包,可以制定網(wǎng)卡的相應(yīng)的定時操作以及統(tǒng)計數(shù)據(jù)包,可以為用戶提供配置功能(ethtool)等。在設(shè)計網(wǎng)卡驅(qū)動時,需要考慮如何與上層協(xié)議的協(xié)調(diào)以及對底層總線地址的控制。
    有關(guān)網(wǎng)卡驅(qū)動程序更詳細(xì)的設(shè)計流程可以參考《Essential Linux Device Driver》及《Linux Device Driver 3rd》。


7.  總結(jié)
     本文的分析重點為網(wǎng)卡驅(qū)動中涉及到的重要數(shù)據(jù)結(jié)構(gòu),以及發(fā)送和接收數(shù)據(jù)包的實現(xiàn),對這些實現(xiàn)機制了解后,對于設(shè)計和實現(xiàn)驅(qū)動程序應(yīng)該會有幫助,因為該機制本身難度很大,加上作者水平有限,其中的分析結(jié)論不能保證完全正確。


尚有不能明確的問題,希望大牛們能幫我解答:
1.PCI總線地址與網(wǎng)卡物理地址這兩個之間的關(guān)系,我一直不是很清楚,所以以上的分析都未明確說明,在畫圖時都忽略了這部分細(xì)節(jié);
2.DMA buffer在接收包和發(fā)包時這其中的ring是如何詳細(xì)調(diào)度的;
······未完待續(xù)

[ 本帖最后由 Minit 于 2009-3-25 21:00 編輯 ]

論壇徽章:
0
6 [報告]
發(fā)表于 2009-03-25 20:24 |只看該作者
強悍,拜讀!

論壇徽章:
0
7 [報告]
發(fā)表于 2009-03-25 20:30 |只看該作者

回復(fù) #6 scutan 的帖子

我來支持版主的工作,呵呵~
這個帖子估計會有很多磚頭的,我做好心理準(zhǔn)備了,O(∩_∩)O~
有時間的話我會再深入分析一下,這只做拋磚引玉咯。

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
8 [報告]
發(fā)表于 2009-03-25 21:27 |只看該作者
Minit兄有段時間沒來了。一來又出好文章了,最近偶也正在了解網(wǎng)卡驅(qū)動,正好參考這篇文章啊。

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
9 [報告]
發(fā)表于 2009-03-25 21:48 |只看該作者
歡迎Minit兄有時間的時候把分析e1000_probe()的總結(jié)分享一下。

論壇徽章:
0
10 [報告]
發(fā)表于 2009-03-25 22:08 |只看該作者
原帖由 Minit 于 2009-3-25 20:11 發(fā)表
尚有不能明確的問題,希望大牛們能幫我解答:
1.PCI總線地址與網(wǎng)卡物理地址這兩個之間的關(guān)系,我一直不是很清楚,所以以上的分析都未明確說明,在畫圖時都忽略了這部分細(xì)節(jié);
2.DMA buffer在接收包和發(fā)包時這其中的ring是如何詳細(xì)調(diào)度的; ...


PCI總線地址你指什么?網(wǎng)卡物理地址你又指什么?

ring調(diào)度指什么?

偶自認(rèn)對Intel的千兆網(wǎng)卡很熟悉,對PCI這塊兒的機制也應(yīng)該很了解了,但是還是看不明白你問什么。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP