Linux驱动手动绑定和解绑定
来源:互联网 发布:mvc php路由文件加载 编辑:程序博客网 时间:2024/06/05 23:04
Linux内核从2.6.13-rc3开始,提供了在用户空间,可动态的绑定和解绑定设备和设备驱动之间关系的功能。在这之前,只能通过insmod(modprobe)和rmmod来绑定和解绑,而且这种绑定和解绑都是针对驱动和所有设备的。而新的功能可以设置驱动和单个设备之间的联系。
这里,我们以pci总线的nvme ssd为例,首先执行lspci显示所有的nvme ssd。
# lspci | grep memory01: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# lltotal 0drwxr-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 bindlrwxrwxrwx 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# lltotal 0drwxr-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 bindlrwxrwxrwx 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# lltotal 0/sys/bus/pci/drivers/nvme# lltotal 0drwxr-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 bindlrwxrwxrwx 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
0 0
- Linux驱动手动绑定和解绑定
- Linux驱动手动绑定和解绑定
- Linux驱动学习之手动绑定和解绑定详解
- 设备驱动绑定和解绑
- Linux+oracle10gRAC双网卡绑定和解除绑定
- Linux双网卡绑定和解除绑定的实现
- Juqery事件绑定和解除绑定
- 绑定和解绑hover效果
- DPDK网卡绑定和解绑
- js绑定和解除事件
- 事件的绑定和解除
- 手动绑定Context
- Js C++手动绑定
- linux 设备与驱动的绑定
- Windows 7下arp的绑定和解除绑定
- Windows7下arp的绑定和解除绑定 netsh命令
- jQuery绑定和解绑点击事件及重复绑定解决办法
- Android:Service的绑定和解绑定,Service与Activity通信
- STL-空间配置器(allocator)
- How to make the strings upside down
- linux(ubuntu)编译linux内核提示"mkimage" command not found
- Tomcat的性能与最大并发数
- R语言(转载)之par()函数
- Linux驱动手动绑定和解绑定
- HashMap多线程下发生死循环的原因
- A1106. Lowest Price in Supply Chain (25)
- springboot data rest 4
- 加密ASP为DLL的详细步骤给点RMB不多是个心意尊重脑力劳动者的付出
- c++实现日志系统(含源码)
- Spring 数据访问那些事儿(二)Spring + JdbcTemplate
- java动态代理和cglib动态代理
- 分冶-二分查找