OpenBSD falha ao carregar o firmware do adaptador USB WiFi supostamente suportado

3

Eu comprei recentemente um Edimax EW-7811Un WiFi adaptador USB na Amazon. Um punhado de usuários do OpenBSD relataram sucesso com ele, e é listado como sendo apoiado por urtwn(4) em sua man pages .

Atualmente estou executando o OpenBSD 5.5 amd64 (baixado no último final de semana) em um netbook da Asus. O adaptador sem fio é reconhecido como urtwn0 , conforme esperado, e é relatado como tal quando eu o insiro ou removo. Eu criei /etc/hostname.urtwn0 conforme descrito na man page, com o seguinte conteúdo:

nwid mynetwork
wpakey mykey
dhcp

em que mynetwork e mykey são o nome e a senha da minha rede Wi-Fi, respectivamente. A rede é na verdade WPA2, que poderia ter causado problemas próprios, mas o sistema operacional parece ser incapaz de carregar o firmware. Quando executo sh /etc/netstart urtwn0 , recebo a seguinte saída:

urtwn0: failed loadfirmware of file urtwn-rt18192cfwT (error 2)
urtwn0: no link ............ sleeping

É possível que o firmware esteja corrompido? Esta é a primeira vez que uso o adaptador. Mais provavelmente, a Edimax alterou o firmware e quebrou a implementação atual do urtwn do OpenBSD? Também é provável, estou apenas cometendo um erro estúpido?

    
por Mike 17.07.2014 / 04:15

1 resposta

6

Primeiras coisas primeiro: o seu arquivo hostname.urtwn0 parece bom e se você tiver um erro, você receberá mensagens de erro completamente diferentes.

A mensagem urtwn0: failed loadfirmware of file urtwn-rt18192cfwT (error 2) indica que o firmware não está instalado no local adequado:

Como explicado em loadfirmware(9) , esta função retorna errno style códigos de erro: e errno(2) explica:

2 ENOENT No such file or directory.
    A component of a specified pathname did not exist, or the pathname
    was an empty string.

Deve haver um arquivo /etc/firmware/urtwn-rt18192cfwT para o driver carregar. 1 Provavelmente você não encontrará este arquivo em sua árvore.

1 Veja o final da resposta para mais detalhes

Supondo que você tenha alguma maneira de conectar sua caixa à Internet:

Tente executar fw_update -v para instalar o firmware e garantir que os arquivos estejam no lugar certo e não corrompidos. Se você tiver sorte, é tudo que precisa fazer.

Se isso falhar, você pode tentar instalar o firmware a partir de pacotes ou portas (leia esta FAQ primeiro! ). Meu espelho local não tem nenhum pacote relacionado a urtwn , então você provavelmente precisará usar a árvore de ports.

Configure a árvore de portes, conforme explicado em FAQ , e execute make install como raiz de /usr/ports/sysutils/firmware/urtwn .

Se você não conseguir conectar sua caixa à Internet:

O firmware pode ser baixado manualmente a partir de http://firmware.openbsd.org/firmware-dist/urtwn-1.1p0.tgz . Pegue-o de lá, jogue-o em um pendrive e copie-o para a sua caixa do OpenBSD. Extraia o arquivo e mova os arquivos urtwn-* para /etc/firmware/ .

Se isso funcionar, é uma boa ideia executar fw_update -v quando você tiver conectividade de rede. Dessa forma, o firmware será monitorado e atualizado, se necessário, pelos scripts de manutenção do sistema.

Se tudo isso não ajudar, provavelmente você deve perguntar nas listas de e-mail . As pessoas de lá geralmente são amigáveis e prestativas se você fez sua lição de casa 2 .

2 O driver é mencionado algumas vezes em [email protected] . Por exemplo, havia alguns problemas relacionados a usb, verifique se algo pode estar relacionado ao que você vê antes de postar.

Adicionado:

Agora olhei para o código-fonte, e a única maneira de obter essa mensagem de erro é a função urtwn_load_firmware() , em sys/dev/usb/if_urtwn.c na linha 2194 :

   /* Read firmware image from the filesystem. */
   if ((sc->chip & (URTWN_CHIP_UMC_A_CUT | URTWN_CHIP_92C)) ==
       URTWN_CHIP_UMC_A_CUT)
           name = "urtwn-rtl8192cfwU";
   else
           name = "urtwn-rtl8192cfwT";
   if ((error = loadfirmware(name, &fw, &len)) != 0) {
           printf("%s: failed loadfirmware of file %s (error %d)\n",
               sc->sc_dev.dv_xname, name, error);
           return (error);
   }

A função loadfirmware() (em sys/dev/firmload.c ) gera o caminho /etc/firmware/urtwn-rtl8192cfwT e tenta carregar esse arquivo na memória do seu adaptador USB. Como não é possível encontrar o arquivo, você recebe a mensagem de erro que relatou.

    
por 17.07.2014 / 09:23