Archivo de la etiqueta: puerto serie

Estoy intentando configurar un modem Smartlink en Ubuntu y no encuentro el paquete sl-modem-source

Recientemente me he comprado un modem/fax USB para sustituir al viejo modem serie que tenía. Obviamente, el modem en sí mismo no lo necesito para nada, pero sí me interesan las funciones fax. Por desgracia, los nuevos ordenadores tienden a venir sin puerto serie, lo que es un problema si pretendes usar un modem/fax, así que una posible solución es instalar un modem USB.

Yo compré uno de la marca Dynamode, teóricamente soportado por Linux, que lo identifica con el comando «lsusb» de esta forma:

[lacofi@selene]$ lsusb
Bus 011 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 010 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 009 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 003: ID 046d:c00b Logitech, Inc. MouseMan Wheel
Bus 007 Device 002: ID 046d:c317 Logitech, Inc.
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 002: ID 0483:7554 SGS Thomson Microelectronics 56k SoftModem 
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 005: ID 0718:1000 Imation Corp.
Bus 003 Device 004: ID 059f:1018 LaCie, Ltd
Bus 003 Device 002: ID 04b4:6560 Cypress Semiconductor Corp. CY7C65640 USB-2.0 "TetraHub"
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0424:2250 Standard Microsystems Corp.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 007: ID 04a9:220e Canon, Inc. CanoScan N1240U/LiDE 30
Bus 001 Device 006: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 001 Device 005: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 001 Device 004: ID 059f:1018 LaCie, Ltd
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Observa la línea marcada en cian y que habla de un Softmodem. Si sigues tirando del hilo a través de Google, verás que este modem lleva un chipset Smartlink, y que la instalación seguiría estos pasos:

[lacofi@selene]$ sudo su
password:
[root@selene]# apt-get install module-assistant
[root@selene]# module-assistant auto-install sl-modem
[root@selene]# apt-get install sl-modem-daemon

Y después reiniciamos el sistema.

Vale, todo parece muy sencillo, pero cuando lo hice en mi máquina, me encontré con que no existía el paquete sl-modem-source en los repositorios, y module-assistant abortaba la operación porque no tenía código fuente para poder compilar.

Y a eso iba. Resulta que sl-modem-source solo está disponible para los sistemas de 32 bits. Si utilizas la versión de Linux de 64 bits (lo sabrás porque en la salida del comando «uname -a» sale un misterioso «x86_64» por algún lado), no dispondrás de ese paquete y por tanto no podrás hacer funcionar tu modem Smartlink.

Se siente.

Una posible solución es hacer funcionar una máquina virtual VMware. Supongo que VirtualBox también sirve, todo depende del buen o mal soporte que tenga de USB. El caso es que a mí el modem funciona de perlas en VMware bajo un sistema invitado Windows XP Pro. Y supongo que no debería haber problemas tampoco para que funcionase instalando un sistema invitado Ubuntu Linux 32 bits. ;-)

Tarjeta Startech PCIe (PCI Express) con chip MSC9901

Con la compra de selene, me he llevado una pequeña sorpresa (aunque era bastante lógico, por otra parte): el ordenador no trae disquetera (eso es hoy bastante común), pero tampoco puertos paralelo ni puertos serie. Solo trae cuatro puertos USB y uno Firewire, todos en la parte trasera. Un poco escasito, la verdad.

Bien, el caso es que yo necesito muchos más puertos USB traseros, y alguno delantero para enchufar los lápices USB. Además, también necesito al menos dos puertos serie: uno para establecer comunicación con el SAI Trust y otro para mi modem/fax de MultiTech System. Mmmmh… no, el ordenador se conecta a Internet mediante una conexión de banda ancha a través de un puerto ethernet. Pero un anticuado modem/fax puede usarse también para enviar y recibir faxes con el escaner y la impresora, ¿no lo habías pensado?. :-D

Vale. Todos esos problemas pueden solucionarse fácilmente. En Ebay solo se necesita buscar un poquito y se encuentrar montones de soluciones baratas. Por ejemplo, en una tienda alemana (Sotel.de) se encuentra una tarjeta PCI Express USB DeLOCK que abre cuatro puertos USB traseros y un puerto USB interno. Funciona «out of the box» con linux. Vamos, que la instalas y no necesitas hacer nada más en Ubuntu. ;-)

En una tienda francesa (Konektikpc) se encuentra también un panel frontal USB de 3,5 pulgadas, que se conecta al puerto interno de la tarjeta DeLOCK y te abre cuatro puertos frontales USB adicionales. También funciona «out of the box», así que es conectar y listo.

Y en otra tienda francesa (Kalea Informatique), se encuentra una tarjeta PCI Express de marca Startech, con chip Moschip 9901, que proclama funcionar con linux. Es cierto, pero aquí te espera una desagradable sorpresa: no funciona «out of the box», sino que hay que instalar un driver aparte que probablemente no funcionará con tu kernel linux porque hace mucho que se ha quedado anticuado. Vamos, que el cacareado soporte linux es bastante nefasto. Ojo, no es culpa del vendedor que es bastante competente, sino del fabricante del chipset (Moschip), son cosas distintas. Así que tendrás que hackear el driver (bueno, modificar el código fuente a mano), compilarlo y instalarlo por tí mismo.

Afortunadamente, como suele ocurrir con Linux, ese camino ya ha sido recorrido por alguien y nuestro amigo eldiabolosk nos lo cuenta detalladamente. Lo que yo te explico aquí no es más que una traducción de lo que él dice, con alguna puntualización adicional y poco más. Así que las gracias dáselas a él, no a mi, ¿de acuerdo?.

Atención: Este truco solo funciona hasta cierto punto. Concretamente hasta el kernel 2.6.31. Por encima de ahí, más concretamente, con Ubuntu 10.04, NO HE CONSEGUIDO compilar los drivers, con lo que mi bonita tarjeta PCI Express se ha convertido en un bonito pisapapeles. Gracias, Moschip!!!!!!.  :-(((

Bien, abre una ventana de terminal y teclea el comando «lspci». Debería salir un listado en el que se hace alguna referencia a la tajeta PCI Express (PCIe) con chipset 9901. En mi caso, por ejemplo, sale esto:

[lacofi@selene ~]$lspci
(bla,bla,bla)
00:1f.3 SMBus: Intel Corporation 82801JI (ICH10 Family) SMBus Controller
02:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. Device 3403
03:00.0 Serial controller: NetMos Technology PCIe 9901 Multi-I/O Controller
03:00.1 Serial controller: NetMos Technology PCIe 9901 Multi-I/O Controller
03:00.2 Serial controller: NetMos Technology PCIe 9901 Multi-I/O Controller
03:00.3 Serial controller: NetMos Technology PCIe 9901 Multi-I/O Controller
(y sigue con bla,bla,bla)

Vale, esto es solo para asegurarnos y no equivocarnos de chipset.

Ahora, toma el disco de drivers que te venía con la tarjeta y busca en la carpeta de Linux, chipset 9901. Encontrarás un PDF con instrucciones (que puedes tirar) y un fichero starex.tar.gz que contiene los drivers. Si no lo encuentras, también puedes ir a la página del fabricante del chipset y bajarte el driver.

En cualquier caso, ahora cambia a un directorio (o crea uno especial para trabajar) y desempaqueta el fichero starex.tar.gz. Puedes hacerlo desde línea de comandos o a golpe de ratón, eso no importa, porque no necesitas hacerte root para desempaquetar ni para hackear el driver. Pero sí tendrás que volverte root para compilar e instalar el driver.:

[lacofi@selene ~]$ sudo mkdir /opt/starex
password:
[lacofi@selene ~]$ cd /opt/starex
[lacofi@selene /opt/starex]$ tar -xzvf /media/cdrom/MSC9901/MSC9901_Linux/starex.tar.gz
[lacofi@selene /opt/starex]$ ls
total 104K
-rwxr--r-- 1 root root  65K 2007-10-29 06:16 9900.c*
-rwxr--r-- 1 root root 5,0K 2007-11-08 12:40 9900.h*
-rwxr--r-- 1 root root 4,1K 2007-10-29 06:16 9900-isa.c*
-rwxr--r-- 1 root root 1,1K 2007-10-29 06:16 9900-isa.h*
-rwxr--r-- 1 root root  742 2007-10-29 06:16 Makefile*
-rwxr--r-- 1 root root   32 2007-10-29 06:16 mcs9900*
-rwxr--r-- 1 root root 2,3K 2008-02-11 15:58 readme*
[lacofi@selene /opt/starex]$ _

Correcto, esos son los ficheros del código fuente del driver. Ahora hay que modificarlos. El problema es que exigen un kernel muy antiguo, porque los drivers no se actualizan desde Fedora Core 7. Prueba a ver, solo por curiosidad, e intenta compilar:

[lacofi@selene /opt/starex]$ make

Si usas Ubuntu, por ejemplo, usarás un kernel mucho más nuevo de lo que el driver admite y no estará soportado. En ese caso, con el comando anterior te saldrán unos cuantos errores que dicen algo acerca de que «struct uart_info» no tiene ningún miembro llamado «tty». Habitualmente, ese error sale en las líneas 622, 852 y 957. Pero vamos a arreglar eso en un pis pas (ventajas del código abierto):

Edita el fichero 9900.c (por ejemplo con vim pero puedes usar el editor de texto que prefieras). Vale, pues ahora tienes que buscar y reemplazar. En todos los sitios en que aparezca esto:

port.info->tty

debe quedar así:

port.info->port.tty

No tiene pérdida, porque seguramente será en las líneas 622, 852 y 957, las mismas en las que salían los mensajes de error al compilar.

Ahora, en el mismo fichero 9900.c tienes que hacer otra búsqueda para reemplazar. En todos los sitios en los que aparezca esto:

SA_SHIRQ

con esto otro:

IRQF_SHARED

Ahora solo queda arreglar un poco el instalador, porque el driver está diseñado para Fedora y Ubuntu usa un sistema un poco distinto. Así que si usas Ubuntu edita el fichero Makefile. Vete al apartado «install:» y donde pone:

ln -s /etc/init.d/mcs9900 /etc/rc.d/rc3.d/Smcs9900 || true
ln -s /etc/init.d/mcs9900 /etc/rc.d/rc5.d/Smcs9900 || true

debe poner:

ln -s /etc/init.d/mcs9900 /etc/rc3.d/Smcs9900 || true
ln -s /etc/init.d/mcs9900 /etc/rc5.d/Smcs9900 || true

Por último vete al apartado «uninstall:» y donde pone:

rm -f /etc/rc.d/rc3.d/Smcs9900
rm -f /etc/rc.d/rc5.d/Smcs9900

debe poner:

rm -f /etc/rc3.d/Smcs9900
rm -f /etc/rc5.d/Smcs9900

Bien, ahora vuelve a compilar y después instala los drivers:

[lacofi@selene /opt/starex]$ sudo su
passwd:
[root]@selene /opt/starex]# make
rm -f *.mod.c *.o *.ko .*.cmd *.symvers
make -C /lib/modules/2.6.28-15-generic/build/
SUBDIRS=/opt/MCS9901_Linux/version1.6/starex modules
make[1]: se ingresa al directorio `/usr/src/linux-headers-2.6.28-15-generic'
  CC [M]  /opt/MCS9901_Linux/version1.6/starex/9900.o
/opt/MCS9901_Linux/version1.6/starex/9900.c:752:
aviso: se definió ¿transmit_chars_dma_stop_done¿ pero no se usa
  CC [M]  /opt/MCS9901_Linux/version1.6/starex/9900-isa.o
  Building modules, stage 2.
  MODPOST 2 modules
  CC      /opt/MCS9901_Linux/version1.6/starex/9900-isa.mod.o
  LD [M]  /opt/MCS9901_Linux/version1.6/starex/9900-isa.ko
  CC      /opt/MCS9901_Linux/version1.6/starex/9900.mod.o
  LD [M]  /opt/MCS9901_Linux/version1.6/starex/9900.ko
make[1]: se sale del directorio `/usr/src/linux-headers-2.6.28-15-generic'
(observa que no hay ningún mensaje de error)
[root]@selene /opt/starex]# make install
cp 9900.ko 9900-isa.ko /lib/modules/2.6.28-15-generic/kernel/drivers/serial/
depmod -A
chmod +x mcs9900
cp mcs9900 /etc/init.d/
ln -s /etc/init.d/mcs9900 /etc/rc3.d/Smcs9900 || true
ln -s /etc/init.d/mcs9900 /etc/rc5.d/Smcs9900 || true
modprobe 9900
modprobe 9900-isa
root@selene /opt/starex]# _

Vale, ahora ejecuta un comando dmesg y deberías ver que el listado termina con algo así:

starex-serial 0000:03:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
starex-serial 0000:03:00.0: setting latency timer to 64
0000:03:00.0: ttyD0 at I/O 0xd480 (irq = 17) is a starex-serial
starex-serial 0000:03:00.1: PCI INT B -> GSI 18 (level, low) -> IRQ 18
starex-serial 0000:03:00.1: setting latency timer to 64
0000:03:00.1: ttyD1 at I/O 0xd800 (irq = 18) is a starex-serial
43.650254] starex-serial 0000:03:00.2: PCI INT C -> GSI 19 (level, low) -> IRQ 19
starex-serial 0000:03:00.2: setting latency timer to 64
0000:03:00.2: ttyD2 at I/O 0xd880 (irq = 19) is a starex-serial
starex-serial 0000:03:00.3: PCI INT D -> GSI 16 (level, low) -> IRQ 16
starex-serial 0000:03:00.3: setting latency timer to 64
0000:03:00.3: ttyD3 at I/O 0xdc00 (irq = 16) is a starex-serial

Lo que viene a significar que se han abierto cuatro nuevos puertos serie desde /dev/ttyD0 hasta /dev/ttyD3, aunque como la tarjeta solo trae dos puertos reales, únicamente estarán operativos /dev/ttyD0 y /dev/ttyD1. Comprueba que han sido creados de verdad:

[root]@selene /opt/starex]# ls /dev/ttyD*
crw-rw---- 1 root dialout 200, 0 2009-10-05 02:18 /dev/ttyD0
crw-rw---- 1 root dialout 200, 1 2009-10-05 02:18 /dev/ttyD1
crw-rw---- 1 root dialout 200, 2 2009-10-05 02:18 /dev/ttyD2
crw-rw---- 1 root dialout 200, 3 2009-10-05 02:18 /dev/ttyD3

Los drivers deberían cargarse automáticamente en el arranque del sistema, pero si quieres asegurarte solo tienes que añadir una entrada al fichero /etc/rc.local que ponga esto:

/etc/init.d/mcs9900 start

Y solo un detalle más: Si actualizas tu Ubuntu a la versión 9.10, verás que lleva un kernel 2.6.31 y eso afecta a cómo son detectados los puertos serie: en este caso los puertos /dev/ttySx no se crean si no existen, y en su lugar los de la tarjeta se crean como /dev/ttySx en lugar de /dev/ttyDx. No tiene importancia, pero puede despistarte y tendrás que cambiar la configuración de los programas que utilicen el puerto serie.

Que lo disfrutes. Y te recuerdo que las gracias debes dárselas a eldiabolosk, no a mi. Con gente así, da gusto, la verdad. :-)

Configurar un SAI Belkin Active Backup en Gentoo

El SAI Active Backup 800VA de Belkin (BU308000ME) funciona perfectamente en mi Gentoo Linux, y posiblemente también puedan hacerse funcionar las versiones 600VA y 400VA, que son técnicamente equivalentes (solo cambia la potencia de la batería). Sorprendente, porque estos SAI incluyen un software propietario para Linux (WinPower) que resulta que no funciona, mientras que NUT, el software opensource que se supone que no soporta este SAI resulta que sí lo hace.

Tal vez te estés preguntando qué demonios es un SAI (si es así, seguramente es que no lo necesitas, pero en fin). Un SAI es un Sistema de Alimentación Ininterrupida. En inglés sus siglas serían UPS. Básicamente, podríamos decir que es una batería un poco sofisticada capaz de comunicarse con el ordenador por USB o por un puerto serie, para decirle por ejemplo cuánta energía tiene, e incluso darle órdenes a la máquina.

De esta forma, el ordenador ya no estaría enchufado a la red, sino al SAI, de quien se alimenta. También el monitor suele estar enchufado al SAI, y quizás también aquellos discos duros externos que consideres críticos en caso de que se vaya la luz en tu casa. El SAI, a su vez, está enchufado a la red eléctrica que usa para cargar constantemente la batería. Y también suele haber una conexión USB o serie entre el ordenador y el SAI que les permite intercambiar información.

Si la red eléctrica funciona sin problemas, el SAI no hace nada. Bueno, en realidad, sí que hace algo: modular y estabilizar la corriente eléctrica de tal forma que la alimentación al ordenador sea estable. Si hay un corte de luz, en cambio, el SAI salta inmediatamente y comienza a alimentar por su cuenta al ordenador, además de informarle de que está funcionando bajo batería. Esto le da tiempo al usuario a restablecer la energía (por ejemplo si ha saltado el diferencial de la casa). Si es un corte más serio, la energía de la batería suele dar tiempo suficiente para grabar todos los datos y cerrar todos los programas de forma ordenada. El Active Backup 800VA de Belkin, por ejemplo, me proporciona 15 valiosos minutos de autonomía en caso de fallo eléctrico, tiempo suficiente para grabar todo y resguardar todos los datos. Si el fallo eléctrico dura más tiempo que eso (o el ordenador está funcionando solo y no hay nadie en casa), cuando la batería empieza a quedarse agotada informará de ello al ordenador y se ocupará de darle una órden de apagado limpio (shutdown), con lo que la máquina cerrará todos los programas activos y después se apagará limpiamente.

Un SAI funcionando es sencillamente espectacular. Y se vuelve tanto más imprescindible cuanto más inestable sea la red eléctrica de tu casa.

Para configuar el Active Backup de Belkin, necesitamos el programa nut, que está incluido de serie en Gentoo. Pero no nos valdrá la versión estable, sino que necesitaremos la última versión en desarrollo para usar los mejores drivers. La versión 2.2.2 es estable y funciona perfectamente en mi ordenador, así que es la que te recomiendo, pero lo primero que tenemos que hacer es desenmascararla. Para ello, incluye en tu fichero /etc/portage/package.keywords la siguiente línea:

 
sys-power/nut ~86

Y ahora ya puedes instalar el software en tu Gentoo:

 
[lacofi@jeanne]$ su
password:
[root@jeanne]# emerge sys-power/nut

Para otras distribuciones, tendrás que usar la órden equivalente para instalar el software, pero asegúrate siempre de que instalas la última versión disponible. En mi caso, recomiendo la 2.2.2 o superior, aunque también podría valer la 2.2.0 pero no la 2.2.1, que a mí no me funcionaba por razones que no supe identificar.

Ahora tienes que configurar nut. Para ello tendrás que manipular varios ficheros de configuración. Pero lo primero de todo es saber qué driver nut es el correcto para tu SAI. En el caso de mi Active Backup de Belkin, el driver es el megatec_usb (ya te lo digo yo), pero para otros SAI te recomiendo que consultes la lista de fabricantes de la web de nut, aunque a veces tendrás que recurrir al «ensayo y error» o incluso suscribirte a la lista de correo de desarrolladores de nut y hablar con ellos, como hice yo. Son muy amables, y no dudarán en echarte una mano a poco que te molestes en darles datos suficientes sobre tu problema.

Vale. Pues una vez que sepamos el driver, hay que ponerlo en el fichero /etc/nut/ups.conf. En el mio, consta la siguiente información:

 
[belkin]
driver = megatec_usb
port = /dev/hiddev0
desc = "Active Battery Backup"

Los desarrolladores de nut me insistieron en que el driver megatec_usb no utiliza realmente el dispositivo /dev/hiddev0, pero aún así es bueno ponerlo, por si acaso esto cambia en un futuro. Además, hay que tener en cuenta que Gentoo no crea el dispositivo hiddev0 en /dev, sino en un subdirectorio aparte (/dev/usb), así que habrá que apuntar al sitio correcto en /etc/ups.conf o al menos manipular udev para que creen un enlace simbólico cuando enchufemos el SAI. Por ejemplo, podemos meter esta entrada en /etc/udev/rules.d/10-local.rules:

 
KERNEL=="hiddev0", NAME="usb/%k", GROUP="nut", SYMLINK+="hiddev0"

Después hay que reiniciar udev, claro.

Vale. Ahora tenemos que decirle a nut que acepte conexiones del ordenador local y rechace las demás. También podríamos decirle que acepte las de una red local concreta, pero en mi caso preferí que solo las admita de la propia máquina. Para ello, hay que poner esto en /etc/nut/upsd.conf

 
ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32

ACCEPT localhost
REJECT all

Ahora hay que decirle a nut qué usuarios pueden acceder y en qué condiciones. Para ello, hay que modificar el fichero /etc/nut/upsd.user y poner algo así:

 
[root]
password = <contraseña en plano>
actions = SET
instcmds = ALL

[lacofi]
password = <contraseña en plano>
allowfrom = localhost

Ahora tenemos que decirle al sistema automático de monitorización de nut cómo va a acceder al driver. Para ello, modificamos el fichero /etc/nut/upsmon.conf y ponemos algo así, para que acceda a la batería número 1 en localhost:

 
RUN_AS_USER root
MONITOR belkin@localhost 1 lacofi <contraseña en plano> master

El fichero /etc/nut/upssched.conf no hace falta configurarlo salvo que quieras algo muy concreto y complejo, así que paso.

Bien, pues ya está. Ahora solo que iniciar o reiniciar nut:

 
[root@jeanne]# /etc/init.d/upsd restart
 * Stopping upsd ...                    	[ ok ]
 * Starting upsd ...
Network UPS Tools upsd 2.2.2-exportado
listening on 0.0.0.0 port 3493
Connected to UPS [belkin]: megatec_usb-belkin   [ ok ]

Ahora abandonamos la cuenta root y le preguntamos al SAI qué tal le va la vida:

 
[root@jeanne]# exit
[lacofi@jeanne]$ upsc belkin@localhost
battery.charge: 97.5
battery.voltage: 13.60
battery.voltage.nominal: 12.0
driver.name: megatec_usb
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/hiddev0
driver.version: 2.2.2-exportado
driver.version.internal: 1.5.14
input.frequency: 50.1
input.frequency.nominal: 50.0
input.voltage: 228.9
input.voltage.fault: 228.9
input.voltage.maximum: 231.3
input.voltage.minimum: 225.0
input.voltage.nominal: 230.0
output.voltage: 228.9
ups.beeper.status: enabled
ups.delay.shutdown: 0
ups.delay.start: 2
ups.load: 43.0
ups.mfr: unknown
ups.model: unknown
ups.serial: unknown
ups.status: OL
ups.temperature: 25.0
ups.type: standby

Observa la línea que dice «ups.status: OL». Significa que el UPS (SAI) está «On Line», es decir, que recibe energía de la red eléctrica. Ahora puedes probar a desenchufarlo y ver qué te dice. O incluso dejarlo desenchufado 15 o 20 minutitos y ver cómo inicia la secuencia de shutdown. Que lo disfrutes. :-)

Y un saludo a Carlos, que hizo la pregunta correcta en el momento apropiado. ;-)

Tras actualizar mi kernel, compilar slmodem da errores «warning» y rechaza instalarse

Has compilado una versión reciente de tu kernel, y despues haces un «emerge slmodem» (en el caso de Gentoo). La compilación da varios errores tipo warning que no abortan el proceso, por lo que acaba compilándose de todas formas.

Sin embargo, cuando intentas instalar los drivers te encuentras con que el kernel dice que nones:

[root@lynette]# modprobe slamr
FATAL: Error inserting slamr (/lib/modules/2.6.15-kal/extra/slamr.ko): 
Unknown symbol in module, or unknown parameter (see dmesg)

Vale. Acudes a dmesg para ver que te dice, y te suelta esto:

[root@lynette]# dmesg
[bla bla bla...]
slamr: Unknown symbol class_simple_device_add
slamr: Unknown symbol get_device
slamr: Unknown symbol class_simple_destroy
slamr: Unknown symbol put_device
slamr: Unknown symbol class_simple_device_remove
slamr: Unknown symbol class_simple_create
slamr: Unknown symbol device_release_driver

¿Que significa esto y cómo se soluciona?. Bueno, lo que está pasando es que tu nuevo kernel ya no tiene determinados simbolos que slmodem necesita: en otras palabras, o tu kernel es demasiado nuevo o tu versión de slmodem es demasiado vieja. Tienes que reducir la versión del kernel, o instalar un slmodem más reciente.

Asumiendo que no quieres regresar a un kernel más viejo, solo te queda instalar una versión más calentita de slmodem.

En mi caso, este problema me surgió al actualizar a un kernel 2.6.15 para un slmodem 2.9.9d. El problema es que al hacer «emerge slmodem», esa era la versión que se instalaba. Asi que la solución en Gentoo es sencilla: hay que desenmascarar el paquete slmodem para permitir que se instalen las versiones más nuevas (e inestables):

[root@lynette]# echo "net-dialup/slmodem ~x86" >> /etc/portage/package.keywords &&
> emerge slmodem
Calculating dependencies ...done!
>>> emerge (1 of 1) net-dialup/slmodem-2.9.11_pre20051101 to /
>>> md5 files   ;-) slmodem-2.9.9d.ebuild
[etc... ]

Lucent Winmodem en Knoppix

Cuando estoy en casa, el ordenador portatil se conecta al de sobremesa y ambas comparten la salida a Internet repartiéndose el ancho de banda como buenas hermanas. Bien… esto puede hacerse usando una red Ethernet convencional o una red WiFi, que es lo más normal hoy en día. Pero además de conectarlos en red, se puede incluso conectar el portátil como «terminal tonto» del de sobremesa, con lo que éste último está siendo entonces usada por dos usuarios simultáneos, pero no voy a contar aquí ese tema, puesto que los chicos de Bulma ya lo han hecho muy bien (de hecho, ese truco lo aprendí de ellos).

El problema es cuando NO estas en casa. En ese momento el portátil no puede salir a Internet porque le falta su salida habitual a la red.

Los Toshiba Satellite 2100 CDS, como mi vieja moira, estaban equipados de serie con un módem interno, con el que podría conectar con otro proveedor. Pero se trata de un Winmodem, con lo que lo primero es conseguir que funcione en linux. :-(

Afortunadamente, el fabricante del modem es Lucent, que tiene el buen sentido de publicar drivers para linux, tanto en forma de módulos instalables, como en forma de código fuente.

Aunque cuando estaba en activo moira, Lucent incluía módulos para RedHat, Debian, etc… pero no para Knoppix.

Vale, ¿qué se podía hacer?.

Pues se podía instalar el código fuente, claro. Pero eso exige instalar las fuentes del kernel, entre otras cosas. Sin entrar en detalles, digamos que como que no me apetecía demasiado. Claro que Knoppix viene a ser una Debian testing, ¿no?.

Pues sí, lo es. Así que nos vamos a la página adecuada, seguimos el enlace con los drivers de Lucent (si nos deja, porque la última vez que lo intenté, me pedía un login y una contraseña para entrar). Luego nos bajamos el paquete Debian correcto y lo instalamos. Ya está, digo yo.

Pues no. Porque resulta que son módulos compilados para el kernel 2.4.20, y Knoppix usa el 2.4.20-xfs (uuuuyyyy…), con lo que si intentamos hacer un modprobe nos saltan todos los unresolved symbols y a freir espárragos. Eso, sin tener en cuenta que los módulos no están donde deberían…

Vale. La solución más fácil y rápida (también la menos ortodoxa) era forzar la carga de los módulos:

[root@moira lacofi]# insmod -f /lib/modules/2.4.20/ltmodem/lt_modem.o

Y nos contesta:

Warning: kernel-module version mismatch
/lib/modules/2.4.20/ltmodem/lt_modem.o was compiled for kernel
version 2.4.20 while this kernel is version 2.4.20-xfs
Warning: loading /lib/modules/2.4.20/ltmodem/lt_modem.o will
taint the kernel: non-GPL license - UNKNOWN
See http://www.tux.org/lkml/#export-tainted for information about
tainted modules
Warning: loading /lib/modules/2.4.20/ltmodem/lt_modem.o will
taint the kernel: forced load
Module lt_modem loaded, with warnings

(Que traducido, significa «¡Uy lo que me ha dicho!. Vale, no es muy ortodoxo y te aviso, pero lo hago»).

Ahora cargamos el segundo módulo (el orden es importante, al reves no lo admite):

[root@moira lacofi]#insmod -f /lib/modules/2.4.20/ltmodem/lt_serial.o
Warning: kernel-module version mismatch
/lib/modules/2.4.20/ltmodem/lt_serial.o was compiled for kernel
version 2.4.20 while this kernel is version 2.4.20-xfs
Warning: loading /lib/modules/2.4.20/ltmodem/lt_serial.o will
taint the kernel: forced load
See http://www.tux.org/lkml/#export-tainted for information about
tainted modules
Module lt_serial loaded, with warnings

Tras esto nos aseguramos de que exista el dispositivo /dev/ttyLT0, que es el que representa al propio modem. Si no es así, podemos crearlo a mano:

[lacofi@moira lacofi]$ ls /dev/ttyLT0
ls: /dev/ttyLT0: No existe el fichero o el directorio
[lacofi@moira lacofi]$ su
password:
[root@moira lacofi]# cd /dev
[root@moira dev]# mknod /dev/ttyLT0 c 62 64
[root@moira dev]# chown root.root /dev/ttyLT0
[root@moira dev]# chmod a+rw /dev/ttyLT0
[root@moira dev]# ln -s /dev/ttyLT0 /dev/modem
[root@moira dev]# exit
[lacofi@moira lacofi]$

También convendría crear un enlace /dev/modem apuntando a /dev/ttyLT0, porque muchos programas acuden automáticamente a /dev/modem cuando necesitan usarlo.

[root@moira rc5.d]# ln -s /dev/ttyLT0 /dev/modem

Sin embargo, comprobaremos que el enlace /dev/modem desaparece cada vez que rearrancamos la máquina. Esto ocurre porque lo borra el script /etc/init.d/knoppix-autoconfig, que es el que ejecuta toda la maravillosa autoconfiguración del Knoppix en el arranque. Bueno, pues solo hay que editarlo, irse a la linea donde dice:

# Delete obsolete links and files before starting autoconfig
rm -f /dev/cdrom* /dev/cdwriter* /dev/mouse* /dev/modem*
/dev/scanner* /etc/sysconfig/i18n /etc/sysconfig/keyboard \
/etc/sysconfig/knoppix 2>/dev/null

… y borrar lo que he marcado en color cian. Lo principal ya está. Ahora arrancamos el KPPP y veremos que detecta el modem y conecta sin problemas. Pero en mi caso, quería tener los módulos cargados desde el arranque, así que pongo en /etc/init.d un script llamado «ltmodem», con permisos de lectura y ejecución:

#!/bin/sh
insmod -f /lib/modules/2.4.20/ltmodem/lt_modem.o
insmod -f /lib/modules/2.4.20/ltmodem/lt_serial.o

A continuación se hace un link a /etc/rc5.d

[lacofi@moira lacofi]$ cd /etc/rc5.d
[lacofi@moira rc5.d]$ su
Password:
[root@moira rc5.d]# ln -s ../init.d/ltmodem S29ltmodem

Y esto fue todo. El módem siempre listo y la Red siempre a punto, por los siglos de los siglos… :-)

Naturalmente, todo esto es probablemente inútil a estas alturas, porque el tiempo ha pasado y tanto Knoppix como todas las demás distribuciones deberían soportar de serie los Winmodems Lucent. Así que la respuesta correcta probablemente sea: «actualiza tu sistema operativo, por Dios». Pero además porque moira ha muerto dejando su sitio a lynette. En cualquier caso, dicho queda para nostálgicos y curiosos a modo de ejercicio. Quizás le de alguna idea a alguien, con otro problema de hardware distinto, en Knoppix.