No usb 3 Arch linux 3.15.1

2

Até a minha última reinicialização, tive a capacidade de usar minha porta usb 3. Acabei de ter o sistema instalado não há muito tempo, então até então eu estava configurando e instalando drivers, mas essa era a sessão em que eu estava trabalhando. Eu instalei o driver xf86-input-synaptics, mas Eu apenas removi e inicializei novamente para ver se isso estava estragando tudo, já que ele não voltou, não foi. Agora estou preso. Eu tenho visto em muitos fóruns que as pessoas estão tendo problemas com isso, mas a porta geralmente aparece em lsusb, dmesg ou 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 -short -class bus

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

Até agora, simplesmente me disseram que o dispositivo está quebrado, já que ele não aparece em nenhum deles. Agora que já vi funcionar, sei que não é e que é apenas um problema de configuração.

Quando estava funcionando, a saída de lsusb incluía um driver fesco (eu acho). Eu não vejo fesco anywere ao usar o grep.

O computador é um laptop Asus G74sx.

Toda e qualquer informação é apreciada. Obrigado.

Editar:
Ok, então eu não sei o quanto isso ajuda, mas eu tenho outra máquina (executando Linux) com uma porta usb3 de trabalho. Eu comecei a verificar as diferenças entre os dois em xhci_hcd e ehci_hcd (apenas no caso) e descobri que em / sys / bus / pci / drivers / o sistema de trabalho tem uma pasta "xhci_hcd", enquanto o sistema não funcional não. No começo, pensei comigo mesmo: "Ei, talvez eu possa copiá-lo de um sistema para o outro. Mesmo como root, eu não posso nem copiar esses arquivos. Então, claramente, algo em algum outro lugar do sistema está ficando descontrolado. Don não sei se isso ajuda ou ofusca, mas é um detalhe.

Editar 2: a mensagem de erro
O problema parece estar relacionado a colocar o sistema no modo de suspensão. Eu estou inicializando de um disco ao vivo para que eu possa apagar rapidamente todas as alterações. Quando coloco a máquina no modo de suspensão, ela geralmente fica sem problema. Quando ele volta a usb 3 funciona bem. Às vezes, um pouco fora do azul, há um erro. Uma vez que o erro ocorre, eu tenho que puxar o plugue na máquina e redefinir meu disco ao vivo para obter a porta de volta.

A mensagem não dura muito tempo, apenas alguns milissegundos, mas eu a tenho na minha câmera.

A mensagem de erro:

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

Editar 3: resposta possível? (precisa de testes) Lendo isto , descobri que se eu manualmente desvincular o usb3, chamo systemctl suspend , então quando eu o acordo e manualmente vinculo o dispositivo usb3, funciona. Eu corri isso 150 vezes, o que se você considerar que normalmente irá falhar entre 2 e 10 vezes, isso é suficiente desvios padrão da média, então eu vou assumir que isso funciona. Eu coloquei o bind e o desvinculei em "/etc/pm/sleep.d/20_custom-xhci_hcd". Em seguida, verifiquei se era executável.

#!/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

Eu não acho que esse arquivo seja chamado porque nunca vi as saídas de eco. E pensando nisso, faz sentido, uma vez que esta máquina não tem utilitários e usa o systemd. Então eu mudei para / usr / lib / systemd / system-sleep / como por este site e ajustei para :

#!/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

como indicado no mesmo site. Em seguida, defina-o como executável. Vou testar isso, mas acho que estou sentindo o amor. Se funcionar, postarei isso na parte de respostas.

    
por Evan 20.06.2014 / 09:46

1 resposta

1

Encontrar o dispositivo
Primeiro, precisamos descobrir qual é o número do dispositivo. Se a porta estiver ativada e você puder vê-la com o comando lsusb , use ls /sys/bus/pci/drivers/xhci_hcd . O dispositivo será um número no formato xxxx: xx: xx.x e provavelmente será as primeiras entradas retornadas do comando ls .

Redefinindo a porta
Se a porta não estiver visível, isso significa que a porta não está funcionando, mas pode ser redefinida removendo toda a energia da máquina. Desligue o computador, remova todas as baterias e cabos de alimentação e aguarde 10 segundos. Em seguida, conecte o cabo de volta e inicialize a máquina. Em seguida, procure o número do dispositivo novamente.

O número do meu dispositivo é 0000: 04: 00.0, mas pode ser diferente. Um exemplo que eu vi é em outro lugar 0000: 00: 14.0. Lembre-se ou anote seu (s) número (s). Nós precisaremos disso para encadernar e desvincular. Pode haver mais de um se você tiver várias portas usb 3.

Determinando a estrutura de gerenciamento de energia
Para apt / aptitude / dpkg (ubuntu / debian / mint):
dpkg --get-selections | grep pm-utils
Se algo é retornado, você tem pm.

Para gerenciador de pacotes pacman (arch)
pacman -Qe | grep pm-utils
Se algo é retornado, você tem pm.

Para gerenciador de pacotes rpm (fedora, centos, etc ...):
rpm -qa | grep pm-utils
Se algo é retornado, você tem pm.

Para outros , você pode tentar isso, eu não sei como todos eles funcionam e não tenho um sistema para testá-los.

Nota: só porque os pacotes instalados não implicam que você está usando, mas há uma boa chance que você esteja. Outra coisa que você pode fazer é simplesmente cd /etc/pm/ e, se existir, você pode colocar o script lá. Tecnicamente, acho que não há nada de errado em ter um roteiro desvinculado em ambos os lugares. Se alguém quiser deixar um comentário sobre se isso é verdade ou não, ou se há uma maneira melhor de determinar se o pm é usado, isso seria fantástico.

systemd suspend script (não usa os utilitários)
Se você estiver usando systemd ou systemctl sem pm, precisamos colocar o script em /usr/lib/systemd/system-sleep/xhci_hcd.sleep . Para minha máquina, o script se parece com:

#!/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

Substitua o 0000: 04: 00.0 pelo número do seu dispositivo nas duas instâncias. Se você tiver vários números de dispositivos, execute o bind e desvincule para cada um. ou seja, se você tiver portas xxxx: xx: xx.x e yyyy: yy: yy.y, você precisará de echo -n "xxxx:xx:xx.x" > /sys/bus/pci/drivers/xhci_hcd/unbind e echo -n "yyyy:yy:yy.y" > /sys/bus/pci/drivers/xhci_hcd/unbind para desvincular os dois dispositivos e echo -n "xxxx:xx:xx.x" > /sys/bus/pci/drivers/xhci_hcd/bind e echo -n "yyyy:yy:yy.y" > /sys/bus/pci/drivers/xhci_hcd/bind para ligar os dispositivos. Eu coloquei o primeiro comando echo para nos deixar ver quando a ligação e desvinculação acontece quando olhamos para os logs usando journalctl -b -u systemd-suspend . Mais informações sobre gerenciamento de energia com systemd / systemctl. Salve esse arquivo e execute sudo chmod a+x /usr/lib/systemd/system-sleep/xhci_hcd.sleep para torná-lo executável. Pessoalmente, eu iria reiniciar o sistema para garantir que o novo arquivo tenha efeito, mas acredito que possa entrar em vigor imediatamente. Se isso não acontecer e você colocar o sistema em repouso (ou suspender / hibernar), veja como você redefiniu a porta acima.

pm suspend script (utilitários do pm instalados)
Se você estiver usando o pm utils, precisamos colocar o script em /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

Substitua o 0000: 04: 00.0 pelo número do seu dispositivo nas duas instâncias. Se você tiver vários números de dispositivos, execute a ligação e desvincule cada dispositivo. Veja as instruções abaixo do script para script suspenso systemd, mas use chmod a+x /etc/pm/sleep.d/20_custom-xhci_hcd para tornar o arquivo executável. Em seguida, reinicie e teste.

Mais recursos úteis:

por 24.06.2014 / 01:58