載入裝置驅動模組
裝置驅動模組被編譯成.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會將鍵盤...