Recentemente fiz a adesão ao
plano 3G de 1MB da
Brasil Telecom. Junto com o plano veio o modem
USB MG622 da ZTE, trata-se de um modem HSDPA/UMTS/EDGE/GPRS/GSM, ou seja, compatível com as definições 3G e 2G.
Perguntei à vendedora se suportava
Linux e a resposta não me surpreendeu:
"- Apenas Windows e MAC, sr."
Coloquei no Windows e conectou normalmente. Fui pesquisar e encontrei alguns blogs nacionais e internacionais que ensinavam a configurar no Linux.
Segui o
procedimento do Christiano Anderson e tudo ocorreu bem, a única diferença talvez seja o número a ser discado para a Brasil Telecom, que verificando os logs do modem no Windows, descobri que é *99***1#, apesar daquele conectar...
Conectei, porém notei que ficava mais lento no Linux. Pesquisando no Google descobri que realmente existe uma limitação usando-se o módulo usbserial generic, opção seria o módulo option do usbserial, mas para tanto seria necessário mexer no código.
Aplicando o patch
Descobri um
patch do Acme para o modem ONDA. Tendo por base o artigo, adicionei três linhas no option.c, recompilei e funcionou! Agora conecto a 1MB que contratei (ao menos de madrugada quando tem menos usuários).
Meu sistema é um Ubuntu 8.04 com kernel 2.6.24-19-generic.
A seguir, um passo a passo. Observe que requer algum conhecimento de Linux...
Instale os fontes do kernel e descompacte. No Debian e afins:
# aptitude install linux-source
# cd /usr/src/
# tar jxf linux-source-2.6.24.tar.bz2
Copie o cole o texto abaixo para o arquivo option.c.patch
--- option.c.orig 2008-08-02 00:51:48.000000000 -0300
+++ option.c 2008-08-02 03:15:52.000000000 -0300
@@ -120,8 +120,11 @@
#define BANDRICH_VENDOR_ID 0x1A8D
#define BANDRICH_PRODUCT_C100_1 0x1002
#define BANDRICH_PRODUCT_C100_2 0x1003
+#define ZTE_VENDOR_ID 0x19d2
+#define ZTE_PRODUCT_MF622 0x0001
static struct usb_device_id option_ids[] = {
+ { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622 ) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
Copie o patch para o local onde vamos trabalhar:
# cp /caminho/onde/salvei/oArquivo/option.c.patch /usr/src/linux-source-2.6.24/drivers/usb/serial
Aplique o patch:
# cd /usr/src/linux-source-2.6.24/drivers/usb/serial
# patch -p1 option.c < option.c.patch
Vá para o raiz do kernel e recompile:
# cd /usr/src/linux-source-2.6.24/
# make oldconfig
# make
Agora basta copiar o módulo para o diretório certo:
# cd /lib/modules/2.6.24-19-generic/kernel/drivers/usb/serial
# mv option.ko option.ko.old
# cp /usr/src/linux-source-2.6.24/drivers/usb/serial/option.ko .
Modifique a linha RUN+="/sbin/modprobe usbserial vendor=0x19d2 product=0x0001" do arquivo
/etc/udev/rules.d/15-zte-mf622.rules para:
RUN+="/sbin/modprobe option",
Reinicie o sistema e conecte!
Observe que os caminhos podem mudar um pouco para cada distro. O patch em questão é apenas para a versão 2.6.24 do kernel, mas basicamente adicionando-se as três linhas manualmente pode funcionar em qualquer versão.