Como reiniciar um dispositivo USB sem desconectar o cabo
Dica publicada em Linux / Kernel
Como reiniciar um dispositivo USB sem desconectar o cabo
Em algum momento essa dica pode ser útil para você. Por exemplo, recarregar um pendrive que foi desmontado sem precisar desplugar e plugar novamente e por aí vai...
Você irá precisar compilar um pequeno programa em C:
Salve o código acima em um arquivo chamado usbreset.c e compile:
cc usbreset.c -o usbreset
Agora vamos listar os dispositivos USB conectados ao seu PC:
usb-devices | egrep '(Bus|Product)'
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 2
S: Product=EHCI Host Controller
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 6
T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
S: Product=USB PnP Audio Device
T: Bus=01 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=1.5 MxCh= 0
S: Product=USB KEYBOARD
T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=03 Dev#= 5 Spd=1.5 MxCh= 0
S: Product=USB Trackball
T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 4
S: Product=xHCI Host Controller
T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
S: Product=Logitech Webcam C925e
T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 2
S: Product=EHCI Host Controller
T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 8
T: Bus=03 Lev=02 Prnt=02 Port=04 Cnt=01 Dev#= 4 Spd=12 MxCh= 7
S: Product=USB 2.0 Hub [Safe]
T: Bus=03 Lev=03 Prnt=04 Port=00 Cnt=01 Dev#= 7 Spd=12 MxCh= 0
S: Product=Redmi Note 8 Pro
T: Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=5000 MxCh= 4
S: Product=xHCI Host Controller
Para este exemplo vou reiniciar a porta USB do meu celular Redmi Note 8 Pro, que está na Bus 03, Prnt 04:
./usbreset /dev/bus/usb/003/004
DICA: use a tecla TAB para autocompletar o caminho do dispositivo acima.
Até a próxima!
Você irá precisar compilar um pequeno programa em C:
/* usbreset -- send a USB port reset to a USB device */
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>
int main(int argc, char **argv)
{
const char *filename;
int fd;
int rc;
if (argc != 2) {
fprintf(stderr, "Usage: usbreset device-filename\n");
return 1;
}
filename = argv[1];
fd = open(filename, O_WRONLY);
if (fd < 0) {
perror("Error opening output file");
return 1;
}
printf("Resetting USB device %s\n", filename);
rc = ioctl(fd, USBDEVFS_RESET, 0);
if (rc < 0) {
perror("Error in ioctl");
return 1;
}
printf("Reset successful\n");
close(fd);
return 0;
}
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>
int main(int argc, char **argv)
{
const char *filename;
int fd;
int rc;
if (argc != 2) {
fprintf(stderr, "Usage: usbreset device-filename\n");
return 1;
}
filename = argv[1];
fd = open(filename, O_WRONLY);
if (fd < 0) {
perror("Error opening output file");
return 1;
}
printf("Resetting USB device %s\n", filename);
rc = ioctl(fd, USBDEVFS_RESET, 0);
if (rc < 0) {
perror("Error in ioctl");
return 1;
}
printf("Reset successful\n");
close(fd);
return 0;
}
Salve o código acima em um arquivo chamado usbreset.c e compile:
cc usbreset.c -o usbreset
Agora vamos listar os dispositivos USB conectados ao seu PC:
usb-devices | egrep '(Bus|Product)'
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 2
S: Product=EHCI Host Controller
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 6
T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
S: Product=USB PnP Audio Device
T: Bus=01 Lev=02 Prnt=02 Port=02 Cnt=02 Dev#= 4 Spd=1.5 MxCh= 0
S: Product=USB KEYBOARD
T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=03 Dev#= 5 Spd=1.5 MxCh= 0
S: Product=USB Trackball
T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 4
S: Product=xHCI Host Controller
T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
S: Product=Logitech Webcam C925e
T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 2
S: Product=EHCI Host Controller
T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 8
T: Bus=03 Lev=02 Prnt=02 Port=04 Cnt=01 Dev#= 4 Spd=12 MxCh= 7
S: Product=USB 2.0 Hub [Safe]
T: Bus=03 Lev=03 Prnt=04 Port=00 Cnt=01 Dev#= 7 Spd=12 MxCh= 0
S: Product=Redmi Note 8 Pro
T: Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=5000 MxCh= 4
S: Product=xHCI Host Controller
Para este exemplo vou reiniciar a porta USB do meu celular Redmi Note 8 Pro, que está na Bus 03, Prnt 04:
./usbreset /dev/bus/usb/003/004
DICA: use a tecla TAB para autocompletar o caminho do dispositivo acima.
Até a próxima!
Excelente. Vou usar essa dica.
___________________________________
Conhecimento não se Leva para o Túmulo.