Bốn cổng Usb + LAN trên RPi thuộc về 1 usb hub: (1-1)
- LAN + 2 port USB gần cổng Lan thuộc về 1-1.1, trong đó LAN là 1-1.1.1 và 2 port USB lần lượt là 1-1.1.2, 1-1.1.3
- Hai USB còn lại là 1-1.2 và 1.1.3
Có thể enabled/disabled từng cổng USB hay từng nhóm USB bằng câu lệnh
echo [0|1] > /sys/bus/usb/devices/1-1.x/bConfigurationValue
Thí dụ, disabled cả cổng LAN và 2 USB port gần đó bằng câu lệnh
echo 0 > /sys/bus/usb/devices/1-1.1/bConfigurationValue
Việc disabled cổng USB không dùng đến có thể giảm đáng kể việc tiêu thụ điện của RPi hay dành điện cho các thiết bị khác.
root@raspberrypi:~# lsusb -t /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/3p, 480M |__ Port 3: Dev 13, If 0, Class=Mass Storage, Driver=usb-storage, 480M |__ Port 1: Dev 12, If 0, Class=Vendor Specific Class, Driver=lan78xx, 480M |__ Port 2: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 3: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M root@raspberrypi:~# echo 0 > /sys/bus/usb/devices/1-1.1/bConfigurationValue root@raspberrypi:~# lsusb -t /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 2: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 3: Dev 5, If 0, Class=Mass Storage, Driver=usb-storage, 480M
Một cách khác
#ON
echo '1-1.1' > /sys/bus/usb/drivers/usb/bind &> /dev/null
#OFF
echo '1-1.1' > /sys/bus/usb/drivers/usb/unbind &> /dev/null
Một cách khác giúp bật/tắt toàn bộ 4 port USB + LAN, dùng script sau
#!/bin/bash SOC_PATH=/sys/devices/platform/soc SOC_USB=${SOC_PATH}/$(ls $SOC_PATH | grep -Po '^[0-9a-f]+\.usb') BUSPOWER="$SOC_USB/buspower" usb_power_on() { cat $BUSPOWER | grep "Bus Power = 0x1" &> /dev/null } case $1 in on) usb_power_on || echo 0x1 > $BUSPOWER ;; off) usb_power_on && echo 0x0 > $BUSPOWER ;; status) usb_power_on && echo "USB power is on" || echo "USB power is off" ;; *) echo "Usage: $(basename $0) on|off|status" exit 2 ;; esac exit 0
Tuy nhiên, nếu RPi không cấp điện nổi cho HDD/SSD khi khởi động thì chưa chắc giải pháp này giúp khởi động được!
Trên thực tế, các giải pháp disabled hay power off một cổng USB bằng software chỉ giúp tắt hoạt động data trên cổng USB đó nhưng nếu cắm thiết bị có dùng điện vào cổng đó thì điện vẫn cung cấp cho thiết bị như thường.