LINUX驱动手动绑定和解绑定

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 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# 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 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# 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 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
时间: 2024-08-11 05:26:50

LINUX驱动手动绑定和解绑定的相关文章

Linux驱动手动绑定和解绑定方法

linux内核从2.6.13-rc3开始,提供了在用户空间,可动态的绑定和解绑定设备和设备驱动之间关系的功能.在这之前,只能通过insmod(modprobe)和rmmod来绑定和解绑,而且这种绑定和解绑都是针对驱动和所有设备的.而新的功能可以设置驱动和单个设备之间的联系. 这里,我们以pci总线的nvme ssd为例,首先执行lspci显示所有的nvme ssd. # lspci | grep memory01:00.0 Non-Volatile memory controller: Sams

原生js绑定和解绑事件,兼容IE,FF,chrome

主要是最近项目中用到了原生的js 解绑和绑定 事件  然后今天研究了一下,其实问题不大,不过要注意不要把单词写错了,今天我就找了好久单词写错了. 需求:当鼠标移上去以后,给Select加载元素,接着解除这个事件.贴上代码,这个是可以运行的,兼容 IE FF chrome 1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu

linux 下手动编译安装无线网卡驱动

//先参照 <本地yum源安装GCC >安装好gcc hp的笔记本上安装了CentOS6.3,没有安装无线网卡驱动,安装这个驱动,在Google上找了好多资料,最后终于解决了这个问题.在这里做点记录,希望也能帮到别人. 我的机子是32位,CentOS的内核版本是2.6.32-279.19.1.el6.i686,下载的无线网卡驱动是hybrid-portsrc_x86_32-v5_100_82_112.tar.gz 下面是具体的步骤 一:确定无线网卡的型号,驱动下载 第一步要确定机子的无线网卡型

Linux 6上使用UDEV绑定共享存储

1.硬盘的查看方式;2.获得硬盘SCSI(Small Computer System Interface)ID;3.绑定共享存储;4.绑定共享存储的脚本; 1.硬盘的查看方式: [[email protected] ~]# ls -ltr /dev/sd* brw-rw----. 1 root disk 8, 48 8月 16 13:34 /dev/sdd brw-rw----. 1 root disk 8, 16 8月 16 13:34 /dev/sdb brw-rw----. 1 root

Linux下监听或绑定(bind)21端口失败

问题:写了一个程序,尝试在21端口监听,结果在执行bind的时候失败了. sockaddr_in sock_addr; sock_addr.sin_family = AF_INET; sock_addr.sin_addr.s_addr = host_inet_addr; sock_addr.sin_port = htons(port);    //port=21 ret = bind( m_socket_fd, (const sockaddr*)&sock_addr, sizeof(sockad

11-jQuery的事件绑定和解绑

1.绑定事件 语法: bind(type,data,fn) 描述:为每一个匹配元素的特定事件(像click)绑定一个事件处理器函数. 参数解释: type (String) : 事件类型 data (Object) : (可选) 作为event.data属性值传递给事件对象的额外数据对象 fn ( Function) : 绑定到每个匹配元素的事件上面的处理函数 示例: 当每个p标签被点击的时候,弹出其文本 $("p").bind("click", function(

jQuery的事件绑定和解绑

1.绑定事件 $('获取的标签对象').bind('要操作的方法,  {操作的内容  是字典的形式},function(){} ') 语法: bind(type,data,fn) 描述:为每一个匹配元素的特定事件(像click)绑定一个事件处理器函数. 参数解释: type (String) : 事件类型 data (Object) : (可选) 作为event.data属性值传递给事件对象的额外数据对象 fn ( Function) : 绑定到每个匹配元素的事件上面的处理函数 示例: 当每个p

WINDOWS下绑定ARP绑定网关

一.WINDOWS下绑定ARP绑定网关步骤一:在能正常上网时,进入MS-DOS窗口,输入命令:arp -a,查看网关的IP对应的正确MAC地址, 并将其记录下来.注意:如果已经不能上网,则先运行一次命令arp -d将arp缓存中的内容删空,计算机可暂时恢复上网(攻击如果不停止的话).一旦能上网就立即将网络断掉(禁用网卡或拔掉网线),再运行arp -a.步骤二:步骤二:如果计算机已经有网关的正确MAC地址,在不能上网只需手工将网关IP和正确的MAC地址绑定,即可确保计算机不再被欺骗攻击.要想手工绑

linux驱动之i2c子系统device注册driver注册简单分析

Linux 驱动设计主要是根据分层分离思想,i2c子系统分为i2cocre.adapter.及device_driver层,其实adapter也是个device,只不过是我们主控芯片的I2C控制接口而已,我们的主控芯片有几个I2C接口就有几个adapter; i2ccore这一层linux已经帮我们实现,主要的工做是类似platform总线的作用,负责drvier及设备的注册,相比platform多了个adapter的注册管理工作,以及i2c的数据发送接收等等算法,说算法有点夸大,其实就是按照i