ruydantas
(usa Kurumin)
Enviado em 17/04/2008 - 10:37h
Em
http://www.modemclub.com.br/linux/linuxsm562.html
http://www.modemclub.com.br/linux.cgi
deve ajudar.
Configurando o Modem Motorola SM56 no Linux ( PARTE II )
por Gilberto Nunes & Colaboradores
1.0 - SOBRE ESTE DOCUMENTO
2.0 - INTRODUÇÃO
3.0 - O QUE É NECESSÁRIO?
4.0 - INSTALANDO.
5.0 - SE SEU KERNEL É MAIOR QUE 2.4.5
6.0 - POSSÍVEIS PROBLEMAS
7.0 - CONCLUSÃO
1.0 - SOBRE ESTE DOCUMENTO
Este documento é distribuído gratuitamente, seguindo o FDL, e pode
ser distribuído e alterado, desde que você cite a fonte. Você é bem vindo se quiser colaborar.
2.0 - INTRODUÇÃO
A mais ou menos um ano e meio atrás, foi criado um artigo, e divulgado amplamente, sobre como
instalar e configurar o Modem sm56 da Motorola.
Na época, o kernel 2.4.0 havia acabado de ser lançado, e a Motorola lançou o driver para tal modem,
sendo que foi única e exclusivamente testado com o Red Hat Linux 7.1.
Acontece que, como é costume no mundo do Software Livre, as coisas andam depressa, e a cada semana e
a cada mês, surgem atualizações e correções.
Infelizmente, a Motorola não conseguiu seguir o mesmo ritmo, seja por falta de interesse ou por
qualquer outro motivo.
O que importa realmente, é que vários usuários ficaram sem suporte,quando viram que o driver não
funcionava nas versões de kernel mais novas e acima do 2.4.5.
Na época, recebi vários e-mail's e continuo a recebê-los, pedindo maiores detalhes sobre como
instalar e fazer funcionar tal modem.
Agora, com a ajuda de alguns amigos, finalmente é possível configurar o modem para que ele funcione
em um kernel diferente do 2.4.5.
Agradecimentos a todos aqueles que me enviaram e-mail e ao meu amigo Massimiliano Mirra.
Agradecimento especial a minha esposa Brenna. Ela é minha revisora oficial ;^).
3.0 - O QUE É NECESSÁRIO?
Inicialmente, a primeira coisa a fazer, é ver sob qual kernel seu sistema esta trabalhando.
Use o comando uname -r. Se este comando retornar um kernel menor ou igual ao 2.4.5, vai até
a página da Motorola (www.Motorola.com) e pegue o driver para o modem.
Caso o kernel seja maior do que o mencionado acima, vá para seção
"5.0 - SE SEU KERNEL É MAIOR QUE 2.4.5".
Outra coisa que você deverá observar, é ter um ambiente de desenvolvimento GNU instalado em seu
sistema, já que precisaremos dele para compilar o driver corretamente.
Verifique, com o comando rpm -qa | grep gcc, se o compilador GNU C está instalado.
Faça o mesmo para o cpp: rpm -qa | grep cpp.
Se você possuir um kernel acima do 2.4.5, você deverá ter as fontes do kernel do seu sistema insta-
lado, bem como o make, o automake, o autoconf, o tcl, e o ncurses, pois teremos que recompilar o kernel.
4.0 - INSTALANDO
Esta parte diz respeito aqueles que tem um kernel menor ou igual ao 2.4.5.
Uma vez efetuado o download e, como root, instale-o com rpm -ivh sm56xxxx-i386.rpm.
Após, digite man sm56 e procure por qual código o seu País se encaixa.
A lista é um pouco extensa:
1 = USA
2 = Canada
27 = South Africa
30 = Greece
31 = Netherlands
32 = Belgium
33 = France
34 = Spain
39 = Italy
41 = Switzerland
42 = Czech Republic
43 = Austria
44 = United Kingdom
45 = Denmark
46 = Sweden
47 = Norway
49 = Germany
52 = Mexico
54 = Argentina
55 = Brazil
57 = Columbia
58 = Venezuela
60 = Malaysia
61 = Australia
64 = New Zealand
65 = Singapore
66 = Thailand
81 = Japan
82 = Korea
84 = Vietnam
86 = China
90 = Turkey
351 = Portugal
352 = Luxembourg
353 = Ireland
354 = Iceland
358 = Finland
852 = Hong Kong
886 = Taiwan
962 = Jordan
972 = Israel
Depois que você instalar o driver, digite sm56setup, seguido do
código do seu País.
Naturalmente para nós que moramos no Brasil, o código escolhido será o 55.
Se este código for omitido será atribuído o código padrão: 1 (USA).
O comando sm56setup compila o módulo que controla o modem, adequado para seu kernel, que será
instalado em /lib/modules/[seu kernel]/kernel/drivers/char.
O comando também adequa o seu /etc/modules.conf, que ficará assim:
.......
.......
alias char-major-24 sm56
options sm56 country=1 ---> aqui poderá ser colocado o código apropriado.
Ele também cria um dispositivo em /dev, chamando sm56, criando um link para o /dev/modem, que aponta
para este dispositivo, bem como seta as permissões adequadas.
Digite modprone sm56 e pronto, seu modem está instalado!
Se seu kernel é superior ao 2.4.5, passe ao próximo tópico.
5.0 - SE O KERNEL É MAIOR DE 2.4.5.
Primeiramente, quero agradecer ao meu amigo Massimiliano Mirra, que me enviou esta dica.
Se você está usando uma distribuição moderna, como Conectiva Linux8.0, Red Hat Linux 8.0,
Mandrake Linux 9.0 ou Slackware Linux 8.1, saiba que o modem sm56 pode funcionar sob um kernel mais recente.
Estas distribuições citadas, a exceção do Mandrake Linux 9.0, trazem um kernel 2.4.18.
Para este documento, eu utilizei o Mandrake 9.0, com kernel 2.4.19.
Como comentado acima, será necessário fazer algumas alterações nas fontes do kernel e recompila-lo
para que o modem funcione corretamente.
Vá até onde as fontes do kernel estão instaladas (geralmente /usr/src/linux-2.4.X).
Entre no diretório mm.
Neste diretório estão as fontes para o tratamento da memória.
Procure por um arquivo chamado slab.c.
Este arquivo deve ser alterado.
Abra-o com seu editor de texto.
Não darei explicações do por que ele deverá ser alterado, pois não sou um craque em programação C,
mas acho que deve ter algo com relação com a alocação da memória pelo driver do Motorola.
Se alguém tiver alguma explicação e quiser enviar, será prontamente incluída nesta
documentação.
Vá até a linha 1116, e comente-a:
Ela está assim:
if (flags & ~(SLAB_DAM|SLAB_LEVEL_MASK|SLAB_NO_GROW))
BUG();
E deve ficar assim:
/* if (flags & ~(SLAB_DAM|SLAB_LEVEL_MASK|SLAB_NO_GROW))
BUG(); */
Depois disso, grave o arquivo e vamos compilar o kernel.
Digite make menuconfig.
Perceba que se você não tiver o ncurses instalado, este comando irá falhar.
Irá aparecer, depois de alguns momentos, um menu baseado em ncurses,com botões, caixas e diálogos,
para que possamos escolher as opçÕes do kernel.
Recomendo fortemente que você deixe o seu kernel o mais enxuto possível.
Por exemplo, escolha um processador de acordo com a sua máquina:se você tem um AMD, não faz
sentido escolher um Pentium MMX, pois alguns parâmetros do processador poderá fazer diferença.
Tire tudo o que não for necessário para sua máquina: bluetooth, PCMCIA, USB, entre outros, anão ser
que tais suportes sejam requeridos pelo seu sistema.
Outra idéia: se você não tem nenhuma placa de rádio e não planeja adquirir uma, não há
necessidade de compilar um módulo para suportar tal placa.
Outro suporte desnecessário em máquinas caseiras, é suporte a ATM, a FDDI (fibra óptica), WAN,
APPLETALK, IPX, DECNET, etc., quando não é um requisito essencial.
Retire tudo o que não seja estritamente necessário.
Depois de escolhidas as opções, tecle TAB, até cair na opção Exit.
Tecle ENTER e será perguntado se você quer salvar as alteraçÕes. Escolha SIM.
Agora digite make dep para criar as dependências necessárias para compilar o kernel.
Depois que o comando se completar, digite make bzImage, para construir a imagem do kernel.
Depois, digite make modules e make modules_install, para construir e instalar os módulos
do novo kernel.
Pode sair para um cafezinho agora, pois este comando poderá demorar, dependendo do porte de sua
máquina.
Terminado o comando anterior, o seu kernel estará em /usr/src/linux-2.4.X/arch/i386/boot, com o nome
de bzImage.
Copie-o para o diretório /boot, dando-lhe outro nome, como vmlinuz-custom.
Copie também o System.map, que está em /usr/src/linux-2.4.X/System.map, para o diretório /boot,
com um nome diferente, como System.map-custom.
No mesmo diretório, há um arquivo oculto chamando .config.
Digite ls -a, para visualizá-lo.
Copie-o também para o diretório /boot, com um nome diferente, como config-custom.
Entre no diretório /usr/src/linux-2.4.X/include/linux.
Copie o arquivo kernel.h, para o diretório /boot, com um nome diferente, algo como kernel.h-custom.
Agora, vá para o diretório /boot, e faça as alterações necessárias.
Apague os links seguintes:
rm -rf config, rm -rf System.map, rm -rf vmlinuz e rm -rf kernel.h
Crie agora os links para os arquivos novos:
ln -s config-custom config
ln -s System.map-custom System.map
ln -s vmlinuz-custom vmlinuz e por último
ln -s kernel.h-custom kernel.h
Agora, temos que alterar o arquivo /etc/lilo.conf, se você estiver usando o LILO, como gerenciador
de inicalização.
Ele deve se parecer com isso:
boot=/dev/hda
map=/boot/map
vga=normal
default=linux
keytable=/boot/us-latin1.klt
prompt
nowarn
#vga = 791
timeout=100
message=/boot/message
menu-scheme=wb:bw:wb:bw
image=/boot/vmlinuz ---------------------------
label=linux |
root=/dev/hda1 |
# initrd=/boot/initrd.img | -> É aqui que devemos fazer a alteração,
append="devfs=mount" | colocando o nome do kernel (vmlinuz).
vga=791 | Comente a linha initrd, pois ela diz
read-only ------------------------------ respeito somente ao kernel velho.
image=/boot/vmlinuz-seu-kernel-original-------------------
label=linux-nonfb |
root=/dev/hda1 | -> Mantenha esta linha, alterando
initrd=/boot/initrd.img | apenas o vmlinuz, para o nome com-
append="devfs=mount" | pleto do seu kernel velho.
read-only-----------------------------------------
other=/dev/hdb2
label=windows
table=/dev/hdb
map-drive=0x80
to=0x81
map-drive=0x81
to=0x80
other=/dev/fd0
label=floppy
unsafe
Se você estiver usando o GRUB, altere as linhas correspondentes.
Digite lilo, para que as alterações tenham efeitos.
É importante manter uma imagem do seu kernel anterior, pois se alguma coisa não der certo,
você terá como inicializar seu sistema.
Reinicie a sua máquina, e espere ela inicializar com o kernel novo.
Se tudo der certo, você deverá estar com seu kernel recém compilado.
Para ter certeza, digite :
cat /proc/version.
Deve aparecer algo do tipo:
Linux version 2.4.19-16mdkcustom (root@scoob.doo.com)
(gcc version 2.96 20000731 (Mandrake Linux 9.0 2.96-0.80mdk)) #1 Seg Dez 16 18:02:34 BRST 2002
Agora proceda da mesma maneira que no item 4.0.
Perceba que após o modprobe sm56, o driver não ficará mais com aquela mensagem de initializing.
Verifique isto com lsmod.
Pronto! Seu modem está funcionando.
NOTA: Recebi informaçÕes que no kernel 2.4.20 e superiores, não é necessário editar o arquivo
/usr/src/linux-2.4.20/mm/slab.c. Eu não o testei com este kernel ainda. Assim que testá-lo, estarei repassando,
ou alguém pode fazê-lo, certo?
6.0 - POSSÍVEIS PROBLEMAS.
I - Ao inicilizar, meu kernel diz "kernel panic ..... ". O que é isso?
Esta mensagem aparece se seu kernel foi compilado sem suporte ao seu sistema de arquivos do raíz.
Por exemplo, se sua raíz é XFS, e no kernel o suporte ao XFS é via módulo, compile seu
kernel como suporte XFS intrínseco. O padrão do kernel é assim:
<M> SGI XFS filesystem support
[*] Enable XFS Realtime support
[*] Enable XFS Quota
<M> Enable XFS DMAPI
Mude para:
<*> SGI XFS filesystem support
[*] Enable XFS Realtime support
[*] Enable XFS Quota
<*> Enable XFS DMAPI
Isto fará que o suporte ao XFS seja parte integrante do kernel, não precisando de nenhum módulo
ser carregado.
II - Minha máquina trava quanto executo o minicom ou outro aplicativo de dial-up. Por que?
Por motivos que desconheço, o modem Motorola não gosta de ter outra porta serial habilitada.
Entre no setup da sua máquina, e deixe somente uma porta serial habilitada, aquela correspondente
a seu mouse. Isso deverá resolver o problema.
III - Quando digito minicom ou uso o kppp, ele diz que o /dev/modem não existe. E agora?
Se o /dev/modem não existir, pode ter ocorrido alguma falha com o comando sm56setup.
Para não ter que executá-lo de novo, vá até o diretório /dev , e crie o links para o dispositivo
/dev/sm56: ln -s sm56 modem.
Caso tal dispositivo não exista, crie com o comando mknod /dev/sm56 c 24 0, e mude o dono/grupo e
as permissões, com o comando chown uucp.root /dev/sm56 e chmod a+rw /dev/sm56, respectivamente.
7.0 - CONCLUSÃO.
Bom eu acho que é isso.
Eu consegui fazer este modem funcionar em um Mandrake Linux 9.0, recompilando o kernel 2.4.19.
Acredito que você também pode fazê-lo. Obrigado a todos e continuem me mandando e-mail, pois farei
o possível para ler e responder a todos. Até +.
Gilberto Nunes
Contatos:gilbertonunes@yahoo.com.br
Colaboraram:
sandr8
sandr8@virgilio.it
Massimiliano Mirra
mmirra@libero.it