segunda-feira, 19 de abril de 2010

Modem 3G Sony Ericsson MD300 USB no Linux

Marcio Barbado Junior
(BDS Labs)



Este é um tutorial prático para instalar no GNU/Linux o modem 3G, modelo MD300, fabricado pela Sony Ericsson para operar em sistemas operacionais proprietários.

Pode-se em certa medida, aproveitar este conteúdo para qualquer combinação entre uma distro e um modem 3G USB, fazendo-se pequenas adaptações nos passos descritos, que são especificamente focados no modem MD300 e em distribuições baseadas em Fedora/Red Hat e Debian.

É possível o utilizar com HSDPA, UMTS, EDGE e GPRS mas o equipamento não oferece suporte para chamadas de voz GSM. Também pode enviar e receber mensagens SMS. Tudo isso é fácil, considerando-se Windows e Mac OS.

Essas situações contudo causam "dores de cabeça" a usuários Linux, e muitos acabam deixando de utilizar o pinguim por não terem seu hardware devidamente reconhecido. Problema recorrente.

O caso é que usuários PJ (ou pessoa jurídica, empresariais) são grandes disseminadores de paradigmas tecnológicos, e o dispositivo da Sony Ericsson representa uma grande barreira à adoção do Linux na medida em que a operadora Claro vem sugerindo a seus clientes "corporativos" a utilização do modem em questão, o que inclusive constitui uma especie de venda casada, já que ao aceitarem a "sugestão", os clientes se vêem obrigados a possuir/adquirir uma licença paga de modo que possam usufruir do equipamento.

A questão toda se resume à constatação de uma estrategia velada, adotada por grandes players do mercado, que acaba por minar a confiabilidade do Linux.

Assim, as presentes linhas objetivam aliviar o incômodo e o desrespeito causado aos usuários do pinguim, e principalmente perseverar na batalha em prol da transparência de códigos E nessa missão, discorrem principalmente sobre udev e wvdial.

1 Introdução



Utilizou-se para redação destas linhas um sistema Fedora 10 de 64 bits, kernel "2.6.27.5". As adaptações para Debian são citadas sempre que preciso, e com pequenas alterações, o roteiro poderá resolver problemas de outras distribuições Linux que estiverem utilizando outros modems 3G USB.

Apesar do que afirmam alguns especialistas, versões de kernel posteriores à "2.6.19" podem encontrar dificuldades para entender um modem 3G USB [1].

No Brasil, o MD300 é utilizado principalmente em sistemas operacionais Windows e nesses, é gerenciado por um software proprietário chamado "Wireless Manager", que se instala automaticamente, "espetando-se" o modem.

Bem, a historia é diferente no Linux. O pinguim exigirá que se escreva uma regra de udev, e que se configure o wvdial para então aceitar e entender o equipamento.

A regra de udev elimina o problema da detecção automática da memória flash presente no equipamento, e ativa o dispositivo /dev/ACM0 ou seja, o udev permitirá que o MD300 seja devidamente reconhecido pelo sistema. O wvdial é um discador dial-up inteligente que será utilizado para fazer o modem funcionar com PPP (daemon pppd) após ser reconhecido.

É dito "inteligente" pois utiliza algoritmos heurísticos para obter a conexão Algumas vezes, tais algoritmos mais atrapalham do que ajudam.
São mostrados com simplicidade e detalhes, todos os passos necessários para suplantar as barreiras impostas pela Sony Ericsson aos usuários Linux. Tais dificuldades serão combatidas, e a rede da Claro será utilizada sem a necessidade de se conhecer o PIN e/ou o PUK do equipamento. Todavia, faz-se preciso o conhecimento de algumas informações elementares da operadora como o APN e o "número" para o qual ligar por exemplo.

1.1- Medidas preliminares


Caso se esteja utilizando o SELinux -- recomenda-se que sim -- coloque-o provisoriamente em modo permissivo até que o modem esteja funcionando corretamente. Isso é feito no arquivo /etc/sysconfig/selinux com a linha:

SELINUX=permissive

Outro ponto a se verificar diz respeito às presenças do kppp, gnome-ppp, wvdial e minicom, ferramentas que poderão ser usadas:

$ rpm -q kppp gnome-ppp wvdial minicom
ou:

$ which kppp gnome-ppp wvdial minicom

Caso não estejam presentes, deve-se ao menos realizar a instalação do wvdial embora os comandos abaixo instalem as três, que é a recomendação deste tutorial:

# yum install kppp gnome-ppp wvdial minicom
ou:

# apt-get -y install kppp gnome-ppp wvdial minicom

Uma medida a se tomar após as instalações diz respeito à permissão de escrita que os usuários devem possuir em:

/etc/ppp/pap-secrets
e:

/etc/ppp/chap-secrets
que são arquivos utilizados pelo wvdial.
O próximo passo é permitir que contas de usuário utilizem o wvdial pois o mesmo só pode ser executado pela conta root. Isso pode ser feito com o sudo, lembrando que o wvdial fica costumeiramente em /usr/bin/wvdial.

2- udev rulez! [2]



Constitui um percalço comum em distribuições Fedora / Red Hat e RHEL, a situação em que o sistema não consegue disponibilizar o modem automaticamente. Isso pode estar relacionado à memória flash contida no dispositivo, que provavelmente estará sendo detectada e montada automaticamente como uma mídia USB genérica no diretório /media/ (ou /mnt/ para distribuições baseadas em Debian).

O problema existindo, irá interferir na correta detecção do MD300. Pode-se detectar essa falha rapidamente se o sistema utilizar um ambiente gráfico, constatando-se o ícone MD300 no Desktop. E nesses casos basta dizer ao sistema operacional para não detectar a memória flash do modem como uma mídia USB.

Todavia, essa correção NÂO deve ser feita através do gerenciador gráfico de dispositivos USB ou editando-se o arquivo /etc/fstab. A questão é resolvida com o udev!

Sucessor do devfs, o versátil udev é um componente escrito em C, que opera dinamicamente sobre o diretório /dev/, local em que cria arquivos de dispositivos. É comum para dispositivos seriais, a utilização de arquivos do tipo tty*, exemplo:

/dev/ttyS3
ou:

/dev/ttyUSB0

O equipamento Sony Ericsson possui várias funções, capazes de ativar dispositivos no diretório /dev/ como, por exemplo:





FUNÇÃODISPOSITIVOEXEMPLO
rede/dev/eth[N]/dev/eth2
memória flash/dev/sdb[N]dev/sdb1
modem/dev/ttyS[N]/dev/ttyS1


A função memória flash, quando detectada, impede o correto uncionamento do MD300 mas o mesmo NÃO pode ser dito sobre a função de rede -- em geral dispositivo /dev/eth2.
Cabe destacar a existência de uma correspondência aproximada entre os padrões para portas seriais em UNIX e MS-DOS.
Enquanto o padrão de Redmond é COMn, com n iniciado em 1 -- or exemplo: COM1 --, o padrão UNIX é ttySn, com n iniciado em 0. No exemplo dado, /dev/ttyS0.
A tabela abaixo apresenta essa correspondência de forma mais detalhada:

















/dev/ttys0 (COM1)porta 0x3f8IRQ 4
/dev/ttys2 (COM3)porta 0x3e8IRQ 4
/dev/ttys3 (COM4)porta 0x2e8IRQ 3


Qual (ou quais) dos ttySn corresponde (ou correspondem) ao MD300?

Pois é: nenhum deles. A regra a ser escrita irá inibir o reconhecimento da memória flash e mostrar que para o MD300, o sistema operacional utiliza /dev/ttyACM0.

Faz-se a regra do udev através da criação de um arquivo de texto com sufixo .rules no diretório /etc/udev/rules.d/:

# vim /etc/udev/rules.d/50-md300modem.rules

Copia-se o conteúdo a seguir neste arquivo. Cuidado com as aspas simples e duplas ao copiar e colar. Confira se elas foram transportadas corretamente depois de colar:

ACTION!="add", GOTO="3G_End"
BUS=="usb", SYSFS{idProduct}=="d0cf", SYSFS{idVendor}=="0fce",
PROGRAM="/bin/sh -c 'echo 3 > /sys/%p/bConfigurationValue'"
LABEL="3G_End"


Os valores de SYSFS{idProduct} e SYSFS{idVendor} devem ser obtidas através do dmesg:

$ dmesg | grep usb

que apresentará em sua saída, tais informações:

usb 3-2: New USB device found, idVendor=0fce, idProduct=d0cf
usb 3-2: Product: Sony Ericsson MD300
usb 3-2: Manufacturer: Sony Ericsson


Criado o arquivo, reinicia-se o sistema operacional.

3- wvdial [3] [4]



Grosso modo, o wvdial (ou Weave Dial) é um discador escrito em C++ por Dave Coombs e Avery Pennarun, e licenciado sob a LGPL, que não é "viral" como a GPL, infelizmente.

O programa, que utiliza o protocolo PPP através do daemon pppd, deve ser utilizado pela conta root a princípio, e automatiza diversas tarefas, tornando desnecessário o conhecimento de PIN e PUK para a conexão.

Utilizado em linha de comando, caso não possua opções, o discador irá ler seu arquivo de configurações globais:

/etc/wvdial.conf


e em seguida, um dos arquivos das contas de usuário, que são:
~/.wvdial.conf

ou:

~/.wvdialrc


eventualmente presentes no diretório home do usuário
Os arquivos de configuração seguem o padrão .ini do Windows. Os nomes das seções estão entre colchetes e seus conteúdos são sequências de linhas no modelo:

variável = valor


Linhas comentadas são iniciadas pelo caractere "ponto e virgula", ou ";". Antes mesmo de se usar o wvdial pela primeira vez, é preciso executar como root o programa wvdialconf, que possivelmente identificará a porta serial do modem:

# wvdialconf /etc/wvdial.conf


Caso a ferramenta tenha êxito, o dispositivo referente ao MD300 será detectado e algumas informações básicas de configuração serão carregadas no arquivo global /etc/wvdial.conf, que em seguida deve ser editado com informações especificas:

# vim /etc/wvdial.conf


Utiliza-se o seguinte conteúdo no arquivo -- algumas linhas já terão sido preenchidas pelo wvdialconf:

[Dialer Defaults]
Modem = /dev/ttyACM0
Modem Type = USB Modem
Baud = 460800
Init = ATZ
Init2 = AT+CFUN=1
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init4 = AT+CGDCONT=1,"IP","bandalarga.claro.com.br"
Init5 =
Init6 =
Init7 =
Init8 =
Init9 =
Phone = *99***1#
Dial Command = ATM1L3DT
Username = claro
Password = claro
Stupid Mode = 1
Auto DNS = on
Check DNS = on
Check Def Route = on
Remote Name = *
Carrier Check = on
Auto Reconnect = on
Abort on No Dialtone = on
Dial Attempts = 3
ISDN = 0


Atenção com as aspas.

O exemplo é especifico para o MD300 e para a Claro. Valores à direita de = e algumas variáveis poderão mudar em acordo com o modem e a operadora utilizada. O comando:

$ man wvdial.conf

fornece mais informações sobre o devido preenchimento do arquivo /etc/wvdial.conf, procedimento este que após ser concluído, deve ser seguido de uma reinicialização do sistema operacional com o modem espetado, e então a conexão pode ser gerenciada pelo kppp e/ou pelo gnome-ppp; e/ou diretamente pelo wvdial:

$ sudo wvdial

e para se desconectar, caso tenha usado o wvdial, pressione Ctrl + c.

4- Soluções de problemas



Caso a conexão fique instável, é possível como root, verificar o que ocorre no sistema em tempo real com o tail, utilizando-se a opção -f (de follow) para seguir os últimos registros:

# tail -f /var/log/audit/audit.log

ou:

# tail -f /var/log/messages

Os registros do arquivo /var/log/audit/audit.log serão úteis caso o SELinux esteja ativado.

As seções a seguir cobrem os problemas mais comuns que podem aparecer com os procedimentos aqui descritos.

4.1- Arquivos de configurações do wvdial [4]



Talvez o leitor tenha optado por editar arquivos do usuário, que são o:

~/.wvdial.conf

e/ou o:

~/.wvdialrc

e o wvdial não o(s) esteja utilizando.

Isso se resolve colando todas as configurações supracitadas no arquivo global, chamado /etc/wvdial.conf.

4.2- Conecta mas o web browser não carrega conteúdo



Cabe salientar que em alguns casos a saída que o wvdial apresenta no terminal leva a crer que os servidores de nomes (DNS) foram devidamente obtidos, exemplo:

--> pppd: =
--> primary DNS address 200.169.119.221
--> pppd: =
--> secondary DNS address 200.169.119.222
--> pppd: =


O sintoma é o navegador reclamando de um endereço qualquer como www.google.com ou www.bdslabs.com.br. O conteúdo simplesmente não é exibido.
E, ao contrário do que possa parecer, talvez esteja ocorrendo um erro relacionado a DNS.

Isso pode ser verificado da seguinte forma. Caso seja possível pingar um IP (por exemplo, 200.169.119.221) mas não seja possível pingar um nome (por exemplo, www.google.com), então o problema é de fato a obtenção dos servidores de nomes, e a solução é adicionar as seguintes linhas no final do arquivo/etc/resolv.conf:

domain bandalarga.claro.com.br
nameserver 200.169.119.221
nameserver 200.169.119.222


Este procedimento corresponde à copia do conteúdo presente em /etc/ppp/resolv.conf no arquivo /etc/resolv.conf.
O arquivo /etc/ppp/resolv.conf possuirá os IPs mostrados na saída do wvdial.

4.3- Não é possível se descobrir a porta serial do modem



Uma opção para essa situação é utilizar o programa minicom [5].

Nativo em muitas distros, ele só pode ser configurado e testado em uma porta serial de cada vez. A configuração começa através do comando:

# minicom -s

que leva ao menu configuration no qual se escolhe a opção Serial port setup. Uma vez lá, modifique Serial Device e retorne ao menu. Escolha então Save setup as dfl e em seguida, Exit from Minicom. Execute o programa novamente:

# minicom

e digite:

AT

é esperada uma resposta OK; caso não se obtenha tal resposta, digite:

ATQ0 V1 EI

novamente, espera-se uma resposta OK. Caso ela não venha mesmo assim, refaça a configuração do minicom utilizando outro dispositivo e repita os testes.

Um programa que pode ajudar o minicom se chama setserial. Este, pode obter e modificar informações das portas seriais. O seguinte comando é um exemplo que obtem informações básicas sobre algumas delas:

# setserial -g -a /dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3

Uma saída típica do setserial pode ser:

/dev/ttyS0, Line 0, UART: unknown, Port: 0x03f8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test auto_irq

/dev/ttyS1, Line 1, UART: unknown, Port: 0x02f8, IRQ: 3
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test auto_irq

/dev/ttyS2, Line 2, UART: unknown, Port: 0x03e8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test auto_irq

/dev/ttyS3, Line 3, UART: unknown, Port: 0x02e8, IRQ: 3
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal auto_irq


5- Conclusões



Frequentemente se verifica a fabricação de equipamentos USB que funcionam apenas em sistemas proprietários Esta é uma das razões que prejudica a disseminação do Linux.

Particularmente, alguns fabricantes de equipamentos 3G como a Huawei, preocupam-se com sistemas operacionais livres. A Sony Ericsson infelizmente não faz parte desse grupo.

É possível contudo, combater esse desrespeito a usuários Linux através da devida modificação do sistema. E na maioria dos casos, isso se resume a escrever uma regra udev, configurar e utilizar devidamente o wvdial.

Contato



Marcio Barbado Jr. é empresário e ativista do Software Livre, sendo um dos proprietários da BDS Labs, em

http://www.bdslabs.com.br

Marcio possui larga experiência em programação, projeto e integração de sistemas.

E-mail para contato: contato@bdslabs.com.br

6- Referências



[1] LINUX MAGAZINE #63 (FEVEREIRO de 2010) - Pergunte ao Klaus
http://www.linuxmagazine.com.br/article/pergunte_ao_klaus_lm63
Visitado em 16/04/2010

[2] Entendendo o udev - Carlos E. Morimoto

http://www.guiadohardware.net/tutoriais/acessando-dispositivos-usb-escrevendo-regras/entendendo-udev.html

Visitado em 16/04/2010

[3] WvDial | freshmeat.net
http://freshmeat.net/projects/wvdial/
Visitado em 16/04/2010

[4] páginas man (manuais de utilização) wvdial e wvdial.conf
Visitado em 16/04/2010

[5] Modem-HOWTO -- 18. Troubleshooting
http://tldp.org/HOWTO/Modem-HOWTO-18.html
Visitado em 16/04/2010

Nenhum comentário:

Postar um comentário