Página 1 de 1

Solución a los modems en Debian-like

Publicado: Lun, 28 Abr 2014, 14:07
por Wolf119
Hola comunidad, espero que todos estén bien, lo que les voy a explicar hoy aquí es sobre una mezcla de varias técnicas que al final me dieron resultado para el dichoso problema de los winmodem en Linux, específicamente en Debian y sus derivados. Esta solución la descubrí hace unos meses y hoy me di cuenta que no la había compartido con ustedes, como tampoco he compartido la de cómo hacer cluster de alta disponibilidad en Linux al estilo RedHat, pero bueno ya eso más adelante lo pondré en la Wiki, estoy esperando que me caigan en mis manos FreeBSD 10 para también hacerlo con él y ya dejar dos tutos en uno.

Bueno vamos a lo que nos interesa:

Primero deben de tener conocimiento de compilación de kernel, pues con este método hay que meterle las manos al kernel, pero sin miedo, que solo es una cosita :)

Segundo deben de tener conocimientos de hacer módulos de driver para Debian con el paquete module-assistant

Comencemos:

En el momento que lo hice el kernel que estaba usando era el 3.2.0-25-generic de Debain 7

Bueno una vez que tenemos el source de nuestro kernel extraído en /usr/src/”carpeta que contiene el kernel” (yo personalmente lo pongo aquí, porque así fue como aprendí, ustedes pueden descomprimir el source del kernel donde quieran).
Consejo: Si no sabes como obtener el source del kernel y tienes acceso al repo de tu distro, copia o bajate el .deb llamado linux-source-“versión del kernel”.deb que se encuentra siempre en el main principal de la rama de la distro que usas, ejemplo en Debian Wheezy estaria en wheezy/pool/main/l/linux/. Muchas se preguntaran, pero es un .deb no .tar.bz2, no importa dentro de ese .deb está el agua que le entra al coco haha usar este comando

Código: Seleccionar todo

dpkg --extract linux-source-“version”.deb / “directorio donde lo quieren extraer”
Este comando extrae todo lo que está dentro del .deb dentro de la carpeta donde lo extraigan van a /usr/src/linux-srouces-“version”/ “aquí está el deseado linux-sources-“version.tar.bz2”” :)

Fin del consejo.
Una vez descomprimido el código fuente en donde más ustedes deseen, en mi caso como ya dije en /usr/src/ y suponiendo que tenemos instalados los paquetes para compilar a la Debian Way y ubicados en el directorio donde tenemos nuestro sources del kernel aplicamos:

Código: Seleccionar todo

make config
(para los más vikingos, no recomendado)

Código: Seleccionar todo

make menuconfig
(para los usuarios estándar de linux)

Código: Seleccionar todo

make xconfig
(para los vagos como yo)

Bueno llego la parte 1 del arroz con pollo en este punto solo (para el tema que estamos tocando) nos interesa ir a:
Divece Driver>Network divece support>PPP(point-to-point protocol) support

Una vez estén parado encima de este parámetro y presionando “h” para ver la ayuda o si ejecutaron make xconfig lo estarán viendo por interfaz gráfica, les saldrá una explicación inmensa, pero solo nos interesa el último párrafo que dice:

If you said Y to "Version information on all symbols" above, then
you cannot compile the PPP driver into the kernel; you can then only
compile it as a module. To compile this driver as a module, choose M
here. The module will be called ppp_generic.

Bien traducción para aquellos que a esta altura no se han dado cuenta de lo importante que es saber Ingles y Carabuari :mrgreen:
Si usted dijera que Y (valor integrado en el kernel, la mayoría de las opciones del kernel tiene dos formas de compilar como integrado al kernel o como modulo) a la "Información de versión sobre todos símbolos" de arriba, entonces usted no podrá compilar los driver PPP dentro del kernel, usted puede únicamente compilarlos como un módulo. Para compilar estos driver como modulo, escoja M (modulo) aquí. El modulo se llamara ppp_generic.
Pues seleccionamos M aquí y listo nos vamos compilar el kernel.

Dentro encontraran más opciones específicas para el protocolo ppp si tenéis tiempo podéis ir viéndolas e ir desmarcando lo que no les interesa, yo lo deje todo marcada pues soy un vago y tengo que dividir mi tiempo entre la consola (juego), la novia, la familia de la novia (mi peor pesadilla), la universidad y mi propia familia (peor que la de mi novia) :lol:

48 horas después :shock: ya tenemos el kernel compilado (es broma :lol: )

Instalamos los dos .deb que nos devuelve la finalización de la compilación (image y headers)

Segundo paso y voy a explicar algo, tengo la suerte que en GUTL hace tiempo (4 años, cuando aquello la versión del foro era con tonos blancos y azules) descargue el código fuente de los driver para mi modem HSF, este código fuente ya venía preparado para ser recompilado como modulo y la gran mayoría de driver para Debian vienen en este formato, es decir cuando usted descomprima el código fuente de su driver vera que tiene una carpeta debian y una modules

Primero instalamos el module-assistant con nuestro querido

Código: Seleccionar todo

apt-get install module-assistant
Luego ejecutamos

Código: Seleccionar todo

m-a prepare
y el buscara en el la pc si le falta alguna librería, en caso de ser así, el automáticamente la descargara del repositorio.

En mi caso me paro en el directorio donde tengo el código fuente de los driver de mi modem y ejecuto

Código: Seleccionar todo

m-a build hsf
esto compilara un .deb con las cabeceras de mi kernel (que ya está listo para recibir los driver ppp como módulos) el cual contienen el modulo para mi kernel, lo que faltaría es instalar el paquete y cargar el modulo para usarlo

Código: Seleccionar todo

m-a install hsf
modprobe hsf
Y listo, no importa que versión de kernel tenga, mis driver que ya estaban precompilados para el kernel 2.6.x están funcionado en 3.2.x
Advertencias, esto es para hacer módulos de driver que ya vienen preparados para ser módulos de Debian y derivados, lo podéis identificar cuando descompriman el código fuente de sus driver y vean que existe la carpeta debian y module dentro. Esto también sirve para los driver de NVIDIA, ATI y derivados, siempre que modifiquéis en el kernel que los quieren como módulos.

También existe una manera de hacerlo para driver no preparados para Debian, pero como esta forma me funciono y mis driver por suerte (porque yo ni me había fijado en esto) ya venían preparados para la Debain Way, no tuve que buscar ninguna información para aprender hacer módulos con driver que no vienen preparado para Debian y derivados.
Espero que esto les sirva de referencia para que aquellos que salen huyendo de Linux porque no les funciona el modem o quiere ya de una vez dejar de convivir con Windows porque lo necesitan para poner navegar desde sus casa en la red.

En internet no encontraran casi ninguna información actualizada, lo más que sale es información para el kernel 2.6.x ya el modem telefónico que todos conocemos en Cuba es tecnología del pasado, solo se usa en lugar muy remotos para comunicar los paquetes de salida a un VAST (internet satelital) y este responde por un modem satelital (de hasta 8mb/s) que está conectado por LAN al pc, al final el pc se conecta por RJ45. En conclusión los únicos que siguen comprando módems(telefónicos) y revisando esta información en internet somos los cubanos. Espero que antes de morir el puerto RJ45 de mi máquina de escritorio pierda la virginidad por un router ADSL aunque sea :roll:

Fuentes:
- Mucho google
- http://www.mogaal.com/articulos/kernel-a-la-debian.html
- Manual para compilar un kernel, aplicar parches y compilar modulos para Debian, Ubuntos y derivados. Alejandro Garrido Mota <garridomota@gmail.com>
- Mi cerebro uniendo las piesas y provocandome fuertes dolores en las largas madrugadas de compilacion y cafe. 8-)

Re: Solución a los modems en Debian-like

Publicado: Lun, 28 Abr 2014, 14:26
por BishopWolf
esto está genial, hoy mismo le meto mano. Y yo que me pasé cerca de una semana tratando de recompilar los driver quitando la dichosa línea del kernel_lock!! hasta que me rendí T_T