Driver Smartlink corrigido para Kernel 2.6.13 em diante

O driver linux para modem Smartlink, disponível no http://www.smlink.com/content.aspx?id=135 tem apresentado problemas ao ser usado em qualquer distribuição com um Kernel 2.6.12 em diante. O driver não compila acusando um erro no arquivo modem.c e, mesmo depois que o erro dentro do código é manualmente corrigido, ele continua não funcionando, exibindo um erro ao carregar o módulo:

insmod: error inserting ‘/lib/modules/2.6.14-kanotix-6/misc/slamr.ko’: -1 Unknown symbol in module

Este erro é conhecido e afeta todas as distribuições recentes, baseadas no Kernel 2.6.12 em diante. A Smartlink ainda não disponibilizou uma versão corrigida do driver e nem existe previsão para isto, já que a última versão do driver foi lançada em abril do ano passado, quando o problema já existia.

Mesmo na lista do Kernel, a única referência sobre o problema é esta mensagem, que simplesmente recomenda o uso dos drivers open-source incluídos recentemente no Alsa (que funcionam apenas com algumas variações do chipset do modem, encontradas em notebooks com chipsets Intel e Ati e placas mãe com chipset nForce), sem indicar uma solução para o driver origianal: http://www.kernel-traffic.org/kernel-traffic/kt20041019_278.txt.

Pesquisando mais a fundo, encontrei dois patches distintos, um postado na lista do Fedora e outro no Linux-on-Laptops. Isoladamente, nenhum dos dois corrige o problema, mas combinando ambos é possível chegar a uma versão corrigida do driver, que funciona perfeitamente no Kernel 2.6.14 e, possivelmente, qualquer outra versão recente onde o driver regular apresenta o problema.

Aplicar os patches envolve modificar o código fonte da camada do driver que faz a junção com o Kernel, o que é trabalhoso. O primeiro patch pode ser aplicado diretamente usando o comando “patch”, enquanto o outro precisa ser aplicado manualmente. Outro problema é que, para que o driver funcione, é necessário alterar a linha com a licensa para “GPL”.

Isso é mais problemático (do ponto de vista legal) do que pode parecer à primeira vista. Nas versões atuais do Kernel, muitas funções estão disponíveis apenas para uso de módulos marcados como GPL. A alteração da licença dentro do código do driver burla isso, fazendo com que o driver da Smartlink seja tratado como se fosse um módulo GPL pelo Kernel, embora seja um módulo proprietário.

Tecnicamente, isto é uma violação tanto da licença da Smartlink, quanto da própria licença GPL, de forma que, embora você possa aplicar a modificação e gerar o módulo para uso pessoal, não é permitido redistribuir o módulo modificado. Você pode ver mais detalhes sobre esta parte legal aqui:

Este parece ser o principal motivo de não existir até hoje uma versão atualizada do driver. Para não violar a GPL, a Smartlink precisaria ou disponibilizar o código, transformando-o num módulo GPL (o que é improvável), ou modificar o driver de forma que ele não utilize nenhuma das funções restritas do Kernel (o que seria trabalhoso e provavelmente demorado). A única solução imediata é que cada um aplique as modificações e compile o módulo localmente, sem redistribuir o módulo gerado. Você pode ensinar seu amigo a compilar o driver, pode escrever um script para fazer isso automaticamente para ele, mas ele é quem deve apertar o botão. Bem, você já deve ter entendido o espírito da coisa ;).

Voltando à parte técnica, baixe o arquivo “slmodem-2.9.10.tar.gz” aqui:

Baixe o patch com as modificações aqui, salvando-o na mesma pasta que o driver:

Descompacte o arquivo do driver:

$ tar -zxvf slmodem-2.9.10.tar.gz

Aplique o patch (para mais informações sobre como funcionam os patches, leia: https://www.hardware.com.br/linux/dicas/114.htm):

$ patch -p0 < slmodem-2.9.10.patch

Agora acesse a pasta com o driver e compile da forma usual:

$ cd slmodem-2.9.10
# make
# make install

Para ativar o modem, inicie o slmodemd, instalado junto com o driver. Ele precisa ficar ativo, ao fechá-lo o modem deixa de funcionar, por isso o executamos incluindo o “&”:

$ /usr/sbin/slmodemd –country=BRASIL /dev/slamr0 &

Ao abrir o slmodemd é criado o dispositivo /dev/ttySL0. Crie o link /dev/modem apontando para ele:

# ln -sf /dev/ttySL0 /dev/modem

Depois disso tudo, só falta conectar usando o Kppp :).


Atualização
: Já está disponível uma versão atualizada do driver da Smartlink, no http://linmodems.technion.ac.il/packages/ que soluciona o problema descrito nesta dica. De qualquer forma, você pode usar as informações disponíveis aqui como ponto de partida para solucionar outros casos semelhantes.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X