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...