Linux驱动手动绑定和解绑定
Linux内核从2.6.13-rc3开始,提供了在用户空间,可动态的绑定和解绑定设备和设备驱动之间关系的功能。在这之前,只能通过insmod(modprobe)和rmmod来绑定和解绑,而且这种绑定和解绑都是针对驱动和所有设备的。而新的功能可以设置驱动和单个设备之间的联系。
这里,我们以pci总线的nvme ssd为例,首先执行lspci显示所有的nvme ssd。
# lspci | grep memory
01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a802 (rev 01)
09:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a802 (rev 01)
有如上这么多nvme ssd,那么我们就可以在/dev下看到多个nvme设备(OS启动后默认加载nvme驱动)。
# ls /dev/nvme*
/dev/nvme0 /dev/nvme0n1p2 /dev/nvme0n1 /dev/nvme0n1p3 /dev/nvme0n1p1 /dev/nvme1 /dev/nvme1n1
同时,对于所有的nvme设备(这里我们以pci总线bdf号为09:00.0的ssd为例),都可以在nvme驱动下看到。其中,bind和unbind文件就是涉及到绑定和解绑的关键文件。
/sys/bus/pci/drivers/nvme# ll
total 0
drwxr-xr-x 2 root root 0 Jan 4 17:10 ./
drwxr-xr-x 30 root root 0 Jan 4 17:10 ../
lrwxrwxrwx 1 root root 0 Jan 4 20:49 0000:01:00.0 -> ../../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/
lrwxrwxrwx 1 root root 0 Jan 4 20:49 0000:09:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:05:00.0/0000:06:0a.0/0000:07:00.0/0000:08:01.0/0000:09:00.0/
--w------- 1 root root 4096 Jan 4 20:46 bind
lrwxrwxrwx 1 root root 0 Jan 4 20:49 module -> ../../../../module/nvme/
--w------- 1 root root 4096 Jan 4 20:49 new_id
--w------- 1 root root 4096 Jan 4 20:49 remove_id
--w------- 1 root root 4096 Jan 4 17:10 uevent
--w------- 1 root root 4096 Jan 4 17:10 unbind
解绑一个nvme设备,只需将设备的pci总线bdf号写入/sys/bus/pci/drivers/nvme(不同的设备驱动不同)/unbind即可:
/sys/bus/pci/drivers/nvme# echo -n "0000:09:00.0" > unbind
解除绑定成功,再查看目录下文件,该驱动下不再有对应的设备。同时,/dev下也没有对应的nvme设备了。
/sys/bus/pci/drivers/nvme# ll
total 0
drwxr-xr-x 2 root root 0 Jan 4 20:51 ./
drwxr-xr-x 30 root root 0 Jan 4 20:49 ../
lrwxrwxrwx 1 root root 0 Jan 4 20:49 0000:01:00.0 -> ../../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/
--w------- 1 root root 4096 Jan 4 20:46 bind
lrwxrwxrwx 1 root root 0 Jan 4 20:49 module -> ../../../../module/nvme/
--w------- 1 root root 4096 Jan 4 20:49 new_id
--w------- 1 root root 4096 Jan 4 20:49 remove_id
--w------- 1 root root 4096 Jan 4 20:49 uevent
--w------- 1 root root 4096 Jan 4 20:51 unbind
绑定一个nvme设备,和解绑类似,将设备的pci总线bdf号写入/sys/bus/pci/drivers/nvme(不同的设备驱动不同)/bind:
/sys/bus/pci/drivers/nvme# echo -n "0000:09:00.0" > bind
绑定成功,再次展示该目录下所有文件,可以发现对应设备再次出现。
/sys/bus/pci/drivers/nvme# ll
total 0
/sys/bus/pci/drivers/nvme# ll
total 0
drwxr-xr-x 2 root root 0 Jan 5 09:13 ./
drwxr-xr-x 30 root root 0 Jan 4 20:49 ../
lrwxrwxrwx 1 root root 0 Jan 4 20:49 0000:01:00.0 -> ../../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/
lrwxrwxrwx 1 root root 0 Jan 5 09:13 0000:09:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:05:00.0/0000:06:0a.0/0000:07:00.0/0000:08:01.0/0000:09:00.0/
--w------- 1 root root 4096 Jan 5 09:13 bind
lrwxrwxrwx 1 root root 0 Jan 4 20:49 module -> ../../../../module/nvme/
--w------- 1 root root 4096 Jan 4 20:49 new_id
--w------- 1 root root 4096 Jan 4 20:49 remove_id
--w------- 1 root root 4096 Jan 4 20:49 uevent
--w------- 1 root root 4096 Jan 4 20:51 unbind
Linux驱动手动绑定和解绑定的更多相关文章
- Linux驱动手动绑定和解绑定方法
linux内核从2.6.13-rc3开始,提供了在用户空间,可动态的绑定和解绑定设备和设备驱动之间关系的功能.在这之前,只能通过insmod(modprobe)和rmmod来绑定和解绑,而且这种绑定和 ...
- Linux中实现多网卡绑定总结
在Linux中实现多网卡绑定 一.原理介绍: 1.什么是bonding? Linux bonding 驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用.用于网络负载均衡及网络冗余: Li ...
- python全栈开发day49-jquery的位置信息、事件流、事件对象,事件委托,事件绑定和解绑
一.昨日内容回顾 1. jQuery的属性操作 1) html属性操作:attr 2) DOM属性操作:prop 3) 类样式操作:addClass.removeClass.toggleClas ...
- DPDK 网卡绑定和解绑
参考: DPDK网卡绑定和解绑 DPDK的安装与绑定网卡 DPDK 网卡绑定和解绑 注意: 建议不要使用本文的eth0网卡绑定dpdk驱动. 1.进入DPDK目录: $ cd dpdk/tools/ ...
- 原生js绑定和解绑事件,兼容IE,FF,chrome
主要是最近项目中用到了原生的js 解绑和绑定 事件 然后今天研究了一下,其实问题不大,不过要注意不要把单词写错了,今天我就找了好久单词写错了. 需求:当鼠标移上去以后,给Select加载元素,接着解 ...
- 11-jQuery的事件绑定和解绑
1.绑定事件 语法: bind(type,data,fn) 描述:为每一个匹配元素的特定事件(像click)绑定一个事件处理器函数. 参数解释: type (String) : 事件类型 data ( ...
- 前端 -----jQuery的事件绑定和解绑
11-jQuery的事件绑定和解绑 1.绑定事件 语法: bind(type,data,fn) 描述:为每一个匹配元素的特定事件(像click)绑定一个事件处理器函数. 参数解释: type (S ...
- python 全栈开发,Day55(jQuery的位置信息,JS的事件流的概念(重点),事件对象,jQuery的事件绑定和解绑,事件委托(事件代理))
一.jQuery的位置信息 jQuery的位置信息跟JS的client系列.offset系列.scroll系列封装好的一些简便api. 一.宽度和高度 获取宽度 .width() 描述:为匹配的元素集 ...
- jQuery绑定和解绑点击事件及重复绑定解决办法
原文地址:http://www.111cn.net/wy/jquery/47597.htm 绑点击事件这个是jquery一个常用的功能,如click,unbind等等这些事件绑定事情,但还有很多朋友不 ...
随机推荐
- UVALive 3177 Beijing Guards
题目大意:给定一个环,每个人要得到Needi种物品,相邻的人之间不能得到相同的,问至少需要几种. 首先把n=1特判掉. 然后在n为偶数的时候,答案就是max(Needi+Needi+1)(包括(1,n ...
- 如何在yarn上运行Hello World(二)
在之前的一篇文章我们介绍了如何编写在yarn集群提交运行应用的AM的yarnClient端,现在我们来继续介绍如何编写在yarn集群控制应用app运行的核心模块 ApplicationMaster ...
- tp3.2 事务处理
事务的机制通常被概括为“ACID”原则即原子性(A).稳定性(C).隔离性(I)和持久性(D). 原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行. 稳定性:数据库在事 ...
- Yum database disk image is malformed
使用 yum update 时使用Ctrl+C 后,再用yum 安装其他软件的时候收到:Yum database disk image is malformedyum clean dbcache 清除 ...
- 关于a标签颜色的探索
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Tomcat安装和目录简介
要知道动态的网页必须要有服务器的支撑! 1.知名的java web服务器 Tomcat:Apache组织发布,免费开源的,轻量级 JBoss.WebLogic是商用的,价格较高,但相对于开源的更加稳定 ...
- CentOS下 elasticsearch集群安装
1.进入root目录并下载elasticsearch cd /root wget https://download.elastic.co/elasticsearch/elasticsearch/ela ...
- MySQL如何找到表与表之间的关系?
如何找到两张表之间的关系? 先站在左表的角度上去找,如果可以找到左表的多个字段可以对应右表的一个字段,那么左表的一个字段foregin key右表的一个字段.一般情况下为id... 2.如果右表的多个 ...
- Centos7上安装使用locate
centos7上默认没有locate命令,需先安装locate yum install mlocate 注意是mlocate,如果是yum install locate系统会提示没有安装包 安装完成后 ...
- Hibernate学习笔记(5)---Query接口
Hibernate中具有三种检索方式(HQL,QBC,SQL) Query接口 一个查询接口,用于向数据库中查询对象.并控制执行查询的过程.Query接口内封装了一个HQL查询语句. 举个栗子 //查 ...