dpdk学习
在学习dpdk的原理,看igb_uio驱动实现过程中,了解到该驱动做了两个工作:
1、 注册pci设备到igb_uio的id_table中,并通过sysfs和内核交互,把pci设备和igb_uio驱动绑定;
2、 让用户态的网卡驱动程序和uio交互;
在学习pci注册到igb_uio的原理时,涉及到pci设备的配置空间,配置空间中有个BAR字段,用来做地址映射的,把pci设备的存储空间映射到内存里。
网卡接收到数据,先放再网卡内的缓存空间(比较小,4k左右,程序无法访问),通过DMA模块,把这部分数据拷贝到内存中,该内存地址就是BAR寄存器中存放的地址。
因为涉及到pci知识,难度很大,先了解pci原理后,具体细节后面再深究,这里记录一下整体框架。
关于pci相关书籍《pci express 体系结构导读》王齐
驱动开发教程及驱动开发用到的函数,了解这些对理解igb_uio实现原理很重要。
参考博文:字符设备驱动结构cdev介绍 - 知乎 (zhihu.com)
参考博文:
讲解pci设备注册到igb_uio中的过程:
1.2 --> DPDK 的网卡绑定、解绑过程解析_dpdk bind-CSDN博客
另外在学习中,了解到驱动和设备关联的方法,这里需要通过sysfs,一种虚拟文件系统,可以用来管理、配置设备
参考博文:proc、sysfs、debugfs、tmpfs、devpfs等文件系统简介 - 骄傲的肉包 - 博客园 (cnblogs.com)
/sys/bus/pci/xxxxx 下设备目录及驱动目录下相关文件作用介绍:
【PCIe】bind、unbind、new_id、remove_id解析 - 知乎 (zhihu.com)