Como desativar a suspensão automática do USB no kernel 3.7.10 ou acima?

36

Eu atualizei meu HTPC do kernel 3.7.10 para 3.10.7 e parece que CONFIG_USB_SUSPEND foi removido das opções do kernel e incluído no PM.

O principal problema que estou enfrentando é que eu tenho um HDD externo e ao suspender e ativar o HTPC, ele não está disponível para o sistema. O HDD é ativado (você pode ouvi-lo girar novamente), mas quando você tenta acessar o ponto de montagem, recebe o seguinte erro:

ZOTAC ~ # ls /media
ls: reading directory /media: Input/output error

E no dmesg:

[  253.278260] EXT4-fs warning (device sdb1): __ext4_read_dirblock:908: error reading   directory block (ino 2, block 0)

Nos kernels anteriores, a configuração CONFIG_USB_SUSPEND = N resolveria o problema, já que o HDD controlaria sozinho a sua hibernação e o ponto de montagem era sempre acessível. Quando o HDD estava em suspensão e o HTPC precisava de algo do ponto de montagem do HDD, o HDD em si acordava e operava sem problemas.

Agora mesmo tentei o seguinte sem sucesso:

  1. Altere manualmente / sys / bus / usb / dispositivos / usb * / power / control para "on" em vez de "auto" .
  2. Altere manualmente / sys / bus / usb / devices / usb * / power / autosuspend para "- 1" em vez de "0" .

Mas ao acordar novamente o HTPC, o ponto de montagem é novamente inacessível. Como resultado, posso desmontar e remontar o ponto de montagem e ele funciona novamente sem problemas, mas tenho certeza que deve haver uma maneira de evitar que o SO manipule o usb autosuspend.

Alguma ideia de como desativar usb autosuspend no kernel 3.7.10 ou acima?

    
por Peter 17.09.2013 / 10:58

3 respostas

28

Para Ubuntu e Debian , usbcore é compilado no kernel, então crie entradas em /etc/modprobe.d e NÃO funcione: nós precisa alterar os parâmetros de inicialização do kernel.

Edite o arquivo /etc/default/grub e altere a linha GRUB_CMDLINE_LINUX_DEFAULT para adicionar a opção usbcore.autosuspend=-1 :

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"

Observe que quit splash já estavam presentes. Então, mantenha outras opções que você tem também.

Depois de salvar o arquivo, atualize o grub:

sudo update-grub

e reiniciar .

Agora, verifique o valor autosuspend :

cat /sys/module/usbcore/parameters/autosuspend

E ele deve exibir -1 .

Na documentação do kernel é afirmado que algum dia no futuro este parâmetro irá mudar para autosuspend_delay_ms (ao invés de autosuspend ).

    
por 19.12.2014 / 15:19
19

De acordo com a documentação da árvore do kernel , o tempo de atraso inativo da suspensão automática é controlado pelo parâmetro do módulo autosuspend em usbcore . Definir o atraso de espera padrão para -1 evita a suspensão automática de qualquer dispositivo USB. Você ainda deve ser capaz de ativar a suspensão automática para dispositivos selecionados.

O parâmetro do kernel usbcore.autosuspend pode ser definido quando o módulo é carregado manualmente:

$ modprobe usbcore autosuspend=-1

ou adicionando a seguinte linha a um arquivo de configuração em /etc/modprobe.d :

options usbcore autosuspend=-1

Se usbcore for compilado no kernel, o parâmetro pode ser ajustado adicionando o seguinte na linha de comando do kernel:

usbcore.autosuspend=-1

Por último, a opção pode ser ajustada em tempo de execução, fazendo:

echo -1 >/sys/module/usbcore/parameters/autosuspend

A alteração afetará todos os novos dispositivos USB. Os dispositivos já existentes não serão afetados.

    
por 08.10.2013 / 07:17
2

Tenho um problema semelhante com o Microsoft Wheel Mouse Optical USB e PS / 2 Compatible desde a atualização de um Linux Mint Debian Edition do sistema para o kernel 3.10-2-amd64 . Uma suspensão automática inadequada pelo gerenciamento de energia USB do kernel era suspeita. No Debian, isso é compilado como o módulo usbcore no kernel.

Você pode alterar isso permanentemente, emitindo na linha de comando:

sudo echo "options usbcore autosuspend=-1" | sudo tee /etc/modprobe.d/disable-usb-autosuspend.conf > /dev/null

Alguns kernels podem exigir autosuspend=0 , no entanto.

Se o seu sistema usa initrd (provavelmente o faz), então reconstrua o initrd para o seu kernel.

Por exemplo:

uname -r
sudo dpkg-reconfigure linux-image-3.10-2-amd64

Reinicie e verifique com:

cat /sys/module/usbcore/parameters/autosuspend

que deve render -1 agora.

    
por 21.10.2013 / 14:09