pci内存控制器是什么驱动_dpdk pmd驱动分析

c45a363b2d62ed992e9441c010c324b6.png

缘起dpdk_devbind.py

运行dpdk程序之前我们一般都会使用dpdk_devbind.py程序对指定的驱动与设备进行绑定与解绑(如下命令)。那么dpdk_devbind.py程序是如何实现驱动与设备的绑定与解绑的?底层的原理是什么?

dpdk_devbind.py –bind igb_uio eth0

dpdk_devbind.py程序主要做了以下几件事(转为shell命令):

  1. 为igb_uio驱动添加设备id
echo –n “8086 10f5” > /sys/bus/pci/drivers/igb_uio/new_id

8086为设备厂商号,10f5为设备号。

2. 为设备指定驱动

echo–n“igb_uio”> /sys/bus/pci/devices/0000:02:05.0/driver_override

3. 执行绑定操作,触发驱动probe。

echo –n “0000:02:05.0”>/sys/bus/pci/drivers/igb_uio/bind

4. 执行解绑操作

echo -n“0000:02:05.0”>/sys/bus/pci/drivers/e1000/unbind

“0000:02:05.0”为设备标识(域:总线编号:设备编号:功能号).

1与2只执行一个即可,1是配置驱动,让其支持新的设备。2是配置设备,让其选择驱动。

从以上可知设备驱动的解绑与绑定涉及几个方面:

  1. 驱动:igb_uio, uio, e1000等
  2. sysfs,用于用户态与内核态进行通讯。 (new_id, driver_override, bind, unbind)
  3. 传递的消息:设备ID、设备标识

驱动层动作

sysfs文件系统是一种内存文件系统,它提供了一种方法用于导出内核的数据结构、属性以及两者之间的联系到用户空间。用户空间可以通过修改sysfs中的文件来修改设备的属性值。上诉new_id、driver_override、bind、unbind文件对应igb_uio驱动的各属性值。

接下来我们来看一下dpdk_devbind.py通过 sysfs向驱动发送消息后,驱动层做了什么。

igb_uio模块初始化

如上图所示new_id、driver_override、bind、unbind在橙色框处加入sysfs文件系统。

1a4803fc92350c093efdf12a1cd72677.png
igb_uio模块初始化

驱动注册成功后,除了上诉sysfs文件外,其实已经建立起一整套为用户态提供服务的接口。

PCI设备驱动属性定义

452b4f02503bcebcd260c51c4b108863.png

PCI设备驱动属性的操作

如上所以new_id 对应的驱动处理函数为store_new_id, bind对应的处理函数为driver_bind,unbind对应的处理函数为driver_unbind。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值