Нет usb 3 Arch Linux 3.15.1

Нет usb 3 Arch Linux 3.15.1

До последней перезагрузки у меня была возможность использовать порт usb 3. Я только что установил систему, не так давно, поэтому до этого я настраивал и устанавливал драйверы, но это был сеанс, в котором я фактически работал. Я установил драйвер xf86-input-synaptics, но я просто удалил его и снова загрузился, чтобы проверить, не портит ли это все, так как он не вернулся, не вернулся. Теперь я застрял. Я видел на многих форумах, что у людей с ним проблемы, но порт обычно отображается в lsusb, dmesg или lspci.

lsusb:

Bus 002 Device 005: ID 047b:0011 Silitek Corp. SK-1688U Keyboard
Bus 002 Device 004: ID 045e:0040 Microsoft Corp. Wheel Mouse Optical
Bus 002 Device 003: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0bda:0139 Realtek Semiconductor Corp. RTS5139 Card Reader Controller
Bus 001 Device 003: ID 13d3:5134 IMC Networks 
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

lspci | grep -i usb

00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05)
00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05)

dmesg | grep -i usb

[    1.278138] ACPI: bus type USB registered
[    1.278159] usbcore: registered new interface driver usbfs
[    1.278167] usbcore: registered new interface driver hub
[    1.278268] usbcore: registered new device driver usb
[    1.278630] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.278904] ehci-pci 0000:00:1a.0: new USB bus registered, assigned bus number 1
[    1.291224] ehci-pci 0000:00:1a.0: USB 2.0 started, EHCI 1.00
[    1.291408] hub 1-0:1.0: USB hub found
[    1.291716] ehci-pci 0000:00:1d.0: new USB bus registered, assigned bus number 2
[    1.304530] ehci-pci 0000:00:1d.0: USB 2.0 started, EHCI 1.00
[    1.304982] hub 2-0:1.0: USB hub found
[    1.597732] usb 1-1: new high-speed USB device number 2 using ehci-pci
[    1.721971] hub 1-1:1.0: USB hub found
[    1.830738] usb 2-1: new high-speed USB device number 2 using ehci-pci
[    1.955115] hub 2-1:1.0: USB hub found
[    2.037276] usb 1-1.2: new high-speed USB device number 3 using ehci-pci
[    2.240377] usb 1-1.4: new high-speed USB device number 4 using ehci-pci
[    2.390210] usb 2-1.2: new high-speed USB device number 3 using ehci-pci
[    2.476044] hub 2-1.2:1.0: USB hub found
[    2.743395] usb 2-1.2.3: new low-speed USB device number 4 using ehci-pci
[    2.899768] usb 2-1.2.4: new low-speed USB device number 5 using ehci-pci
[    6.531535] scsi6 : SCSI emulation for RTS5139 USB card reader
[    6.531790] usbcore: registered new interface driver rts5139
[    6.632207] uvcvideo: Found UVC 1.00 device USB2.0 UVC 1M WebCam (13d3:5134)
[    6.636268] input: USB2.0 UVC 1M WebCam as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input15
[    6.636452] usbcore: registered new interface driver uvcvideo
[    6.636456] USB Video Class driver (1.1.1)
[    7.114946] usbcore: registered new interface driver usbhid
[    7.114954] usbhid: USB HID core driver
[    7.125179] input: Microsoft Microsoft 3-Button Mouse with IntelliEye(TM) as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2.3/2-1.2.3:1.0/0003:045E:0040.0001/input/input18
[    7.125756    ] hid-generic 0003:045E:0040.0001: input,hidraw0: USB HID v1.10 Mouse [Microsoft Microsoft 3-Button Mouse with IntelliEye(TM)] on usb-0000:00:1d.0-1.2.3/input0
[    7.126179] input: Silitek Standard USB Keyboard  as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2.4/2-1.2.4:1.0/0003:047B:0011.0002/input/input19
[    7.126612] hid-generic 0003:047B:0011.0002: input,hidraw1: USB HID v1.00 Keyboard [Silitek Standard USB Keyboard ] on usb-0000:00:1d.0-1.2.4/input0

lshw - автобус короткого класса

H/W path           Device  Class          Description
=====================================================
/0                         bus            G74Sx
/0/100/1a                  bus            6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2
/0/100/1a/1        usb1    bus            EHCI Host Controller
/0/100/1a/1/1              bus            Integrated Rate Matching Hub
/0/100/1d                  bus            6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1
/0/100/1d/1        usb2    bus            EHCI Host Controller
/0/100/1d/1/1              bus            Integrated Rate Matching Hub
/0/100/1d/1/1/2            bus            USB2.0 Hub
/0/100/1f.3                bus            6 Series/C200 Series Chipset Family SMBus Controller

До сих пор мне просто говорили, что устройство сломано, так как оно не отображается ни на одном из них. Теперь, когда я увидел, как оно работает, я знаю, что это не так, и что это просто проблема конфигурации.

Когда он работал, вывод lsusb включал драйвер fesco (я думаю). Я не вижу fesco нигде при использовании grep.

Компьютер — ноутбук Asus G74sx.

Любая информация будет оценена по достоинству. Спасибо.

Редактировать:
Ладно, не знаю, насколько это поможет, но у меня есть другая машина (на Linux) с рабочим портом usb3. Я начал проверять различия между ними в xhci_hcd и ehci_hcd (на всякий случай) и обнаружил, что в /sys/bus/pci/drivers/ рабочая система имеет папку "xhci_hcd", тогда как нерабочая система ее не имеет. Сначала я подумал: "Эй, может быть, я смогу скопировать ее из одной системы в другую. Даже как root я не могу даже скопировать эти файлы. Так что явно что-то еще в системе идет не так. Не знаю, помогает это или запутывает, но это деталь.

Редактирование 2: Сообщение об ошибке
Проблема, похоже, связана с переводом системы в режим ожидания. Я загружаюсь с live-диска, чтобы можно было быстро стереть любые изменения. Когда я переводю машину в режим ожидания, она обычно выключается без проблем. Когда она снова включается, usb 3 работает нормально. Иногда, довольно неожиданно, возникает ошибка. Как только возникает ошибка, мне приходится выдергивать вилку из машины и перезагружать live-диск, чтобы вернуть порт.

Сообщение длится недолго, всего несколько миллисекунд, но я заснял его на камеру.

Сообщение об ошибке:

xhci_hcd 0000:04:00.0: PCI post-resume error -110!
xhci_hcd 0000:04:00.0: HC died; cleaning up
xhci_hcd 0000:04:00.0: HC died; cleaning up
dpm_run_callback(): pci_pm_resume+0x0/0xb0 returns -110
PM: Device 0000:04:00.0 failed to resume async: error -110
dpm_run_callback(): usb_dev_resume+0x0/0x20 [usbcore] returns -5
PM: Device 4-1.4 failed to resume async: error -5

Редактировать 3: Возможный ответ? (нужно проверить) Чтениеэтот, я обнаружил, что если я вручную отвязываю usb3, а затем вызываю systemctl suspend, то когда я его пробуждаю и вручную привязываю устройство usb3, это работает. Я запустил это 150 раз, что, если учесть, что обычно это происходит от 2 до 10 раз, то это достаточное стандартное отклонение от среднего значения, поэтому я предполагаю, что это работает. Я поместил привязку и отвязку в "/etc/pm/sleep.d/20_custom-xhci_hcd". Затем проверил, чтобы убедиться, что это исполняемый файл.

#!/bin/sh
#File: "/etc/pm/sleep.d/20_custom-xhci_hcd"

case "${1}" in
    hibernate|sleep)
        #unbind
        echo "Unbinding xhci device"
        echo -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
    ;;
    resume|thaw)
        # bind
        echo "Binding xhci device"
        ehco -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/bind
    ;;
esac

Я не думаю, что этот файл когда-либо вызывается, потому что я никогда не видел выводов echo. И если подумать, это имеет смысл, так как на этой машине нет pm-utils, и вместо этого используется systemd. Поэтому я переместил его в /usr/lib/systemd/system-sleep/ согласноэтот сайти скорректировал его следующим образом:

#!/bin/sh
#File: "/usr/lib/systemd/system-sleep/xhci_hcd.sleep"

case $1/$2 in
    pre/*)
        #unbind
        echo "Unbinding xhci device"
        echo -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
    ;;
    post/*)
        # bind
        echo "Binding xhci device"
        ehco -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/bind
    ;;
esac

как указано на том же сайте. Затем установите его в исполняемый файл. Я собираюсь это проверить, но мне кажется, я чувствую любовь. Если это сработает, я опубликую это в разделе ответов.

решение1

Поиск устройства
Сначала нам нужно узнать номер устройства. Если порт включен и вы можете увидеть его с помощью команды, lsusbто используйте ls /sys/bus/pci/drivers/xhci_hcd. Устройство будет номером в формате xxxx:xx:xx.x и, скорее всего, будет первой записью, возвращаемой командой ls.

Сброс порта
Если порт не виден, это означает, что порт не работает, но его можно сбросить, отключив все питание машины. Выключите компьютер, извлеките все батареи и шнуры питания и подождите 10 секунд. Затем снова подключите шнур и загрузите машину. Затем снова найдите номер устройства.

Номер моего устройства 0000:04:00.0, но он может быть другим. Пример, который я видел в другом месте, — 0000:00:14.0. Запомните или запишите свой номер(а). Он понадобится нам для привязки и отмены привязки. Их может быть больше одного, если у вас несколько портов usb 3.

Определение структуры управления питанием
Дляapt/aptitude/dpkg(ubuntu/debian/mint):
dpkg --get-selections | grep pm-utils
Если что-то возвращается, у вас есть pm.

Дляменеджер пакетов pacman(arch)
pacman -Qe | grep pm-utils
Если что-то возвращено, у вас есть pm.

Дляменеджер пакетов RPM(fedora, centos и т. д.):
rpm -qa | grep pm-utils
Если что-то возвращается, у вас есть pm.

Длядругие, вы можете попробовать их, я не знаю, как они все работают, и у меня нет системы, чтобы их протестировать.

Примечание:то, что пакеты установлены, не означает, что вы их используете, но есть большая вероятность, что вы используете их. Еще одна вещь, которую вы можете сделать, это просто cd /etc/pm/и, если он существует, вы можете поместить туда скрипт. Технически, я не думаю, что есть что-то плохое в том, чтобы иметь скрипт отмены привязки в обоих местах. Если кто-то хочет оставить комментарий о том, правда это или нет, или есть ли лучший способ определить, используется ли pm, это было бы здорово.

скрипт приостановки systemd (без утилит pm)
Если вы используете systemd или systemctl без pm, нам нужно поместить скрипт в /usr/lib/systemd/system-sleep/xhci_hcd.sleep. Для моей машины скрипт выглядит так:

#!/bin/sh
#File: /usr/lib/systemd/system-sleep/xhci_hcd.sleep

case $1/$2 in
        pre/*)
                # Unbind
                echo "Unbinding xhci Device"
                echo -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
        ;;
        post/*)
                # bind xhci_dev
                echo "Rebinding xhci Device"
                echo -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/bind
        ;;
esac

Замените 0000:04:00.0 на номер вашего устройства в обоих случаях. Если у вас несколько номеров устройств, запустите привязку и отвязку для каждого. т.е. если у вас есть порты xxxx:xx:xx.x и yyyy:yy:yy.y, вам понадобятся echo -n "xxxx:xx:xx.x" > /sys/bus/pci/drivers/xhci_hcd/unbindи echo -n "yyyy:yy:yy.y" > /sys/bus/pci/drivers/xhci_hcd/unbindдля отвязки двух устройств, а echo -n "xxxx:xx:xx.x" > /sys/bus/pci/drivers/xhci_hcd/bindи echo -n "yyyy:yy:yy.y" > /sys/bus/pci/drivers/xhci_hcd/bindдля привязки устройств. Я поместил первую команду echo, чтобы мы могли видеть, когда происходит привязка и отвязка, когда мы смотрим на логи с помощью journalctl -b -u systemd-suspend. Подробнее оуправление энергопотреблениемс помощью systemd/systemctl. Сохраните этот файл, затем запустите его sudo chmod a+x /usr/lib/systemd/system-sleep/xhci_hcd.sleep, чтобы сделать его исполняемым. Лично я бы перезагрузил систему, чтобы убедиться, что новый файл вступил в силу, но я считаю, что он может вступить в силу немедленно. Если этого не произошло и вы перевели систему в спящий режим (или приостановили/перевели в режим гибернации), посмотрите, как вы сбросили порт выше.

скрипт pm suspend (установлены утилиты pm)
Если вы используете pm utils, нам нужно поместить скрипт в/etc/pm/sleep.d/20_custom-xhci_hcd

#!/bin/sh
#File: "/etc/pm/sleep.d/20_custom-xhci_hcd"

case "${1}" in
    hibernate|sleep)
        #unbind
        echo "Unbinding xhci device"
        echo -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
    ;;
    resume|thaw)
        # bind
        echo "Binding xhci device"
        ehco -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/bind
    ;;
esac

Замените 0000:04:00.0 на номер вашего устройства в обоих случаях. Если у вас несколько номеров устройств, запустите привязку и отвязку для каждого устройства. См. инструкции ниже скрипта для сценария systemd suspend, но вместо этого используйте , chmod a+x /etc/pm/sleep.d/20_custom-xhci_hcdчтобы сделать файл исполняемым. Затем перезагрузите и проверьте его.

Больше полезных ресурсов:

Связанный контент