[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上一样需要额外装,只需要写一个配置文件就可以,下面是设置的步骤: ...
随机推荐
- elk问题,求教各位大虾!
[filebeat --> kafka --> logstash-->MongoDB|磁盘]架构进行日志收集 但是当logstash写入MongoDB有延迟,然后正常之后,会导致lo ...
- 自定义progressdialog,改善用户体验
自定义progressdialog,改善用户体验
- mysql 核心知识要点
整体知识介绍:mysql基本操作和使用,mysql优化(索引,分表等),mysql部署(读写分离,负载均衡等) 数据库基本介绍:数据库概念,常用数据库,web应用三大软件分工,PHP动态语言特点(处理 ...
- compass Errno::EACCES on line ["897"] of C: Permission denied
具体原因不清楚,应该是与新版的sass有关. 目前的处理方法就是安装原来的版本 gem uninstall compass gem uninstall sass gem install sass –v ...
- hdoj:2037
#include <iostream> using namespace std; struct Time { int start; int end; }; Time times[]; ]; ...
- 一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值
定义一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值,其中,元数据表示操作是否成功与返回值消息等,返回值对应服务端方法所返回的数据. public class Response { pr ...
- Java知多少(25)再谈Java包
在Java中,为了组织代码的方便,可以将功能相似的类放到一个文件夹内,这个文件夹,就叫做包. 包不但可以包含类,还可以包含接口和其他的包. 目录以"\"来表示层级关系,例如 E:\ ...
- C++ 智能指针三
/* 智能指针shared_ptr注意点 */ #include <iostream> #include <string> #include <memory> // ...
- Angular4学习笔记(三)- 路由
路由简介 路由是 Angular 应用程序的核心,它加载与所请求路由相关联的组件,以及获取特定路由的相关数据.这允许我们通过控制不同的路由,获取不同的数据,从而渲染不同的页面. 相关的类 Routes ...
- Spring 3 Java Based Configuration with @Value
Springsource has released the Javaconfig Framework as a core component of Spring 3.0. There is a tre ...