¡Oh no! ¿Dónde está el JavaScript? El navegador Web no tiene JavaScript activado o no es compatible con JavaScript. Active JavaScript en su explorador Web para ver correctamente este sitio Web o actualizar a un navegador Web que admita JavaScript.
Sabías que...
MadriDC (DCiberia - IberDC) Participa en RetroMadrid (MadridSX) desde 2005.

[Ubuntu] Tutorial instalación módems Conexant / Rockwell

Última actualización en 8 year hace
IndiketIndiketAdministrador
Publicado 12 year hace
He aquí otro tutorial largo y ameno, con lo que, querido lector, le recomiendo antes de empezar que se prepare su brebaje favorito... ya lo tiene en la mano? Bien, empezemos pues!

Introducción

Reconozcámoslo, el mundo Linux es muy delicado con el hardware. Muchos dispositivos sólo funcionan en Windows, y claro, los módems no iban a ser menos (llamados WinModems).
Muchísimos de estos WinModems usan el mismo chip (Conexant / Rockwell), y afortunadamente pueden ser usados en Linux, pero no es nada fácil.

Conexant no ofrece drivers para Linux, pero en cambio hay drivers comerciales de la casa Linuxant. Es un poco paradógico que, disponiendo de drivers gratuitos en Windows, se dediquen a comercializar los drivers en entorno Linux (la licencia cuesta $20 USD anual!). Además, por si no fuera suficiente, el fabricante Dell ha ido ofreciendo gratuítamente estos drivers... ¿lo entienden? Yo tampoco.

En resumen, los drivers sin licencia están limitados a 14.4Kbps... pero hecha la ley hecha la trampa. Sin embargo, el principal problema que encontraremos es que no hay paquetes .deb para las últimas versiones de Ubuntu, ya que además usan nuevos kernels. Así que, no nos toca más remedio que compilarnos nuestro propio módulo.

Más info y literatura recomendada: https://help.ubuntu.com/community/Dia...o/Conexant

Preparación

Para este tutorial estoy usando Ubuntu 12.10 (Quantal Quetzal), con el Kernel 3.5.0-21-generic (lo pueden consultar con el comando uname -r ).

Primero, actualizaremos nuestro OS y instalaremos los paquetes necesarios para empezar a usar el módem y poder compilar el módulo.


sudo apt-get update && sudo apt-get dist-upgrade
sudo apt-get install mgetty ppp wvdial
sudo apt-get install build-essential linux-headers-generic linux-source


Comprobad que tenéis un módem con chipset Conexant o Rockwell con los comandos lspci o lsusb:


Bus 006 Device 002: ID 0572:1300 Conexant Systems (Rockwell), Inc. SoftK56 Data Fax Voice CARP


Listos, ahora toca compilar el módulo génerico hsfmodem. La última versión en estos momentos es la 7.80.02.06. Para ahorraros complicaciones, os descargáis el adjunto:
- Es el módulo para x86, y ya parcheado para no tener limitaciones.
- Además, está modificado para que compile con el kernel 3.5x (no vale para kernel superior).

Si necesitáis para un kernel anterior (2.6, 3.0 o 3.1), os recomiendo visitar la siguiente Web (hay drivers para x86 y x64): http://www.naguissa.com/blog.php?verp...ntario=958

Compilación:


tar -xfzf hsfmodem-7.80.02.06_x86_full_3.5.tar.gz
cd hsfmodem-7.80.02.06_x86_full_3.5
sudo make clean
sudo make install
sudo hsfconfig


Cuando pregunte "Where is the linux source build directory that matches your running kernel?", simplemente pulsad Enter para aceptar la pregunta por defecto.

Si el último comando os da un error similar a éste: /usr/sbin/hsfconfig: Cannot find major device number for hsfdcp in range 240-249
Es un error conocido y explicado aquí: http://www.linuxant.com/pipermail/hsf...01543.html.
Para arreglarlo se ha de editar (como root) el archivo /usr/sbin/hsfconfig , buscar first= y cambiar el número (creo que pone 240) por 220. Después volvemos a ejecutar: sudo hsfconfig

Al final de la compilación, hsfconfig pregunta por el país. En mi caso, escribí SPAIN.

Si todo fue correctamente veréis una frase como esta: The /dev/modem alias (symlink) points to ttySHSF0 . Si ejecutáis el comando dmesg lo podréis comprobar:


[59190.782005] hsfengine: module license 'see LICENSE file distributed with driver' taints kernel.
[59190.782011] Disabling lock debugging due to kernel taint
[59192.564398] ttySHSF0 at MMIO 0x0 (irq = 0) is a Conexant HSF softmodem (USB-0572:1300)
[59192.600274] usbcore: registered new interface driver hsfusbcd2
[59194.416241] usbcore: deregistering interface driver hsfusbcd2
[59194.600064] usb 6-1: reset full speed USB device using uhci_hcd and address 2
[59194.811746] cnxthsf_DcpDestroy: units still active, waiting..
[59194.811764] cnxthsf_DcpDestroy: units still active, waiting..
[59194.811778] cnxthsf_DcpDestroy: units still active, waiting..
[59196.967466] ttySHSF0 at MMIO 0x0 (irq = 0) is a Conexant HSF softmodem (USB-0572:1300)
[59196.994150] usbcore: registered new interface driver hsfusbcd2


Simplemente ejecutad sudo wvdialconf y os detectará el módem. Ya lo podéis usar! :)

Notas finales:

IMPORTANTE: NO eliminar ni mover la carpeta de donde lo hemos compilado, ya que es necesaria para desinstalar el driver de la siguiente forma:


sudo hsfconfig --uninstall
cd hsfmodem-7.80.02.06_x86_full_3.5
sudo make uninstall
sudo make clean
No tienes acceso para ver archivos adjuntos
IndiketIndiketAdministrador
Publicado 12 year hace
Si algún aventurero quiere adaptar el módulo (a partir de la 3.0 que puse en el post anterior) para que compile con la 3.5, estos son los ficheros a modificar:

modules/GPL/oscompat.h

error: asm/system.h not found
Solución: A partir del kernel 3.4 este fichero se subdividió en 5 ficheros:


-#include <asm/system.h>
+#include <asm/barrier.h>
+#include <asm/switch_to.h>
+#include <asm/exec.h>
+#include <asm/cmpxchg.h>
+#include <asm/bug.h>
+#include <asm/auxvec.h>


modules/osusb.c , modules/cnxthwusb_common.c

error: implicit declaration of function 'err' [-Werror=implicit-function-declaration]
Solución: Reemplazar todos los err() y err (), por pr_err()


modules/osdiag.c , modules/osdcp.c

error: touch_atime has too many arguments
Solución: Comentar la función TOUCH_ATIME(file); (no es el mejor fix, pero es suficiente).
IndiketIndiketAdministrador
Publicado 8 year hace
NOTA: Intenté compilar para Ubuntu 16.04, con kernel 4.4. y arquitectura de 64 bits. No he logrado que funcione, simplemente que compile... ya que faltaría reescribir código para los nuevos kernels.

Para los más intrépidos en estos lares, quizá les sirva de referencia estas notas mías internas...

Crear los siguientes symlinks:

>> sudo ln -s /usr/src/linux-headers-4.4.0-24-generic/ /usr/src/kernel-headers-4.4.0-24-generic
>> sudo ln -s /usr/src/linux-headers-4.4.0-24-generic/include/linux/configfs.h  /usr/src/linux-headers-4.4.0-24-generic/include/linux/config.h
>> sudo ln -s /usr/src/linux-headers-$(uname -r)/include/generated/uapi/linux/version.h /usr/src/linux-headers-$(uname -r)/include/linux/version.h


Errores y posibles fixes de compilación:

modules/osservices.c
error: implicit declaration of function 'daemonize'
error: implicit declaration of function 'cpumask_of_cpu'
El error es debido a usar un kernel > 3.8. Sin arreglo por ahora...

error: implicit declaration of function 'rdtscl'
En kernels >= 4.3, da ese error que se soluciona cambiando:
"rdtscl(tsc)" por "tsc = (UINT32)rdtsc();"


modules/osstdio.c
Estas líneas no son válidas y se tendría que arreglar...
(33) new->fsuid = fsuid;
(83) origfsuid = current_fsuid();

Además, hay que cambiar en la línea 113 por:
inode = filp->f_path.dentry->d_inode;


modules/osusb.c
Utilizad esto para la función dbg:
#undef dbg
#define dbg(args...) printk(args)


modules/osfloat.c
Error: fatal error: asm/i387.h: No such file or directory
Este error también es por cambios en los últimos kernels. Cambiar el include por:
#include <asm/fpu/api.h>

Y cambiar esta definición (por confirmar):
union i387_union i387;
union fpregs_state i387;


modules/GPL/serial_cnxt.c
error: implicit declaration of function 'create_proc_read_entry'
Solución: es una función "deprectaed" del kernel y se tendría que cambiar el código para usar proc_create. Sin arreglo por ahora.


modules/mod_pcibasic2.c
modules/mod_usbcd2.c

error: expected '=', ',', ';', 'asm' or '__attribute__' before 'cnxthwpci_probe'
Fix para kernels >= 3.8 es quitar la palabra "__devinit " y "__devinit" en los ficheros cnxthwusb_common.c y cnxthwpci_common.c

¿Alguien se anima a intentarlo? xD
puede ver todos los hilos de discusión en este foro.
puede iniciar un nuevo hilo de discusión en este foro.
no puede responder en este hilo de discusión.
no puede empezar en una encuesta en este foro.
puede cargar archivos adjuntos en este foro.
no puede descargar archivos adjuntos en este foro.
Afiliados
SEGA Saturno - Saturn, SEGA y Videojuegos