[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上一样需要额外装,只需要写一个配置文件就可以,下面是设置的步骤: ...
随机推荐
- (5) 电商场景下的常见业务SQL处理
1. 如何对评论进行分页展示 一般情况下都是这样写 SELECT customer_id,title,content FROM product_comment WHERE audit_status = ...
- 常见Python爬虫工具总结
常见Python爬虫工具总结 前言 以前写爬虫都是用requests包,虽然很好用,不过还是要封装一些header啊什么的,也没有用过无头浏览器,今天偶然接触了一下. 原因是在处理一个错误的时候,用到 ...
- android设置字符串到剪贴板
android2.1之后版本 其一:(已运行成功) ClipboardManager clip = (ClipboardManager)getSystemService(Context.CLIPBOA ...
- mySql存储emoji表情报错(mysql incorrect string value)
问题分析 普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战.避免 emoji 表情符号带来的问题 ...
- Json Web Token(JWT)
Json web token (JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(Si ...
- C++ 智能指针四
/* 智能指针enable_shared_from_this模板类使用 */ #include <iostream> #include <string> #include &l ...
- Matlab如何循环读取文件
循环读取图片第一种方法①List =dir('*.jpg'); %如需其它图片格式支持,可以自己[重载dir()]函数,实现查找所有图片文件的功能,%如果图片是其它路径,可以用 ["路径&q ...
- C# Winform 防止MDI子窗体重复打开
可以在MDI主窗体中添加以下方法. //防止打开多个窗体 private bool ShowChildrenForm(string p_ChildrenFormText) { int i; //依次检 ...
- Nuxt.js项目实战
感悟 经过几个周六周日的尝试,终于解决了服务端渲染中的常见问题,当SEO不在是问题的时候,或许才是我们搞前端的真正的春天,其中也遇到了一些小坑,Nuxt.js官方还是很给力的,提issue后很积极的给 ...
- 为你的mail server增加SPF记录
什么是SPF就是Sender Policy Framework.SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案.当你定义了你的domain name的SPF记录之后,接收邮件方会根据你 ...