http://www.zago.eti.br/modem/cl10-intel-537ep-kenel-2.6.10.txt tutorial: Instalar modem Intel(Ambient) - modelo 537EP no Conectiva Linux 10, com kernel atualizado para 2.6.10, instalação com CD updates1 Linha de: **************** separa mensagens ou tópicos. ******************************************************** Dica pra usar o path indicado no tutorial. Inclue um path pro kernel, pode usar o recurso de copiar e colar pra criar o arquivo, não pode ser manipulado em outros sistemas como DOS ou Windows, caso precise usar alguma instalação windows pra fazer download deste documento ou do path, então baixe também o path em formato tar pra copiar para a instalação Linux e depois descompactar, este path em formato tar está em: http://www.zago.eti.br/modem/patch-intel-537ep-kernel2620.diff.tar.gz O conteúdo do arquivo acima é o mesmo que está no final do tutorial abaixo. Pra descompactar na maquina que vai aplicar o path (instalar o modem), execute: tar -zxvf patch-intel-537ep-kernel2620.diff.tar.gz Explicando, o final de linha em DOS é diferente do Linux, pra conferir se está no formato Linux, execute cat -A nome-do-arquivo, o final da linha tem que terminar com o sinal "$", veja exemplo abaixo [zago@faqcl10 modem]$ cat -A patch-intel-537ep-kernel2620.diff diff -ur ../intel-537EP_secure-2.60.80.0/coredrv/softserial.c ./coredrv/softserial.c$ --- ../intel-537EP_secure-2.60.80.0/coredrv/softserial.c^I2004-07-30 17:57:27.000000000 -0300$ -----corta----- Explicando: Se você precisar intercambiar arquivos texto entre DOS/Win e Linux, cuidado com o problema do "fim de linha". No DOS, cada linha termina com CR/LF ("carriage return" e "line feed"), enquanto no Linux termina com LF. Se você tentar editar um arquivo texto do DOS no Linux, cada linha provavelmente terminará com um estranho caractere `M' ou ^M, o exemplo acima (cat -A) mostra o final de linha (^M$), o compilador interpreta estes caractares como inválido, pra evitar problemas, use o arquivo compactado. ******************************************************** De: Osvaldo Marques Junior Para: zagolinux@uol.com.br Assunto: "pro FAQ" modem/cl10-intel-537ep.txt Data: Thu, 21 Apr 2005 03:55:41 -0300 Olá, Ao tentar instalar o modem com chipset intel-537ep, no Conectiva 10 update 1, tive a já esperada e não grata frustração; isto foi na noite de anteontem, 19/04/2005. Saí de google em punho desesperado e uma das referências foi o seu faq. Conferi meus procedimentos pelo faq e nada encontrei de errado. Acabei esquecendo uma sessão de console no minicom e, após só encontrar decepções na internet, algumas seguidas de respostas que ninguém ousaria dar pessoalmente pois seria fácilmente agredido, pensando em pendurar a chuteira e colocar mais um winmodem na minha lista de insucessos, quando fui desligar o computador, percebi na sessão do minicom alguns "RING", mostrando que o modem estava vivo, pois ele avisou ao minicom quando o telefone tocou. De fato, a instalação do driver não podia ser mais polida; não havia uma mísera reclamação ao usar o modprobe. Se removesse o modem, o software reclamava, dizendo não encontrá-lo. Só faltava "falar com", ou melhor, "ouvir" o computador. Com o ânimo aquecido, voltei ao google, fiz novas buscas, encontrando novas ocorrências mas nenhuma com solução. Uma que me chamou atenção foi no mailing list da Red Hat, onde alguém citava que ao fazer update para o FC3, kernel 2.6.10 o modem deixou de funcionar; ao retornar para o kernel-2.6.9, tudo voltou ao normal. Reiniciei a máquina com o kernel 2.6.5, do CL10 original e o modem "ouviu". Começou a responder aos comandos. Instalei os fontes da versão "vanilla" 2.6.9 e 2.6.10 e fui comparar os drivers "char". Descobri que no fonte "generic_serial.c" a função de write para o driver serial foi alterado, sendo retirado o segundo parâmetro, cujo propósito seria determinar se a operação teria sido chamada pelo usuário ou pelo sistema. Como havia mais dois parâmetros importantíssimos, o "buffer" e a quantidade de caracteres a serem transferidos para o driver, o mesmo começou a receber o pointer do buffer como indicativo de usuário/sistema e a quantidade de bytes como pointer para a área de transferência. Com base nisso, fui procurar no resultado da compilação um warning que correspondesse à situação e lá estava ele na linha 125 do "softserial.c". Com base nisso, fiz um patch nesse fonte para, a partir da 2.6.10, criar uma função "wrapper" para receber 3 parâmetros e chamar a função que faz parte da biblioteca proprietária com os 4 que a mesma espera. Este patch deve ser aplicado sobre a versão não compilada "Modem Chipset Driver (Uncompiled) - INTEL-537EP-2.60.80.9.TGZ". Após descomprimir o pacote para um diretório, dar um cd para o mesmo e executar o comando: patch -p0 <"diretorio-do-patch/"patch-intel-537ep-kernel2620.diff Depois, é só executar as instruções do driver, ou seja: make clean make 537 make install Caso já esteja com o driver sem o patch instalado, recomendo um reboot para evitar de malhar em ferro frio, pois não examinei se os scripts de instalação tentam remover o módulo já instalado. Um abraço, Osvaldo. anexo Documento somente-texto (patch-intel-537ep-kernel2620.diff) diff -ur ../intel-537EP_secure-2.60.80.0/coredrv/softserial.c ./coredrv/softserial.c --- ../intel-537EP_secure-2.60.80.0/coredrv/softserial.c 2004-07-30 17:57:27.000000000 -0300 +++ ./coredrv/softserial.c 2005-04-21 01:43:34.638550808 -0300 @@ -47,6 +47,14 @@ //============================================================================= extern void core_init_module(void); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) +int softserial_write_wrapper (struct tty_struct *stt, const unsigned char *buf, int count) +{ + return(softserial_write(stt, 0, buf, count)); +} +#endif + int init_module(void) { int rc = 0; @@ -122,7 +130,11 @@ G.softserial_tty_driver.open = softserial_open; G.softserial_tty_driver.close = softserial_close; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) + G.softserial_tty_driver.write = softserial_write_wrapper; +#else G.softserial_tty_driver.write = softserial_write; +#endif G.softserial_tty_driver.put_char = softserial_put_char; G.softserial_tty_driver.flush_chars = softserial_flush_chars; G.softserial_tty_driver.write_room = softserial_write_room; ******************************************************** ********************************************************