https://gitlab.com/driverctl/driverctl

driverctl 处于 kernel 与 udev做设备与驱动管理的上层.

理解什么叫override是本文的核心内容.  作者为什么该参数起名叫override而不叫driver呢?

@20180828: override 是kernel提供的概念,sysfs下提供的这一功能。而driverctl实际上不过是一个220行左右的bash脚本。详见文后的相关阅读,可以跳转至另一篇内容。

两类用途:

1.  做驱动加载卸载的util.

  1.1  加载override驱动:  (读到本文最后时, 你会理解驱动与override驱动的区别)

driverctl set-override ::04.0 igb_uio

  1.2  卸载override驱动.

driverctl unset-override ::04.0

  1.3  卸载override驱动后,不加载原驱动.

[root@D129 ~]# driverctl --noprobe unset-override ::04.0
[root@D129 ~]# driverctl list-devices |grep
::04.0 (none)

2. 在udev上层做驱动配置的持久化.

持久化内容在这个地方:

[root@D129 ~]# driverctl set-override ::04.0 igb_uio
[root@D129 ~]# ll /etc/driverctl.d/
total
-rw-r--r-- root root Jul : pci-::04.0
[root@D129 ~]# cat /etc/driverctl.d/pci-\:\:04.0
igb_uio

所谓持久化, 就是保证该设备,在启动,插拔之后,都能加载到我们用driverctl设置的驱动.

这个机制实际上是udev调用driverctl来做的. 见下文.

  2.1  不做持久化设置而单独作为util来使用的话, 可以增加--nosave参数.

[root@D129 ~]# driverctl --nosave set-override ::04.0 igb_uio
[root@D129 ~]# driverctl --nosave unset-override ::04.0

当前状态查看指令

[root@D129 ~]# driverctl list-overrides
::04.0 igb_uio
[root@D129 ~]# driverctl list-devices
::00.0 (none)
::01.0 (none)
::01.1 ata_piix
::01.3 piix4_smbus
::02.0 bochs-drm
::03.0 virtio-pci
::04.0 igb_uio [*]
::05.0 virtio-pci
[root@D129 ~]#

配置们:

如果实现持久化?  通过配置, 简单的来说, 就是 udev调用driverctl , driverctl读取配置文件

[root@D129 ~]# cat /usr/lib/udev/rules.d/-driverctl.rules 

ACTION=="add", TEST=="/etc/driverctl.d/$env{SUBSYSTEM}-$kernel", PROGRAM="/usr/sbin/driverctl load-override $kernel"
[root@D129 ~]# cat /etc/driverctl.d/pci-\:\:04.0
igb_uio
[root@D129 ~]#

注:  参数中使用的名称是override,   可以理解为重写驱动的意思, 就是说driverctl管理的是设备的重写驱动, 而不是设备驱动本身. 比如, 如下命令:

[root@D129 ~]# driverctl list-devices |grep
::04.0 virtio-pci
[root@D129 ~]# driverctl unset-override ::04.0
[root@D129 ~]# driverctl list-devices |grep
::04.0 virtio-pci
[root@D129 ~]#

以上命令并没有对设备驱动作出改变,  因为virtio-pci是kernel管理的驱动, 而不是 override的驱动.

请理解, driverctl与kernel/udev的不同层级关系.

还有还有:

1.  很久以前, 一直想要处理的问题, 终于在这个driverctl上找到了答案

[dpdk][kernel][driver] 如何让DPDK的UIO开机自动加载到正确的网卡上

2.  TODO,   kernel和udev给设备找到正确驱动,到底是一个什么机制? 
 
 
----------------------- @ 2018-08-28 -----------------------------------------------------------------
More:
https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-platform

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

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

相关阅读:[dpdk][sysfs][pci] 在dpdk程序中操纵PCI设备

[administrator][driver] driverctl 是如何在udev上层管理设备驱动的的更多相关文章

  1. linux设备驱动归纳总结(十):1.udev&misc【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-111839.html linux设备驱动归纳总结(十):1.udev&misc xxxxxxx ...

  2. linux driver ------ 字符设备驱动 之 “ 创建设备节点流程 ”

    在字符设备驱动开发的入门教程中,最常见的就是用device_create()函数来创建设备节点了,但是在之后阅读内核源码的过程中却很少见device_create()的踪影了,取而代之的是device ...

  3. [中英对照]Device Drivers in User Space: A Case for Network Device Driver | 用户态设备驱动: 以网卡驱动为例

    前文初步介绍了Linux用户态设备驱动,本文将介绍一个典型的案例.Again, 如对Linux用户态设备驱动程序开发感兴趣,请阅读本文,否则请飘过. Device Drivers in User Sp ...

  4. 160803、如何在ES6中管理类的私有数据

    如何在ES6中管理类的私有数据?本文为你介绍四种方法: 在类的构造函数作用域中处理私有数据成员 遵照命名约定(例如前置下划线)标记私有属性 将私有数据保存在WeakMap中 使用Symbol作为私有属 ...

  5. 【Linux开发】linux设备驱动归纳总结(十):1.udev&misc

    linux设备驱动归纳总结(十):1.udev&misc xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  6. Electron-vue实战(三)— 如何在Vuex中管理Mock数据

    Electron-vue实战(三)— 如何在Vuex中管理Mock数据 作者:狐狸家的鱼 本文链接:Vuex管理Mock数据 GitHub:sueRimn 在vuex中管理mock数据 关于vuex的 ...

  7. 设备驱动基础学习--platform driver简单实现

    platform是一条虚拟的总线.设备用platform_device表示,驱动用platform_driver进行注册,Linux platform driver机制和传统的device drive ...

  8. linux设备驱动----利用mdev(udev)自动创建设备文件节点

    1.mdev的使用方法和原理: mdev是busybox 自带的一个简化版的udev,适合于嵌入式的应用埸合.其具有使用简单的特点.它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程 ...

  9. 【转】如何在ubuntu12.04设置adb驱动

    原文网址:http://www.xuebuyuan.com/1475698.html 在ubuntu上adb驱动不用像在windows上一样需要额外装,只需要写一个配置文件就可以,下面是设置的步骤: ...

随机推荐

  1. android 对话框全屏

    对话框风格 <style name="Lam.Dialog.FullScreen" parent="@style/Theme.AppCompat.Dialog&qu ...

  2. 记一次性能优化,限制tcp_timewait数量,快速回收和重用

    前言 这篇文章的主题是记录一次Python程序的性能优化,在优化的过程中遇到的问题,以及如何去解决的.为大家提供一个优化的思路,首先要声明的一点是,我的方式不是唯一的,大家在性能优化之路上遇到的问题都 ...

  3. 搭建redis集群

    官方详细介绍请移步:http://www.redis.cn/topics/cluster-tutorial.html 这里总结性给出搭建步骤: 1. 至少6个节点,三主三从 2. 编译redis源码 ...

  4. [转]JSTL 自定义方法报错Invalid syntax for function signature in TLD.

    Apache Tomcat/6.0.18 ${my:splitApply(apply)} <function> <name>splitApply</name> &l ...

  5. layui.laytpl中js方法书写及调用:去除html标签

    <script type="text/html" id="conTpl">   {{# var delhtml = function(str) { ...

  6. easyui 自定义验证规则 验证用户是否已经存在 远程ajax验证

    easyui远程ajax验证 2014年09月30日 22:29:32 clj198606061111 阅读数:6130 标签: easyui 更多 个人分类: jqueryeasyui 版权声明:本 ...

  7. netbeans rcp中如何编程设置主窗口标题

    http://www.th7.cn/Program/java/201510/606050.shtml ————————————————————————————————————————————————— ...

  8. html 用一个frame刷新另一个frame(同一个Frameset中)

    假设主页面index.html,其中frameset结构如下所示: <html> <head> <meta http-equiv="Content-Type&q ...

  9. Ubuntu 设置NAT共享网络(命令行方法)

    本文介绍如何使用iptables来实现NAT转发,事实上就是将一台机器作为网关(gateway)来使用.我们假设充当网关的机器至少有网卡eth0和eth1,使用eth0表示连接到外网的网卡,使用eth ...

  10. Linux下MySQL5.7.18二进制包安装(无默认配置文件my_default.cnf)

    最新在学习MySQL,纯新手,对Linux了解的也不多,因为是下载的最新版的MySQL(MySQL5.7.18)二进制包,CentOS7.2下测试安装,方便以后折腾.大概步骤如下,安装删除反复折腾了几 ...