我们在设备中,可能会出现如下情况,需要unbind 设备原来的驱动,然后再给设备bind的一个新的驱动,下面记录操作方式。
找到设备的sysfs路径
[root]ls /sys/bus/pci/devices/ # 对于PCI设备
[root]ls /sys/bus/usb/devices/ # 对于usb设备
[root]ls /sys/bus/platform/devices/ #对于平台设备
PCI设备驱动卸载
lspci
03:00.0 Class 0200: 10ec:8125 //卸载
00:01.0 Class 0604: 17cd:dc08
00:04.0 Class 0604: 17cd:dc08
00:00.0 Class 0604: 17cd:dc16
06:00.0 Class 0c03: 1912:0014
00:03.0 Class 0604: 17cd:dc16
00:02.0 Class 0604: 17cd:dc01
00:05.0 Class 0604: 17cd:dc01
查看当前驱动
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#ls
lrwxrwxrwx 1 root root 0 May 16 02:30 0000:03:00.0 -> ../../../../devices/platform/soc/40000000.pcie/pci0000:00/0000:00:02.0/0000:03:00.0
--w------- 1 root root 4096 May 16 02:30 bind
lrwxrwxrwx 1 root root 0 May 16 02:30 module -> ../../../../module/cardDrvKernelRtl
--w------- 1 root root 4096 May 16 02:30 new_id
--w------- 1 root root 4096 May 16 02:30 remove_id
--w------- 1 root root 4096 May 16 02:30 uevent
--w------- 1 root root 4096 May 16 02:30 unbind
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#cd ../
[root@MPU /sys/devices/platform/soc/40000000.pcie/pci0000:00/0000:00:02.0/0000:03:00.0]#ls
-r--r--r-- 1 root root 4096 May 16 02:29 ari_enabled
-rw-r--r-- 1 root root 4096 May 16 02:29 broken_parity_status
-r--r--r-- 1 root root 4096 May 16 02:29 class
-rw-r--r-- 1 root root 4096 May 16 02:29 config
-r--r--r-- 1 root root 4096 May 16 02:29 consistent_dma_mask_bits
-r--r--r-- 1 root root 4096 May 16 02:29 current_link_speed
-r--r--r-- 1 root root 4096 May 16 02:29 current_link_width
-r--r--r-- 1 root root 4096 May 16 02:29 device
-r--r--r-- 1 root root 4096 May 16 02:29 devspec
-r--r--r-- 1 root root 4096 May 16 02:29 dma_mask_bits
lrwxrwxrwx 1 root root 0 May 16 02:29 driver -> ../../../../../../../bus/pci/drivers/rtl-dc-drv
-rw-r--r-- 1 root root 4096 May 16 02:29 driver_override
-rw-r--r-- 1 root root 4096 May 16 02:29 enable
-r--r--r-- 1 root root 4096 May 16 02:29 irq
-r--r--r-- 1 root root 4096 May 16 02:29 local_cpulist
-r--r--r-- 1 root root 4096 May 16 02:29 local_cpus
-r--r--r-- 1 root root 4096 May 16 02:29 max_link_speed
-r--r--r-- 1 root root 4096 May 16 02:29 max_link_width
-r--r--r-- 1 root root 4096 May 16 02:29 modalias
-rw-r--r-- 1 root root 4096 May 16 02:29 msi_bus
-rw-r--r-- 1 root root 4096 May 16 02:29 numa_node
--w--w---- 1 root root 4096 May 16 02:29 remove
--w--w---- 1 root root 4096 May 16 02:29 rescan
--w------- 1 root root 4096 May 16 02:29 reset
-r--r--r-- 1 root root 4096 May 16 02:29 resource
-rw------- 1 root root 256 May 16 02:29 resource0
-rw------- 1 root root 65536 May 16 02:19 resource2
-rw------- 1 root root 16384 May 16 02:29 resource4
-r--r--r-- 1 root root 4096 May 16 02:29 revision
lrwxrwxrwx 1 root root 0 May 16 02:29 subsystem -> ../../../../../../../bus/pci
-r--r--r-- 1 root root 4096 May 16 02:29 subsystem_device
-r--r--r-- 1 root root 4096 May 16 02:29 subsystem_vendor
-rw-r--r-- 1 root root 4096 May 16 02:27 uevent
-r--r--r-- 1 root root 4096 May 16 02:29 vendor
[root@MPU /sys/devices/platform/soc/40000000.pcie/pci0000:00/0000:00:02.0/0000:03:00.0]#cd driver/
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#pwd
/sys/bus/pci/devices/0000:03:00.0/driver
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#
当前驱动名字为 rtl-dc-drv
卸载驱动
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#ls
lrwxrwxrwx 1 root root 0 May 16 02:30 0000:03:00.0 -> ../../../../devices/platform/soc/40000000.pcie/pci0000:00/0000:00:02.0/0000:03:00.0
--w------- 1 root root 4096 May 16 02:30 bind
lrwxrwxrwx 1 root root 0 May 16 02:30 module -> ../../../../module/cardDrvKernelRtl
--w------- 1 root root 4096 May 16 02:30 new_id
--w------- 1 root root 4096 May 16 02:30 remove_id
--w------- 1 root root 4096 May 16 02:30 uevent
--w------- 1 root root 4096 May 16 02:30 unbind
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#
echo "0000:03:00.0" > /sys/bus/pci/drivers/驱动名称/unbind
echo "0000:03:00.0" >/sys/bus/pci/drivers/rtl-dc-drv/unbind
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#echo "0000:03:00.0" >/sys/bus/pci/dri
vers/rtl-dc-drv/unbind
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#ls
--w------- 1 root root 4096 May 16 02:30 bind
lrwxrwxrwx 1 root root 0 May 16 02:30 module -> ../../../../module/cardDrvKernelRtl
--w------- 1 root root 4096 May 16 02:30 new_id
--w------- 1 root root 4096 May 16 02:30 remove_id
--w------- 1 root root 4096 May 16 02:30 uevent
--w------- 1 root root 4096 May 16 02:51 unbind
[root@MPU /sys/bus/pci/drivers/rtl-dc-drv]#
重新绑定
echo "0000:03:00.0" >/sys/bus/pci/drivers/rtl-dc-drv/bind
平台设备
操作流程
[root@LPU /sys/bus/platform/drivers/stmmaceth]#echo 2820c000.eth >unbind
[ 2407.875477][ 0] stmmaceth 2820c000.eth eth0: stmmac_dvr_remove: removing driver
Jan 1 1970 00:40:07 %IPU-MSG-3:ipu_sub_chan_rx_thread 297, chan 0, proto 0620, Network is down
Jan 1 1970 00:40:07 %IPU-MSG-3:ipu_sub_chan_rx_thread 297, chan 0, proto 0621, Network is down
[root@LPU /sys/bus/platform/drivers/stmmaceth]#
[root@LPU /sys/bus/platform/drivers/stmmaceth]#dmesg
[ 28.484663][ 0] igb_uio 0000:01:00.0: uio device registered with irq 29
[ 29.168287][ 0] igb_uio 0000:01:00.1: uio device registered with irq 30
[ 30.418937][ 0] Generic PHY stmmac-0:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=stmmac-0:00, irq=POLL)
[ 30.439589][ 0] dwmac1000: Master AXI performs fixed burst length
[ 30.445868][ 0] stmmaceth 2820c000.eth eth0: No Safety Features support found
[ 30.453258][ 0] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 30.578792][ 0] Generic PHY stmmac-1:00: attached PHY driver [Generic PHY] (mii_bus:phy_addr=stmmac-1:00, irq=POLL)
[ 30.598581][ 0] dwmac1000: Master AXI performs fixed burst length
[ 30.604765][ 0] stmmaceth 28210000.eth eth1: No Safety Features support found
[ 30.612118][ 0] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[ 2407.875477][ 0] stmmaceth 2820c000.eth eth0: stmmac_dvr_remove: removing driver
[root@LPU /sys/bus/platform/drivers/stmmaceth]#
[root@LPU /sys/bus/platform/drivers/stmmaceth]#
[root@LPU /sys/bus/platform/drivers/stmmaceth]#echo 2820c000.eth >bind
[ 2428.523550][ 0] stmmaceth 2820c000.eth: PTP uses main clock
[ 2428.529261][ 0] stmmaceth 2820c000.eth: no reset control found
[ 2428.551614][ 0] stmmaceth 2820c000.eth: User ID: 0x10, Synopsys ID: 0x36
[ 2428.558411][ 0] stmmaceth 2820c000.eth: DWMAC1000
[ 2428.563282][ 0] stmmaceth 2820c000.eth: DMA HW capability register supported
[ 2428.577601][ 0] stmmaceth 2820c000.eth: RX Checksum Offload Engine supported
[ 2428.593601][ 0] stmmaceth 2820c000.eth: COE Type 2
[ 2428.601601][ 0] stmmaceth 2820c000.eth: TX Checksum insertion supported
[ 2428.617417][ 0] stmmaceth 2820c000.eth: Normal descriptors
[ 2428.626600][ 0] stmmaceth 2820c000.eth: Ring mode enabled
[ 2428.638601][ 0] stmmaceth 2820c000.eth: Enable RX Mitigation via HW Watchdog Timer
[ 2428.672218][ 0] libphy: stmmac: probed
[ 2428.676052][ 0] YT8531S Ethernet stmmac-0:00: attached PHY driver [YT8531S Ethernet] (mii_bus:phy_addr=stmmac-0:00, irq=POLL)
[ 2428.691601][ 0] YT8531S Ethernet stmmac-0:01: attached PHY driver [YT8531S Ethernet] (mii_bus:phy_addr=stmmac-0:01, irq=POLL)
[root@LPU /sys/bus/platform/drivers/stmmaceth]#
[root@LPU /sys/bus/platform/drivers/stmmaceth]#