Por que o USB não funciona no Linux quando funciona em UEFI / BIOS?

27

Como pano de fundo, acabei de criar uma nova máquina com hardware moderno, incluindo:

  • AMD FX-8350
  • Placa-mãe Gigabyte GA-990FXA-UD3
  • 16 GB de RAM
  • NVidia GTX 650 Ti
  • Kingston SSD

Dado que, eu tentei instalar várias versões do Linux no SSD e foi encontrado com falha quase todas as vezes. Eu tentei instalar o Arch, o Debian stable, o Debian sid e o Ubuntu 12.10 de uma pen drive USB, mas enquanto a BIOS viu a unidade USB e começou a inicializá-la, assim que o SO tentou enumerar os dispositivos USB, perdi toda a funcionalidade USB (incluindo o dispositivo de inicialização).

Eventualmente eu queimei um DVD e instalei o Ubuntu 12.10 no SSD. Deve-se notar que o teclado (e o mouse) USB funciona bem no UEFI / BIOS da American Megatrends. Mesmo quando estou nos menus de pré-instalação no Live Ubuntu DVD, o teclado funciona bem.

Assim que o Linux é inicializado (no Live DVD ou no SSD), perco toda a funcionalidade do USB e só consigo navegar pelo sistema operacional usando um teclado PS / 2.

O que eu vejo no dmesg / syslog são algumas linhas sobre " failed to load microcode amd_ucode/microcode_amd_fam15h.bin " e consigo ver dispositivos USB não inicializando.

Se eu fizer um lsusb , posso ver todos os controladores de host USB, mas nenhum dos dispositivos. Fazendo um lspci mostra-me todo o hardware que eu esperava. E fazendo um lsmod não vejo nenhum módulo usb carregado ( usb_ehci por exemplo).

Eu tentei passar noapic para a string de inicialização do kernel e isso não teve efeito sobre esse problema.

A placa-mãe suporta USB 3.0, mas todos os dispositivos que eu conectei em portas USB 2.0 normais.

Estou bastante confuso com o que poderia estar matando / impedindo que o USB (e minha placa de rede integrada) funcionem no Linux . Não parece haver nenhum problema com qualquer um desses dispositivos funcionando no BIOS e eu não tenho uma instalação do Windows disponível para testar e ver se funciona.

Eu já tenho RMA na placa-mãe uma vez, mas a segunda tem exatamente o mesmo comportamento, então eu acho que posso excluir com segurança a falha de hardware (já que o comportamento é idêntico, não acho que eu tenha dois placas identicamente defeituosas são maiores do que as chances de este ser um problema do Linux).

O que mais eu posso tentar fazer com que o USB (e idealmente minha rede, mas vamos nos ater ao USB por enquanto) funcione?

Editar # 1:

Como não tenho rede, só posso relacionar bits interessantes de dmesg aqui.

De interesse em dmesg eu posso ver que eu tenho 11 controladores host USB (OHCI, EHCI e xHCI). Ele detecta meus dispositivos USB e falha imediatamente da seguinte forma:

usb 3-1: new high-speed USB device number 2 using ehci_hcd
usb 3-1: device descriptor read/64, error -32

Isso repete várias vezes incrementando o número e testando outros controladores USB Host até que ele volte para os controladores OHCI, que também falham, mas têm uma mensagem adicional:

usb 8-1: device not accepting address 4, error -32

Acho que meus problemas de rede têm a ver com o fato de que não tenho IPv6 habilitado no roteador e isso parece ser um problema

eth1: no IPv6 routers present

Editar # 2:

lspci -vvv mostra que meus adaptadores de rede (onboard e expansão) são Realtek Semiconductor (não é surpresa); RTL8111 / 8168B e RTL8169 / 8110, respectivamente. Meus controladores USB são Etron Technology EJ168 (xHCI) e AMD nee ATI SB7x0 / SB8x0 / SB9x0 (EHCI & OHCI)

Agora executando o Debian wheezy modprobe mostra usb_common , usbcore , xhci_hcd , ehci_hcd e ohci_hcd todos carregados e funcionando.

    
por BrionS 16.04.2013 / 15:27

8 respostas

24

Encontrei a resposta deste tópico ( link ) em ubuntuforums.org.

Parece que com mainboards Gigabyte mais novas (pelo menos) existe uma opção de BIOS chamada IOMMU Controller que está desabilitada por padrão e não dá nenhuma pista ou indicação do que é.

Ativar essa configuração e reinicializar "magicamente" restaura todos os meus problemas de rede e USB em um sistema operacional Linux de 64 bits (não importa qual deles).

Estou bastante chocado e entusiasmado por ter sido uma busca tão longa por uma solução tão simples.

Obrigado a todos por sua ajuda e sugestões. Espero que outros achem isso útil.

Atualização: Gostaria apenas de acrescentar que minhas configurações atuais do BIOS também incluem a habilitação de XHCI Handoff e EHCI Handoff, além do IOMMU Controller. Outros mencionaram isso também e ativar essas duas handoffs também permite que minhas portas USB 3.0 funcionem como esperado.

    
por 17.04.2013 / 05:26
4

Curiosamente, apesar de eu ter uma configuração quase idêntica (mesma placa-mãe, processador FX8350), habilitar o IOMMU não fez nenhuma diferença para mim. Ainda sem USB, rede, etc.

O que fez ajudar, porém, foi adicionar "iommu = soft" à linha de comando do kernel. Agora tudo funciona bem (exceto que, por alguma estranha razão, meu Logitech Zone Touch Mouse não funciona).

    
por 27.07.2013 / 17:00
4

Acabei de aprender, com meu GA-990FXA-UD7, que para os controladores USB 2.0 e USB 3.0 e o controlador Ethernet integrado para funcionar corretamente no Linux (estou usando o Mint 17.1) ele exigia as seguintes configurações no BIOS:

    Handoff
  • xHCI - Ativado
  • Handoff de EHCI
  • - Ativado
  • Controlador IOMMU
  • - Ativado

Não se esqueça de desativar o UEFI e alterar todas as opções de inicialização para "Somente Legado".

Se você realmente precisar inicializar a partir de um HDD com capacidade de > 2,2 TB, poderá ter um problema diferente em suas mãos.

Estou usando um SSD de 256GB para meu disco de inicialização e um par de HDDs de 3TB em um array RAID 1 (espelhado) usando o mdadm para my / home e tudo está funcionando bem.

Espero que isso ajude alguém. Tendo trabalhado bastante com placas Gigabyte, eu sei que as placas 990FXA-UD5 e 990FXA-UD3 têm BIOS muito parecidas, então é provável que o mesmo se aplique a essas placas também.

    
por 29.05.2015 / 10:18
3

FYI, as razões técnicas pelas quais o Linux não pode usar dispositivos "através" do BIOS: uma vez que o sistema operacional tenha mudado para "modo protegido" (32 bits) ou "modo longo" (64 bits), não mais tempo envia interrupções para o BIOS. Em "modo real" (16-bit, na inicialização) ele pode chamar as interrupções do BIOS para ter discos lidos, entrada de teclado, etc.

Mas também tem desvantagens. Por um lado, você não tem sequer um megabyte de memória endereçável. Então, os sistemas operacionais modernos trocam o modo real quase pela primeira vez. (Na verdade, acredito que o grub muda para o modo protegido antes mesmo de carregar o kernel).

Mais detalhes: link link

    
por 17.04.2013 / 05:55
2

Eu tenho o mesmo proc (mas de 8 núcleos) o mesmo MB (rev 3) a mesma quantidade de RAM (Kingston)

A dica com o IOMMU ajudou um pouco - todas as portas podem ver um teclado usb, um hub usb do monitor e um adaptador wifi usb (Realtek), mas sem flash drive.

Parece que essa solução me ajudou:

cd /sys/bus/pci/drivers/ehci_hcd
ls

Você verá um arquivo com o formato 0000: 00: xx.x. Execute o seguinte comando:

sudo sh -c 'echo -n "0000:00:xx.x" > unbind'

Substitua o xx.x pelos números exibidos no seu arquivo. Deve desativar o ehci_hcd.

Agora você pode usar o seguinte script para desabilitar o ehci_hcd.

cd /sys/bus/pci/drivers/ehci_hcd/
sudo sh -c 'find ./ -name "0000:00:*" -print| sed "s/\.\///">unbind'

link

    
por 30.05.2013 / 12:11
2

Eu tenho o mesmo FX8350 rodando em uma Gigabyte 990FXA-UD3 usando o OpenSuse 13.1. A solução que funcionou para mim foi editar o bootloader usando YAST, a seleção padrão (ou a seleção que você está usando para carregar o OpenSuse 13.1 no meu caso), "iommu = pt" depois de "showopts silenciosos".

Por exemplo:

"resume=/dev/disk/by-id/ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash=silent quiet showopts iommu=pt"

Agora todas as minhas portas USB 2.0 e 3.0 estão funcionando e minha rede de internet está funcionando também !. Também verifique se o IOMMU está habilitado no BIOS. Espero que isso ajude alguém.

    
por 16.06.2014 / 04:05
2

Estas etapas funcionaram para mim com uma GIGABYTE 970A-DS3P e AMD-FX-8320 executando o Ubuntu 15.04

    Handoff
  • xHCI - Ativado
  • Handoff de EHCI
  • - Ativado
  • Controlador IOMMU
  • - Ativado
  • UEFI - desativado
  • Todas as opções de inicialização - somente legado
por 24.06.2015 / 12:08
1

Ontem recebi este problema ao instalar o Ubuntu na placa-mãe ASUSTek M5A99X. Meu objetivo era reinstalar o Ubuntu do pendrive USB no modo UEFI, para corrigir a detecção do IOMMU pelo sistema operacional (meu sistema foi instalado através do modo “Legacy BIOS”, achei que isso poderia ser um motivo).

Anteriormente, tentei instalar o Ubuntu a partir do pendrive USB. Tudo bem com o Legacy, o UEFI sempre foi um problema - meu teclado / mouse / Wifi não estava funcionando corretamente (somente energia) ao entrar no instalador ou o instalador falhou ao carregar a UI com mensagens no console:

  • (…) device descriptor read/64, error -32 (para cada dispositivo USB)
  • (…) unable to find a live medium containing a live file system (após 5-6 minutos de leitura do stick). Esse erro tem uma solução alternativa para alterar o tipo de pendrive USB para “Forçar disco rígido”, mas o sistema de inicialização causou outros problemas mais tarde após a instalação.

Eu estava pensando que os problemas são de "Unetbootin" ou "Criador de disco de inicialização" - eles não são. Passei mais de 2 horas tentando todas as configurações no BIOS (não tenho IOMMU Controller ou xHCI Handoff configurações no meu), mas o só ajudou - atualizando o BIOS para a versão mais recente com ROM arquivo baixado do site da Asus para o modelo da minha placa-mãe. É fácil descompactar e copiar o arquivo ROM no dispositivo USB e usar o "EZ Flash Utility" (no BIOS) para fazer o flash do firmware.

Fazer isso corrigiu todos os tipos de erros que eu tive; Consegui instalar e usar o Ubuntu no modo UEFI. Mais, o IOMMU é detectado pelo Ubuntu magicamente, sem problemas. Isso significa que meus problemas foram causados por bugs de firmware do BIOS relacionados ao suporte a USB 2.0 / 3.0 e suporte a IOMMU. (se você não precisar do IOMMU, desative-o na seção "Avançado", pois isso não é comum).

    
por 03.07.2016 / 16:54