Depois de algumas "garimpadas", descobri que é possível obter total
rendimento do modem que usa o chipset 0eab:c893 no
Linux. Possuo o
Yiso S893V (Vivo Flash) e acredito que esta dica sirva para todos os
modems que utilizem este mesmo chipset.
Apesar de eu ser completamente leigo no assunto, é incrível o que se
consegue fazer visitando os fóruns da Comunidade.
Em uma primeira fase, havia descoberto que não se deve carregar o
driver genérico "usbserial", pois, de acordo com seu próprio autor, ele
não serve para estes dispositivos. Em vez disso, deve-se usar
um "mini-driver" de alto desempenho:
Depois descobri um problema de reconexão similar nos modems "Anydata" (em inglês):
E, utilizando o módulo "Option" da dica acima, voilá! Funcionou
corretamente!
No openSUSE 10.2 tive de recompilar o módulo para que ele reconhecesse o hardware. O fiz adaptando uma dica similar para o
módulo "Airprime":
Os passos que segui foram:
1. Antes de tudo, desconectar o modem, desativar definitivamente
qualquer automação para o driver "Usbserial" e ter instalado:
- kernel-syms
- kernel-source
- glibc-devel
- make
- gcc
2. Copiar o código original do driver um para arquivo de becape:
cp /usr/src/linux/drivers/usb/serial/option.c \
/usr/src/linux/drivers/usb/serial/option.c.orig
3. Alterar o arquivo "option.c", que continua existindo, nos seguintes
pontos:
(Personalizei a versão - a original neste caso é "v0.7.1":)
De:
#define DRIVER_VERSION "v0.7.1"
Para:
#define DRIVER_VERSION "v0.7.1-VOLteste"
(Incluí o código de fabricante)
Depois de:
/* Vendor and product IDs */
Incluir:
#define VFLASH_VENDOR_ID 0x0EAB
(Incluí o código de produto)
Como último texto antes da linha em branco que precede:
static struct usb_device_id option_ids[]
Incluir:
#define VFLASH_PRODUCT_ID 0xC893
(Acrescentei o dispositivo nas funções)
Depois de:
'static struct usb_device_id option_ids[] = {'
Incluir:
{ USB_DEVICE(VFLASH_VENDOR_ID, VFLASH_PRODUCT_ID) },'
Depois de:
'static struct usb_device_id option_ids1[] = {'
Incluir:
{ USB_DEVICE(VFLASH_VENDOR_ID, VFLASH_PRODUCT_ID) },'
E, para identificá-lo corretamente:
Em:
GSM modem (1-port)
Para:
GSM/CDMA modem
Com o arquivo alterado, entrar no diretório do fonte:
# rm -f option.ko
# make cloneconfig
# make modules_prepare
# cd $sdir/drivers/usb/serial/
# make -C /lib/modules/`uname -r`/build M=`pwd`
# depmod -ae
Correndo tudo bem, ao conectar o modem ele é automaticamente
reconhecido.
Porém, ao atualizar o kernel, devem-se repetir todos os passos. Cheguei a criar um shell-script para isso, mas ainda não pude testá-lo.
Esta é minha primeira dica, e espero que seja de valia para a
comunidade. É claro que comentários, principalmente informando sobre
como se fazer o passo a passo em outras distros, seriam muito bem
vindos!
Abraços.