lsusb에 USB 장치가 표시되지 않을 때 USB 장치를 디지털 방식으로 다시 삽입하는 방법

lsusb에 USB 장치가 표시되지 않을 때 USB 장치를 디지털 방식으로 다시 삽입하는 방법

기기를 절전 모드에서 깨울 때마다 USB 오디오 인터페이스가 더 이상 인식되지 않습니다. 케이블을 뽑았다가 다시 연결하거나 재부팅하면 다시 예상대로 작동합니다. 하지만 하루에도 몇 번씩 이런 일을 하는 것은 짜증나는 일인 것 같습니다.

usbreset장치가 에 표시되지 않으므로 옵션이 아닙니다 lsusb. 시스템이 절전 모드 전에 USB를 비활성화하는 것을 방지하기 위해 커널 매개변수를 추가하려고 시도했지만 어쩐지 GRUB 구성을 업데이트할 수 없습니다. 실행하면 sudo grub-mkconfig -o /boot/grub/grub.cfg다음과 같은 결과가 나타납니다.

[lenny@archlinux ~]$ sudo grub-mkconfig -o /boot/grub/grub.cfg 
[sudo] password for lenny: 
insmod: ERROR: could not load module part_gpt: No such file or directory

UEFI에 절전 모드 중에 USB 포트를 비활성화하는 옵션이 있는지 확인해 보았지만 아무 것도 찾을 수 없었습니다. 저는 Gigabyte B550 Aorus PRO(정확하게 기억한다면 v2)를 사용합니다.

이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

편집: 이것은 내 결과입니다 lsusb.

[meekah@archlinux ~]$ lsusb -t
/:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/10p, 480M
    |__ Port 006: Dev 002, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 001: Dev 004, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 001: Dev 004, If 1, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 003: Dev 006, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 003: Dev 006, If 1, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 003: Dev 006, If 2, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 004: Dev 008, If 0, Class=Audio, Driver=snd-usb-audio, 480M
        |__ Port 004: Dev 008, If 1, Class=Audio, Driver=snd-usb-audio, 480M
        |__ Port 004: Dev 008, If 2, Class=Audio, Driver=snd-usb-audio, 480M
        |__ Port 004: Dev 008, If 3, Class=Application Specific Interface, Driver=[none], 480M
    |__ Port 007: Dev 003, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 010: Dev 005, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 001: Dev 007, If 0, Class=Vendor Specific Class, Driver=xone-dongle, 480M
/:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/4p, 10000M
/:  Bus 003.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/4p, 480M
/:  Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/4p, 10000M
[meekah@archlinux ~]$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 003: ID 048d:5702 Integrated Technology Express, Inc. RGB LED Controller
Bus 001 Device 004: ID 0c45:7016 Microdia USB DEVICE
Bus 001 Device 005: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 006: ID 04d9:a067 Holtek Semiconductor, Inc. USB Gaming Mouse
Bus 001 Device 007: ID 045e:02fe Microsoft Corp. XBOX ACC
Bus 001 Device 008: ID 1397:0507 BEHRINGER International GmbH UMC202HD 192k
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
[meekah@archlinux ~]$ 

보시다시피 내 오디오 인터페이스는 키보드와 마우스와 마찬가지로 버스 1에 있습니다. 그러나 다음 명령을 실행한 후 장치가 다시 정상적으로 열리지 않습니다.

sudo sh -c 'echo 0 > /sys/bus/usb/devices/usb1/bConfigurationValue; sleep 2; echo 0 > /sys/bus/usb/devices/usb1/bConfigurationValue'

절전 시간을 연장해 보았지만 키보드의 LED가 다시 켜졌을 뿐 실제로는 작동하지 않았습니다. 키보드를 다시 연결한 후에도 여전히 작동하지 않습니다. USB 컨트롤러가 다시 제대로 열리지 않는 것 같습니다.

편집 2: Grub을 다시 작동시킬 수 있었습니다. (이 문제가 발생한 사람은 /etc/default/grub의 내용이 /boot/grub/grub.cfg의 내용으로 대체된 것 같습니다. 저는 완전히 그런 것은 아닙니다. 문제는 방금 pacman을 사용하여 grub을 다시 설치하고 Linux 커널 매개변수를 추가했지만 usbcore.autosuspend=-1잠자기 후에도 오디오 인터페이스가 여전히 사라졌습니다.

편집 3: 다시 시작해도 문제가 해결되지 않는 것으로 나타났습니다. 이 문제는 시스템 전원을 끄고 처음부터 완전히 부팅하거나 다시 연결해야만 해결할 수 있습니다.

편집 4: 이제 컴퓨터를 밤새 절전 모드로 설정했으므로 이제 깨어나면 오디오 인터페이스가 올바르게 인식됩니다. 시험해보려고 다시 절전 모드로 설정했다가 몇 초 후에 깨웠더니 오디오 인터페이스가 다시 사라졌습니다.

편집 5: 오늘 밤 잠자리에 든 후 오디오 인터페이스를 인식하지 못했습니다. 이번에는 수동으로 머신을 절전 모드로 설정했는데 지난번에는 자동으로 설정되었는지 잘 모르겠습니다.

답변1

따라서 lsub가 없다는 것은 기본 열거조차 발생하지 않거나 실패한다는 것을 나타냅니다. 여기에는 두 가지 잠재적인 범인이 있습니다.

  1. USB 장치의 펌웨어는 정지, 충돌을 처리하지 못하며 적절한 전원 주기가 필요합니다.
  2. USB 호스트 컨트롤러의 펌웨어는 일시 중지 후 올바르게 다시 열거되지 않습니다.

첫 번째 경우에는 실제로 전원을 차단할 수 있는 USB 허브 포트에 있지 않는 한 플러그를 뽑았다가 다시 연결하는 것 외에는 문제를 해결할 가능성이 별로 없습니다. 2. 사례해결의 부작용

두 번째 경우: USB 장치가 어느 버스에 있는지 알아내야 합니다. 불행하게도 이것은 정적이 아니지만 대부분의 경우 부팅 및 일시 중지 중에(PCIe 하드웨어를 핫 플러깅하더라도) 숫자는 동일하게 유지되므로 lsusb -t실행하는 동안에도 사용할 수 있습니다. 장치는 어느 버스에 있는지 확인하기 위해 계속 실행 중입니다.

sudo sh -c 'echo 0 > /sys/bus/usb/devices/usb{number of the bus}/bConfigurationValue; sleep 2; echo 0 > /sys/bus/usb/devices/usb{number of the bus}/bConfigurationValue'그런 다음 버스 세그먼트를 닫고 2초 후에 다시 열 수 있습니다 . (키보드에서 버스를 끄면 자동으로 다시 켜지기 때문에 명령을 사용하여 이 작업을 수행하는 경향이 있습니다.) 이렇게 하면 USB 버스 세그먼트가 다시 열거됩니다.

답변2

uhubctl명령을 사용하면가능한USB 허브의 특정 포트를 재부팅하는 기능. 이 명령은 배포판의 패키지 관리자에서 사용할 수 있습니다.Github의 소스 코드.

위에 링크된 Github 페이지에는 몇 가지 사용 팁과 FAQ도 포함되어 있으므로 배포판의 패키지 관리자를 사용하여 명령을 설치할 수 있다고 하더라도 읽어보는 것이 좋습니다.

관련 정보