Por que o USB não está funcionando no Linux quando funciona no UEFI / BIOS?

31

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

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

Dado isso, tentei instalar várias versões do Linux no SSD e encontrei falhas quase todas as vezes. Tentei instalar o Arch, Debian stable, Debian sid e Ubuntu 12.10 a partir de uma unidade USB, mas enquanto o BIOS via a unidade USB e começava a inicializá-la, assim que o sistema operacional tentou enumerar os dispositivos USB, perdi toda a funcionalidade USB (incluindo o dispositivo de inicialização).

Eventualmente, gravei um DVD e instalei o Ubuntu 12.10 no SSD. Note-se que meu teclado USB (e mouse) funcionam bem enquanto estão na UEFI / BIOS da Megatrends americana. Mesmo quando estou nos menus de pré-instalação no Live Ubuntu DVD, o teclado funciona bem.

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

O que vejo no dmesg / syslog são algumas linhas sobre " failed to load microcode amd_ucode/microcode_amd_fam15h.bin" e vejo dispositivos USB falhando ao inicializar.

Se eu fizer um lsusb, posso ver todos os controladores de host USB, mas nenhum dos dispositivos. Fazer um lspcime mostra todo o hardware que eu esperaria. E fazendo um lsmodeu não vejo nenhum módulo usb carregado ( usb_ehcipor exemplo).

Tentei passar noapicpara a string de inicialização do kernel e não teve efeito sobre esse problema.

A placa-mãe suporta USB 3.0, mas todos os dispositivos conectados às portas USB 2.0 normais.

Estou um pouco confuso com o que poderia estar matando / impedindo o USB (e minha placa de rede interna) de trabalhar no Linux . Parece não haver nenhum problema com qualquer um desses dispositivos funcionando no BIOS e não tenho uma instalação do Windows disponível para testar e verificar se funciona.

Eu já fiz a RMA da placa mãe uma vez, mas a segunda tem exatamente o mesmo comportamento, então acho que posso descartar com segurança falhas de hardware (já que o comportamento é idêntico, não acho estranho eu ter duas placas com defeito idêntico são maiores do que as chances de isso ser um problema do Linux).

O que mais posso tentar para que o USB (e, de preferência, minha rede, mas vamos continuar usando o USB por enquanto) funcione?

Edição nº 1:

Como não tenho rede, só posso relacionar partes interessantes dmesgdaqui.

De dmesgmeu interesse , posso ver que tenho 11 controladores de host USB (OHCI, EHCI e xHCI). Ele detecta meus dispositivos USB e falha imediatamente da seguinte maneira:

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

Isso se repete várias vezes, incrementando o número e tentando outros controladores de host USB até retornar aos 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 não ter o IPv6 ativado no meu roteador e isso parece ser um problema

eth1: no IPv6 routers present

Edição # 2:

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

Agora rodando Debian wheezy modprobemostras usb_common, usbcore, xhci_hcd, ehci_hcd, e ohci_hcdtodos carregados e funcionando.

BrionS
fonte
A falha no carregamento do microcódigo parece peculiar. Estou pensando que a placa-mãe ainda não está sendo suportada ou está faltando o pacote de microcódigo.
TNW
Parece que esse problema pode desaparecer ( butterflyofdream.wordpress.com/2012/09/10/… ), pois esta CPU está fora do mercado há um tempo e há pacotes que atualizam o microcódigo. No entanto, estou me perguntando como isso impediria o USB de funcionar no Linux quando o USB funciona no BIOS sem problemas. Além disso, até que eu possa descobrir por que o dispositivo de rede não se conecta, também não poderei aplicar o patch (embora uma placa de expansão possa me deixar descartar isso hoje à noite).
BrionS
1
Prefiro dizer que seria estranho da maneira oposta. O BIOS que supostamente suporta tudo na placa - mãe tem que funcionar. Linux meio que não. O BIOS geralmente suporta dispositivos de uma maneira simplificada, por exemplo, VBE para placa gráfica - enquanto você não gostaria de usá-los ou drivers GPU comuns.
TNW
Então, existe uma maneira de forçar o Linux a permitir que o BIOS gerencie os dispositivos dos controladores USB e de rede até que eles sejam (melhores?) Suportados no kernel do Linux?
Brions
Acho que não. Os dias em que todos os dispositivos foram acessados ​​através do BIOS já se foram. No entanto, não posso garantir que o problema se deve à falta de drivers. Você encontrou algo interessante dmesg, tentou modprobemódulos relacionados ao USB?
TNW

Respostas:

25

Encontrei a resposta deste tópico ( http://ubuntuforums.org/showthread.php?t=2114055 ) em ubuntuforums.org.

Parece que, com as placas-mãe Gigabyte mais recentes (pelo menos), há uma opção de BIOS chamada IOMMU Controllerque está desativada por padrão e não dá nenhuma pista ou indicação sobre o que é.

A ativação dessa configuração e a reinicialização "magicamente" restauram todos os meus problemas de USB e de rede em um sistema operacional Linux de 64 bits (não importa qual).

Estou um pouco chocado e feliz 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 de acrescentar que minhas configurações atuais do BIOS também incluem a habilitação do XHCI Handoff e EHCI Handoff, além do IOMMU Controller. Outros também mencionaram isso, e permitir essas duas transferências também permite que minhas portas USB 3.0 funcionem conforme o esperado.

BrionS
fonte
1
Apontarei que, embora a ativação do IOMMU funcionasse para mim, ele desativou todas as minhas portas USB 3 internas. Além disso, eu já estava enfrentando alguns problemas com a porta Ethernet, mas ativar o IOMMU corrigiu esses problemas.
Robbie
Você tentou ativar o Handoff do xHCI para corrigir as portas USB 3.0?
Stuart P. Bentley
@ StuartP.Bentley yes As configurações de transferência de xHCI e eHCI estão ativadas, assim como o controlador IOMMU. Isso habilita minhas portas USB 3.0, mas por qualquer motivo não permite que meu teclado USB funcione nas telas do BIOS ou do grub - no entanto, meu mouse USB funciona (veja a figura). Eu tenho um segundo teclado estilo PS / 2 conectado apenas para inicializar no BIOS.
Brions
Há mais do que isso. Se você percorrer todos os fóruns do ubuntu, verá que uma configuração do carregador de inicialização é recomendada ("iommu = soft") com o IOMMU DIS ativado. Meu GB 990FXA-UD3 é ativado como padrão e não pude usar meu hub USB3 externo. LINHA INFERIOR: isso pode não resolver o seu problema. Caso contrário, continue pesquisando.
Bruce
É recomendável deixar a transferência de EHCI desativada no BIOS para obter melhor desempenho com o USB 2.0.
precisa saber é o seguinte
5

Acabei de aprender, com o 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), são necessárias as seguintes configurações no BIOS:

  • Transferência xHCI - Ativado
  • Transferência EHCI - Ativada
  • 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> 2,2 TB, poderá ter um problema diferente em suas mãos.

Estou usando um SSD de 256 GB para minha unidade de inicialização e um par de HDs de 3 TB em uma matriz RAID 1 (espelhada) usando mdadm para minha / casa e tudo está funcionando bem.

Tendo trabalhado bastante com placas Gigabyte, sei que as placas 990FXA-UD5 e 990FXA-UD3 têm BIOS muito semelhante, portanto é provável que o mesmo se aplique também a essas placas.

PracticalTech
fonte
Estou feliz que funcione para você. Eu tenho exatamente a sua configuração (SSD de 256 GB + unidades de 3 TB espelhadas para / u (/ home)). Minhas portas USB3 funcionam, mas o hub USB3 pendurado em uma delas não funciona. (Bem, eu posso usar um pen drive sobre ele, mas não um teclado ou mouse.)
Bruce
iommu=softem conjunto com o xHCI + eHIC Handoff e o IOMMU Controller (todos ativados), sem a necessidade de "Legacy Only". Arquive o Linux na inicialização a toda velocidade, EFI e sem problemas de dispositivo raiz iommu ou usb3.
Dê uma olhada nesta resposta do Askubuntu relacionada .
Pablo #
4

Curiosamente, apesar de eu ter uma configuração quase idêntica (mesma placa-mãe, processador FX8350), permitir que o IOMMU não fizesse diferença para mim. Ainda não há USB, rede, etc.

O que ajudou, no entanto, foi adicionar "iommu = soft" à linha de comando do kernel. Agora tudo funciona bem (exceto que, por algum motivo estranho, meu Logitech Zone Touch Mouse não funciona).

Ron Murray
fonte
1
Eles nunca são os mesmos. Mesmo algumas semanas de diferença nas datas de fabricação pode significar uma nova fonte para um componente comum da placa-mãe e / ou revisão superio. A fabricação de placas de circuito é o ponto fraco da computação.
mikeserv
3

FYI, os motivos técnicos pelos quais o Linux não pode usar dispositivos "através" do BIOS: depois que o sistema operacional faz a transição para o "modo protegido" (32 bits) ou "modo longo" (64 bits), ele não pode mais enviar interrupções para o BIOS. No "modo real" (16 bits, na inicialização), ele pode chamar interrupções do BIOS para ler discos, entrada do teclado etc.

Mas também tem desvantagens. Por um lado, você nem tem um megabyte de memória endereçável. SO tão moderno sair do modo real quase a primeira coisa. (Na verdade, acredito que o grub alterna para o modo protegido antes mesmo de carregar o kernel).

Mais detalhes: http://wiki.osdev.org/Real_Mode http://wiki.osdev.org/Protected_Mode

DimeCadmium
fonte
2

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

A dica do IOMMU ajudou um pouco - todas as portas podem ver um teclado USB, um hub USB de monitor e um adaptador wifi USB (Realtek), mas não há unidade flash.

Parece que essa solução me ajudou:

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

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

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

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

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

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

http://www.geekdevs.com/2010/04/solved-unable-to-enumerate-usb-device-disabling-ehci_hcd/

Chek
fonte
2
Seria mais útil se você fornecesse uma solução aqui em texto e use apenas links para informações básicas e detalhes não essenciais. Sem isso, uma vez que seu link se torna inválido, sua resposta não tem valor.
Anthon
Como um dos usuários comentou no link que você forneceu "Isso NÃO é uma correção. Isso significa que você não está usando sua unidade a toda velocidade. É como colocar um band-aid em um membro cortado".
enthusiasticgeek
2

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

  • Transferência xHCI - Ativado
  • Transferência EHCI - Ativada
  • Controlador IOMMU - Ativado
  • UEFI - Desativado
  • Todas as opções de inicialização - somente herdadas
RVR
fonte
2

Eu tenho o mesmo FX8350 rodando em um Gigabyte 990FXA-UD3 usando o OpenSuse 13.1. A solução que funcionou para mim foi editar o gerenciador de inicialização usando o 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" após "exibições silenciosas".

Por exemplo:

"resume = / dev / disk / por id / ata-Hitachi_HDS721010CLA332_JP2921HQ1076NA-part2 splash = mostra silenciosa silenciosa iommu = pt"

Agora todas as minhas portas USB 2.0 e 3.0 estão funcionando e minha rede de Internet também está funcionando !. Verifique também se o IOMMU está ativado no BIOS.

dipio
fonte
1

Ontem, tive esse problema ao instalar o Ubuntu na minha placa-mãe ASUSTek M5A99X. Meu objetivo era reinstalar o Ubuntu a partir do pendrive no modo UEFI, para corrigir a detecção do IOMMU pelo sistema operacional (meu sistema foi instalado via modo "Legacy BIOS", achei que isso poderia ser um motivo).

Anteriormente, eu tentei isso instalando o Ubuntu a partir do pendrive. Bom 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 interface do usuário 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). Este erro tem uma solução alternativa ao alterar o tipo de pendrive para "Forçar disco rígido", mas o sistema de inicialização causou outros problemas posteriormente após a instalação.

Eu estava pensando que os problemas são de "Unetbootin" ou "Startup Disk Creator" - eles não são. Passei mais de 2 horas tentando todas as configurações do BIOS (não tenho IOMMU Controllerou não as do xHCI Handoffmeu), mas a única coisa ajudou - a atualização do BIOS para a versão mais recente com o arquivo ROM baixado do site da Asus para o modelo da minha placa-mãe. É fácil descompactar e copiar o arquivo ROM no pendrive e usar o "EZ Flash Utility" (no BIOS) para atualizar o firmware.

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

Croll
fonte