uio是如何與dpdk對接的 一

2021-08-15 11:34:22 字數 1911 閱讀 2673

載入裝置驅動模組

裝置驅動模組被編譯成.o或者.ko,類似elf程式有乙個入口main函式,.ko模組入口函式是module_init(igbuio_pci_init_module),igbuio_pci_init_module( )在insmod後首先執行。**片段如下:

static

int __init

igbuio_pci_init_module(void)

pci_register_driver是乙個linux核心提供用來進行pci註冊的標準介面,將igbuio_pci_driver 作為作為引數傳入,這個結構在驅動程式裡定義,作為驅動程式和pci設聯絡的紐帶。

static

struct pci_driver igbuio_pci_driver = ;

.name:驅動名

.id_table:網絡卡id,驅動註冊後接管的網絡卡id

.probe:註冊處理函式

.remove:登出處理函式

常規網絡卡驅動,在open dev時候在申請資料儲存的快取(即資料報快取佇列),掛在adapter結構上,adapter結構是各個驅動的私有資料,為了統一管理約定位置緊挨著net_dev結構尾部,例如e1000網絡卡驅動的adapter:

struct e1000_adapter *adapter = netdev_priv(netdev);

/*** netdev_priv - access network device private data

* @dev: network device

** get network device private data

*/static inline void *netdev_priv(const struct net_device *dev)

adapter(即privata是不同網絡卡驅動的差異體現的地方)

快取佇列申請之後,需要和網絡卡dma對接,網絡卡才知道收到網路資料後dma將資料考到**。申請對接**:

static inline void *

dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,

gfp_t gfp)

dma訪問的是實體地址,它是怎麼知道這塊記憶體的實體地址呢?

1. 網絡卡資料傳送位址暫存器 tsad ,含義是」這個暫存器裡的位址,是網絡卡快取資料拷貝的對端位址」。bois在給pci裝置的暫存器分配了網絡卡暫存器的基位址,寫進裝置的配置空間。作業系統初始化時,為每個pci分配了pci_dev結構,並把bios獲取的並寫到了配置空間的位址讀出來寫到resource欄位中;

2. 網絡卡驅動在open裝置的時候申請緩衝區記憶體ring,得到這塊記憶體的虛擬位址(用於核心訪問)和實體地址(用於dma訪問),然後將這個實體地址寫到tsad中。

此時,這個網絡卡驅動就接管了這個網路裝置(網絡卡)。

那麼,dpdk何時接管網絡卡呢?

在dpdk的uio模組中,uio獲取網絡卡資源(resource)並儲存到uio_info中,為使用者態驅動準備資源。

/* remap pci resources described by bar #pci_bar in uio resource n. */

static

intigbuio_pci_setup_iomem(struct pci_dev *dev, struct uio_info *info,

int n, int pci_bar, const

char *name)

以上**為使用者態驅動準備好了網絡卡資源,使用者態通過internal_addr即可操作網絡卡暫存器。

iDB是如何運轉的 一

鄭昀 建立於2015 12 2 最後更新於2015 12 4 提綱 普通dba和文藝dba怎麼做sql審核 預執行庫如何實操 inception對備份 回滾伺服器的特殊處理 大家都做這件事,一定是因為當資料量大到一定程度,資料重要到一定程度時,online schema change 和刷庫不容有失...

SAP是如何與外界溝通的?

翻譯一篇文章吧,官方的help components of sap communication technology sap通訊互動技術 在sap的環境下,用abap 寫的經典的技術,和非abap開發的結構,二者互相通訊,雙向的通訊,這種需求十分豐富。下面的內容提供了乙個概覽,sap提供的多種不同整...

Host是如何與EC通訊的

第一種方式 遵循acpi規範完成通訊,通過lpc的62h 64h偏移 埠。此種方式適合host對ec進行讀寫操作。ec提供256位元組的可被系統讀寫的ram空間,ec的資源在該ram空間對映,通過訪問對應偏移 0x00 0xff 即可操作對應的資源。實際上就是外部ram的前256位元組。ec會將鍵盤...