DPDK建立kni裝置

2021-09-24 05:18:36 字數 1958 閱讀 1139

dpdk的核心kni驅動程式,在初始化函式kni_init中註冊kni裝置的時候,使用miscdevice結構的定義kni_misc,其沒有明確的指定kni裝置的次裝置號,使用巨集定義misc_dynamic_minor,表示由系統自動分配。misc型別裝置的主裝置號固定為10(巨集misc_major)。

#define kni_device "kni"

static struct miscdevice kni_misc = ;

static int __init kni_init(void)

如下misc裝置註冊函式misc_register所示,其在全域性的misc_minors點陣圖中查詢乙個未使用的值為0的位元位,有一點要注意的是,最終找到的位所在位圖中的位置要小於64(dynamic_minors),即動態分配的misc裝置的次裝置號滿足小於64的條件。次裝置號等於(dynamic_minors - i - 1),表明動態分配的次裝置號有最大值開始,所以第乙個分配出去的動態次裝置號為63。

#define dynamic_minors 64 /* like dynamic majors */

static declare_bitmap(misc_minors, dynamic_minors);

int misc_register(struct miscdevice * misc)

misc->minor = dynamic_minors - i - 1;

set_bit(i, misc_minors);

如下為ubuntu系統的/dev目錄,最大的動態次裝置號63被裝置vga_arbiter使用。

$ ls -l /dev | awk /10,/

crw------- 1 root root 10, 56 may 19 18:35 cpu_dma_latency

crw------- 1 root root 10, 58 may 19 18:35 tgt

crw------- 1 root root 10, 63 may 19 18:35 vga_arbiter

crw------- 1 root root 10, 55 may 19 18:35 network_latency

crw------- 1 root root 10, 54 may 19 18:35 network_throughput

或者通過proc系統檔案misc的內容檢視,次裝置號為57的kni裝置,沒有出現在/dev目錄下。

/ # cat /proc/misc

54 network_throughput

55 network_latency

56 cpu_dma_latency

57 kni

58 tgt

63 vga_arbiter

/ #

在dpdk-19.02/lib/librte_kni目錄下的檔案rte_kni.c中, kni模組初始化函式中需要開啟/dev/kni裝置,並且所以使用kni功能的地方都需要訪問此裝置。

int rte_kni_init(unsigned int max_kni_ifaces __rte_unused)

}

return 0;

}

通常情況下,系統的udev服務程式,例如ubuntu中的systemd-udevd,會自動建立此裝置節點。  

但是,如本系統所示情況,就需要通過手動方式建立此裝置節點:

$ 

$ sudo mknod kni c 10 57

$

或者通過重新掛載裝置檔案系統,或可解決此問題,沒有測試。

$ mount -t devtmpfs devtmpfs /dev
end

OVS中DPDK虛擬裝置

dpdk為物理和虛擬裝置提供驅動程式。物理dpdk裝置通過在 dpdk devargs 引數中指定有效的pci位址,新增到ovs中。沒有pci位址的虛擬dpdk裝置也使用 dpdk devargs 命名引數,但是格式有所不同。重要 注意 並非所有的dpdk虛擬pmd驅動程式都已經過測試和驗證。要新增...

DPDK裝置驅動的匹配和初始化

前言 dpdk使用了uio 使用者空間i o 的機制,跳過核心態的網絡卡驅動,轉而使用使用者態的收發包驅動,從驅動到記憶體和資料報,繼而到資料報的處理,這是乙個完整的收發包流程。這篇主要介紹裝置驅動的初始化,和收發包的處理。所選 以dpdk 17.02版本為依據。資料報的驅動初始化是在rte eal...

建立裸裝置

1 fdisk l檢視一下各個分割槽 2 df lh檢視一下各區的使用情況 3 fdisk dev sda 1.n new 2.n3.w write 4 raw dev raw raw1 dev sda8 raw dev raw raw2 dev sda9 5 vi etc sysconfig ra...