[administrator][driver] driverctl 是如何在udev上层管理设备驱动的
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开机自动加载到正确的网卡上
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上层管理设备驱动的的更多相关文章
- linux设备驱动归纳总结(十):1.udev&misc【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-111839.html linux设备驱动归纳总结(十):1.udev&misc xxxxxxx ...
- linux driver ------ 字符设备驱动 之 “ 创建设备节点流程 ”
在字符设备驱动开发的入门教程中,最常见的就是用device_create()函数来创建设备节点了,但是在之后阅读内核源码的过程中却很少见device_create()的踪影了,取而代之的是device ...
- [中英对照]Device Drivers in User Space: A Case for Network Device Driver | 用户态设备驱动: 以网卡驱动为例
前文初步介绍了Linux用户态设备驱动,本文将介绍一个典型的案例.Again, 如对Linux用户态设备驱动程序开发感兴趣,请阅读本文,否则请飘过. Device Drivers in User Sp ...
- 160803、如何在ES6中管理类的私有数据
如何在ES6中管理类的私有数据?本文为你介绍四种方法: 在类的构造函数作用域中处理私有数据成员 遵照命名约定(例如前置下划线)标记私有属性 将私有数据保存在WeakMap中 使用Symbol作为私有属 ...
- 【Linux开发】linux设备驱动归纳总结(十):1.udev&misc
linux设备驱动归纳总结(十):1.udev&misc xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- Electron-vue实战(三)— 如何在Vuex中管理Mock数据
Electron-vue实战(三)— 如何在Vuex中管理Mock数据 作者:狐狸家的鱼 本文链接:Vuex管理Mock数据 GitHub:sueRimn 在vuex中管理mock数据 关于vuex的 ...
- 设备驱动基础学习--platform driver简单实现
platform是一条虚拟的总线.设备用platform_device表示,驱动用platform_driver进行注册,Linux platform driver机制和传统的device drive ...
- linux设备驱动----利用mdev(udev)自动创建设备文件节点
1.mdev的使用方法和原理: mdev是busybox 自带的一个简化版的udev,适合于嵌入式的应用埸合.其具有使用简单的特点.它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程 ...
- 【转】如何在ubuntu12.04设置adb驱动
原文网址:http://www.xuebuyuan.com/1475698.html 在ubuntu上adb驱动不用像在windows上一样需要额外装,只需要写一个配置文件就可以,下面是设置的步骤: ...
随机推荐
- Python中的zip()与*zip()函数详解
前言 实验环境: Python 3.6: 示例代码地址:下载示例: 本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables)函数详解 ...
- Zookeeper之Zookeeper底层客户端架构实现原理(转载)
Zookeeper的Client直接与用户打交道,是我们使用Zookeeper的interface.了解ZK Client的结构和工作原理有利于我们合理的使用ZK,并能在使用中更早的发现问题.本文将在 ...
- c++命名空间---namespace
C++ 命名空间 C++ 应用程序中.例如,您可能会写一个名为 func() 的函数,在另一个可用的库中也存在一个相同的函数 func().这样,编译器就无法判断您所使用的是哪一个 func() 函数 ...
- PHP更改自动加载的顺序
composer的锅 自从PHPer们用上了composer后,对于传统的加载方式倒是不会用了,可谓是"收之东隅,失之桑榆". 下面说一下怎么改变加载顺序来覆写Laravel中的h ...
- 【iCore1S 双核心板_FPGA】例程三:计数器实验——计数器的使用
实验现象: 程序下载成功后,程序中的计数器开始计数,每次计满后,计数器清零,三色LED中红色LED的状态反转.可以看到,红色LED以一定的时间间隔闪烁. 核心源代码: //-------------- ...
- Java知多少(50)Java throws子句
如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常.做到这点你可以在方法声明中包含一个throws子句.一个 throws 子句列举了一个方法可能抛 ...
- R语言使用RMySQL连接及读写Mysql数据库
简单说下安装过程,一般不会有问题,重点是RMySQL的使用方式. 系统环境说明 Redhat系统:Linux 460-42.6.32-431.29.2.el6.x86_64 系统编码:LANG=zh_ ...
- Tip 18 – How to decide on a lifetime for your ObjectContext
Alex D James 7 May 2009 3:44 PM One of the most common questions we get is how long should an Object ...
- Android编译环境——ubuntu12.04上android2.3.4编译错误以及解决
Android编译环境——ubuntu12.04上android2.3.4编译错误以及解决 分类: android应用开发2013-08-21 09:20 4222人阅读 评论(3) 收藏 举报 li ...
- yum安装VirtualBox
参考官方文档: https://www.virtualbox.org/wiki/Linux_Downloads 配置yum源: vim /etc/yum.repos.d/virtualbox.repo ...