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. vue项目使用webpack loader把px转换为rem

    下载lib-flexible https://github.com/amfe/lib-flexible npm i lib-flexible --save 在main.js中引入lib-flexibl ...

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

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

  3. 【转】Android开发教程 --- Android调用WS

    原文地址:http://www.cnblogs.com/jasoncc/archive/2011/12/23/2297950.html Hi,大家好! 上节我们搭建了Java版的WS,那么在Andro ...

  4. windows下svn钩子实现每次提交更新至web目录

    目的 找 到SVN Server中的仓库(Repositories)文件夹的位置,在相应的项目文件夹中找到hooks文件夹.在该文件夹中添加一个post- commit文件:当有commit动作发生时 ...

  5. tcp 三次握手 转

    转载 记得刚毕业找工作面试的时候,经常会被问到:你知道“3次握手,4次挥手”吗?这时候我会“胸有成竹”地“背诵”前期准备好的“答案”,第一次怎么怎么,第二次……答完就没有下文了,面试官貌似也没有深入下 ...

  6. nginx负载均衡二:配置

    配置方法一(可用): upstream tomcatserver1 { server ; server 192.168.70.172; server 192.168.70.173 down; serv ...

  7. last

    last reboot 显示系统最后重启的历史记录 last -w 显示自系统启动以来,所有登录的用户(全名)

  8. 设计模式-行为型模式,python访问者模式

    访问者模式 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式. ...

  9. 5. RAMN备份与恢复

    一. rman简介 RMAN(Recovery Manager)是一种用于备份(backup).还原(restore)和恢复(recover)数据库的 Oracle 工具.RMAN只能用于ORACLE ...

  10. 安装redis出现cc adlist.o /bin/sh:1:cc:not found的解决方法

    安装redis时 提示执行make命令时提示 CC adlist.o /bin/sh: cc: 未找到命令   问题原因:这是由于系统没有安装gcc环境,因此在进行编译时才会出现上面提示,当安装好gc ...