〇  需求

在DPDK程序运行时,希望能够实时的操纵PCI 网卡设备的驱动绑定与解绑。

本文的目的是为了调查满足以上需求的,kernel提供的,标准的API都有几种,分别是什么。以确定实施方案。

一  背景

我们已知有三个方法:

  1. dpdk_devbind.py

  2. driverctl   [administrator][driver] driverctl 是如何在udev上层管理设备驱动的

  3. sysfs

    [knowledge][linux][sysfs] sysfs文件系统

    [dpdk] 读官方文档(2)    这里有个bind/unbind章节。

二  分析

分析driverctl的源码

  driverctl 是一个bash脚本,也是用sysfs实现的。原理如下:

# 加载
> echo pci-stub > /sys/bus/pci/devices/::00.0/driver_override
> echo ::00.0 > /sys/bus/pci/devices/::00.0/driver/unbind
> echo ::00.0 > /sys/bus/pci/drivers_probe
>
# 卸载
> echo > /sys/bus/pci/devices/::00.0/preferred_driver
> echo ::00.0 > /sys/bus/pci/devices/::00.0/driver/unbind
> echo ::00.0 > /sys/bus/pci/drivers_probe
>

分析dpdk_devbind.py的源码

  用lspci配合sysfs实现。

  但是在dpdk-devbind中,做个了一个判断,同时支持新旧两种方式。

  新的方式与 driverctl 的实现相同。

  旧的方式与先前我们在sysfs下的做法一样,用new_id来操作, 如下:

[root@T9 usertools]# echo ::04.0 > /sys/bus/pci/drivers/igb_uio/unbind
[root@T9 usertools]# echo "1af4 1000" > /sys/bus/pci/drivers/virtio-pci/new_id

[root@T9 usertools]# echo "0000:00:04.0" > /sys/bus/pci/drivers/virtio-pci/bind

  根据dpdk-devbind中的注释和邮件列表的patch邮件信息: 新的driver_override方式是kernel version >= 3.15才支持。但是实际调试过程中,我当前在redhat kernel version 3.10的环境里,便已经支持了新的方式了。

  patch: https://patches.linaro.org/patch/27588/

三 结论

1.    以上三种方式是同一套接口,都是通过文件系统对sysfs进行读写操作来实现的。

2.    具体的sysfs操作方法有前文提到的两种。 推荐较新的一种,即通过driver_override.

  https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-platform

最新文章

  1. 海淘手表Invicta8926OB到手~晒图
  2. 使用C#反射中的MakeGenericType函数,来为泛型方法和泛型类指定(泛型的)类型
  3. ActiveMQ Exception: java.io.EOFException: Chunk stream does not exist
  4. 快速排序算法(Java)
  5. Interpreter
  6. CentOS 6.8编译安装httpd2.2.31+MySQL5.6.31+PHP5.3.27
  7. clearInterval()与setInterval()的应用
  8. /-- Encapsulated exception ------------\ java.lang.NoSuchMethodException: com.sjzdaj.po.Class.setN_id([Ljava.lang.String;)
  9. voa 2015 / 4 / 14
  10. dotnet core 2.0在ubuntu下安装失败
  11. HDU1175 连连看(DFS)
  12. PE文件详解(四)
  13. Switch 语句
  14. debugfs
  15. CSAPP:第六章 存储器层次结构
  16. GDAL获取投影坐标系注意问题
  17. NPOI DataTable导出excel
  18. Luogu P2312 解方程
  19. 《将博客搬至51CTO》
  20. ED3 flash 、OBP flash

热门文章

  1. 2017年PHP程序员未来路在何方
  2. 【原创 深度学习与TensorFlow 动手实践系列 - 2】第二课:传统神经网络
  3. redis跳跃表
  4. ssh连接服务器失败解决记录
  5. 一分钟内搭建全web的API接口神器json-server详解
  6. SpringMvc支持跨域访问,Spring跨域访问,SpringMvc @CrossOrigin 跨域[转]
  7. javaEE中config.properties文件乱码解决办法
  8. [微信小程序] 微信小程序开发初步探索
  9. VMware ESXI添加第三方网卡驱动
  10. Ubuntu16.04首次root登录设置