Cómo compilar un núcleo de Linux …

1 07 2008

Un núcleo ( kernel ) es el componente central de muchos sistemas operativos. Sus responsabilidades incluyen el manejo de los recursos del sistema ( la comunicación entre hardware y software ). Podemos decir que es una capa importante en la arquitectura del sistema para la compatibilidad de los componentes que tenemos como herramientas para nuestro trabajo. Existen varios núcleos los que se diferencian tanto en estructura como en rendimiento, como por ejemplo el núcleo de BSD, el de Linux de Torvalds, el Hurd de GNU, el de Windows, etc …

En ocasiones perseguimos optimizar un sistema construyéndolo con las opciones más específicas posibles. Quizás por razones de limitaciones de recursos, o la necesidad de habilitar alguna opción específica que por defecto no viene construida en la mayor parte de las distribuciones, la configuración de los núcleos se presenta como una opción viable para la personalización y conocimiento de los componentes de nuestro ordenador.

Este artículo cubrirá solamente cómo configurar y construir un núcleo de Linux para las distribuciones GNU/Linux existentes.

Veremos algunas propuestas que podemos tener en cuenta como una guía para llevar a cabo esta tarea.

Identificación de Hardware y Software

Primeramente necesitamos tener conocimiento de los componentes del sistema donde correrá nuestro núcleo. Esto puede variar tanto desde un conocimiento mínimo como hasta uno detallado de nuestro ordenador, tanto para los componentes de hardware como de software ya que existen muchas funcionalidades que necesitan ser habilitadas en el núcleo para ejecutar determinados programas en un modo de operación conocido como “espacio de núcleo” ( kernel space ). Existen programas que nos pueden ayudar para averiguar el hardware existente en nuestra pc.

$ lspci
00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS/940GML  ...
00:01.0 PCI bridge: Intel Corporation Mobile 945GM/PM/GMS/940GML ...
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) ...
...
..
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC ...
00:1f.2 IDE interface: Intel Corporation 82801GBM/GHM ...
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) ...
01:00.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility X1400
03:00.0 Ethernet controller: Broadcom Corporation BCM4401-B0 100Base-TX ...
03:01.0 FireWire (IEEE 1394): Ricoh Co Ltd Unknown device ...
03:01.1 Generic system peripheral [0805]: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro ...
..
.
0b:00.0 Network controller: Broadcom Corporation Dell Wireless 1390 WLAN Mini-PCI Card (rev 01)

$ lsusb

Bus 005 Device 001: ID 1d6b:0002
Bus 004 Device 005: ID 413c:8126 Dell Computer Corp.
Bus 004 Device 007: ID 0a5c:4503 Broadcom Corp.
Bus 004 Device 004: ID 0a5c:4500 Broadcom Corp.
Bus 004 Device 006: ID 0a5c:4502 Broadcom Corp.
Bus 004 Device 001: ID 1d6b:0001
Bus 002 Device 003: ID 16d8:6803
Bus 002 Device 001: ID 1d6b:0001
Bus 003 Device 001: ID 1d6b:0001
Bus 001 Device 001: ID 1d6b:0001

Veremos los elementos más importantes para tomar en consideración y cómo podemos identificarlos en estas herramientas que usamos ( lspci y lsusb ). Necesitamos identificar el chipset de la placa madre ( Host bridge ), la tarjeta de audio que tiene ( Audio device ), la tarjeta de video ( VGA controller ), la tarjeta de red alámbrica ( Ethernet controller ), si existe alguna otra interfaz de red , en este caso es inalámbrica ( Network controller ), la capacidad de la memoria de nuestro sistema ( podemos verla con el comando free ), la capacidad del disco duro que tenemos ( con el comando fdisk -l ) y algún otro periférico específico que estemos usando ( tarjetas capturadoras de video, convertidores, etc … )

Proceso de configuración del núcleo

Una vez que conozcamos lo que tenemos en nuestra pc pasaremos a configurar el núcleo para luego poder construirlo. El mecanismo de configuración opera de forma tal que se separa el código del núcleo de su configuración considerándola un estado más del núcleo. Imagínense que pudiéramos tener varias configuraciones con solo portar los archivos de configuración tendríamos listo varios núcleos. Los archivos de configuración almacenan símbolos y estados para ellos. Los estados le dicen al núcleo cómo se debería compilar esa funcionalidad, como un módulo M, como un elemento interno Y o si no se debería construir N. Debemos tener en cuenta a la hora de construir el núcleo que si construimos alguna funcionalidad como un módulo ganaremos en espacio físico del mismo, pero perderemos en tiempo de carga ya que los módulos se demoran en cargar. Por otra parte incorporando las funcionalidades nos limita desde el punto de vista del espacio, algo que no puede ser factible en escenarios de dispositivos empotrados.

Para comenzar necesitamos elegir qué forma usaremos para configurarlo .

Forma Directa

Ya indirectamente sugerimos una, aunque es más complicada : podemos editar manualmente los archivos de configuración y habilitar las opciones que querramos. Bastará con cualquier editor de texto.

Ncurses

Tenemos otra forma de acceder a la configuración a través de una interfaz visual. Podemos usar una en modo consola basada en las bibliotecas ncurses que posibilitan hacer aplicaciones en modo texto con una alta interactividad.

# apt-get install libncurses5-dev

Para levantar la interfaz vamos al directorio donde reside el código fuente del núcleo que vayamos a compilar y ejecutamos:

# make menuconfig

Veremos una interfaz similar a esta en nuestra terminal:

Gconfig o Xconfig

Para aquellos que deseen usar interfaces visuales más interactivas existen opciones para ello. Podemos construir nuestro núcleo usando Gconfig basada en bibliotecas de GTK o con Xconfig construidas con las bibliotecas visuales de X directamente.

# make gconfig

Configuración del núcleo

En esta guía nos centraremos en las funcionalidades principales que harán que nuestro sistema corra correctamente en nuestra máquina. Nos concentraremos en los dispositivos que nombramos al principio : Procesador, memoria … etc … Existen guías dedicadas para la instalación de computadoras específicas, con configuraciones específicas. Ello no será tratado a continuación. Trataremos de brindar una guía de donde ubicar los recursos más utilizados así como de una filosofía útil de configuración y manejo de la construcción de un núcleo de linux a través de sus interfaces. Puede ser que en ocasiones se nos quede algún elemento por habilitar tras su construcción propiciando que nuestro sistema no arranque, o carezca de algunas funcionalidades. A medida que se configuren más núcleos se irá perfeccionando esta técnica y aprendiendo de sus componentes.

La configuración en las interfaces se presenta como una jerarquía de elementos por la cual podemos ir navegando y activando las funcionalidades que querramos utilizar. Existen en ocasiones interrelaciones que no podemos obviar y que en ocasiones nos pueden traer problemas si no conocemos bien el dispositivo que querramos habilitar. Trae además una ayuda contextual que nos puede asistir para decidir si incluimos o no algún recurso en nuestro núcleo.

Siempre que empecemos es aconsejable localizar los elementos críticos de nuestro sistema, habilitarlos y luego ir en busca de la optimización ( si es esto lo que queremos ). Debemos notar que algunos elementos vienen habilitados por defecto, generalmente los de uso más común. En la jerarquía están clasificados según su rol en el sistema, basta simplemente buscar los que queramos configurar y trabajar sobre ellos, por ejemplo:

Processor type and features // Procesador y memoria
Networking // Soporte para sistemas con conectividad ( redes, bluetooth, infrarojo, etc ... )
Device Drivers // Soporte para controladores de dispositivos ( discos SATA, sonido, gráficos, dispositivos I/O, etc ... )
Filesystems // Involucra los sistemas de archivos que usaremos ( ext, vfat, ntfs, nfs , etc ... )

Parches y actualizaciones

En algunas ocasiones en el proceso de desarrollo de un núcleo surgen momentos para los cuales es necesario crear elementos autocontenidos que presentan mejoras, actualizaciones, resoluciones de fallas, o adiciones de funcionalidades nuevas al código. Estos elementos se denominan parches. Básicamente contienen una estructura similar a esta:

parche.patch

Index: archivo
===================================================================
--- archivo
+++ archivo

Texto constante

- Texto a eliminar
+Texto a añadir

Como notarán trabaja mediante un proceso de eliminación y adición de elementos. Al aplicarse sobre un archivo este localizará el cambio y lo aplicará. Para aplicarlo ejecutamos el siguiente comando asumiendo que nos encontramos en la carpeta del archivo a ser aplicado:

# patch < parche.patch

Construcción

Luego de la configuración de un núcleo pasaremos a su construcción. Un núcleo termina siendo un archivo compactado que se ubica generalmente junto a los archivos de arranque del sistema y es llamado por una entrada en el listado del gestor de arranque que utilicemos. Mostraremos dos vías aquí para su construcción la vía tradicional para todas las distribuciones y la vía de Debian utilizando make-kpkg

Vía estándar

Comenzaremos con un comando que creará las interdependencias necesarias en nuestro árbol de núcleo y lo limpiará de construcciones previas:

# make dep && make clean

Luego pasaremos a construir el archivo contenido:

# make bzImage

Luego pasamos a construir los módulos del núcleo:

# make modules

Copiaremos entonces nuestro núcleo construido en el directorio de arranque ( por lo general /boot )

# cp arch/i386/boot/bzImage /boot/nuevo_nucleo

Instalamos los módulos en /lib:

# make modules install

Instalamos el núcleo:

# make install

Luego construimos una imagen initrd. Por sus siglas en inglés es un sistema de archivos temporal usado por el kernel Linux durante el inicio del sistema. Es usado típicamente para hacer los arreglos necesarios antes de que el sistema de archivos raíz pueda ser montado.

# cd /boot
# mkinitrd -o initrd.img-nuevo_nucleo nuevo_nucleo

En este caso usamos el gestor de arranque GRUB. Editamos el archivo /boot/grub/menu.lst y añadimos nuestro módulo para que sea usado en un futuro arranque:

title           Núcleo Nuevo compilado
root            (hd0,1) // Debe ir el identificador de la partición donde está la raíz del sistema
kernel          /nuevo_nucleo root=/dev/sda3 ro i386 // Debe ir el nombre del dispositivo de la raíz
initrd          /boot/initrd.img-nuevo_nucleo
savedefault
boot

Y listo …

Vía Debian

El equipo de Debian provee de un mecanismo más simple para la construcción de un núcleo con el comando make-kpkg:

# apt-get install kernel-package

Cuando tengamos configurado el núcleo simplemente ejecutamos:

# make-kpkg --initrd kernel_image

Su resultado será un archivo .deb ubicado en la carpeta padre a la actual y que al instalarlo nos ubicará el núcleo construido en su ubicación final y nos creará automáticamente su llamado desde el menu.lst. Si consultan el manual del comando verán que puede ser usado para generar cabeceras, números de revisión, versiones, etc …

Una vez instalado veremos que una copia del archivo de configuración terminará en /boot/config. Si quisiéramos aplicar esa u otra configuración para otro código de un núcleo utilizando la interfaz ncurses por ejemplo usamos:

# cp /boot/config.nucleo_nuevo /usr/src/linux-source/.config
# make oldconfig menuconfig

Debemos tener en cuenta que cualquier modificación que podamos hacer a nivel de núcleo puede traer implicaciones en el funcionamiento de nuestro sistema operativo. Los procesos que corren a este nivel son considerados críticos es por eso que debemos tener cuidado con lo que habilitemos y lo que no. La ayuda contextual sirve de mucho para ello. Veremos que con más práctica iremos dominando esta técnica.

Referencias:

Wikipedia
Guía de compilación

Advertisements




Guía de instalación de Debian en VIT D2010

14 05 2008

En este artículo hablaremos un poco sobre el modelo de esta laptop y sobre cómo se le puede instalar Debian con soporte para los dispositivos que trae.

CPU: Intel Core 2 Duo 2 GHz
Chipset: Intel 965M
Red inalámbrica: Intel 3945
Red: Realtek 8111/8168 Gb
Audio: Intel 8280 ICH8
Video: Intel 965
Firewire: Sí
Bluetooth: No
Lector SD: Sí
Modem: Sí

Video

Aún no se ha podido configurar.

Red Inalámbrica

La red inalámbrica que trae este modelo es una Intel Wireless 3945. Iremos a este vínculo

Audio

El audio se instala bastante fácil. Por defecto en la mayoría de los núcleos debe venir habilitado. Si no lo tenemos comprobemos que tenemos este símbolo en el núcleo:

CONFIG_SND_HDA_INTEL

Bibliografía

http://intellinuxwireless.org/Intel Wireless
Intel Graphics





Debootstrap ….

29 04 2008

Aquí veremos cómo montar un sistema auxiliar para uso o pruebas usando la herramienta que provee Debian GNU/Linux llamada debootstrap. Como reza su manual de uso debootstrap puede ser usado para instalar Debian en un sistema sin un disco de instalación al igual que puede ser usado para ejecutar variantes del sistema en un ambiente controlado por chroot. Así podremos crear una instalación mínima o completa de un sistema Debian con fines de prueba o de uso.

El comando chroot levanta una terminal interactiva para un directorio raíz específico. Más adelante veremos algunos elementos de su funcionamiento. Para comenzar instalaremos ambas herramientas:

# apt-get install debootstrap

Comenzaremos por montar el sistema en un directorio determinado. Para el ejemplo nos conectaremos a debian.org e instalaremos un sistema base estable:

# mkdir /opt/bootstrap_test
debootstrap stable /opt/bootstrap_test http://ftp.debian.org/debian

Esto comenzará a instalar el sistema base en la carpeta que especificamos. Luego que termine podremos comenzar a usar nuestro sistema:

# chroot /opt/bootstrap_test

Veremos que nos situa en una terminal. Esta terminal se encuentra dentro de nuestra máquina virtual ( por llamarla de algún modo ). Chroot lo que hace es sustituir la raíz ( / ) del sistema por la estructura de directorios que hayamos creado en alguna ubicación del sistema.

Enlace de dispositivos

Notaremos que cuando intentamos utilizar algún dispositivo del sistema anfitrión desde el sistema cliente estos no aparecen en el directorio. Como ambos sistemas se ejecutan sobre una misma máquina partiremos de la afirmación que los dispositivos para ambas serán los mismos. Por tanto simplemente crearemos enlaces entre los dispositivos en la máquina anfitriona y la cliente. La vía que usaremos será con el fstab. Haciendo un enlace simbólico con ln no es suficiente, ya que estos apuntan a direcciones relativas o absolutas que se modifican una vez que entremos en nuestra máquina cliente. Sin embargo el fstab trabaja a nivel de dispositivos y persiste de forma más conveniente para hacer este tipo de enlaces. Añadimos al fstab:

/dev /opt/bootstrap_test/dev none bind 0 0
/proc /opt/bootstrap_test/proc none bind 0 0
/tmp /opt/bootstrap_test/tmp none bind 0 0

Esto nos enlazará no solo los dispositivos sino también la carpeta temporal /tmp y la carpeta donde se muestra información sobre servicios en el sistema /proc.

Aplicaciones visuales

Otro elemento que nos puede ayudar para poder trabajar en nuestro ambiente controlado es habilitar la ejecución de aplicaciones visuales. Quizás notemos que cuando tratamos de ejecutar alguna aplicación visual recibimos este error:

Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
(:31539): Gtk-WARNING **: cannot open display:

Para poder utilizar el servidor gráfico corriendo en la máquina anfitriona podemos ejecutar un comando que habilita los permisos para la máquina cliente. En el ejemplo habilitaremos para que se puedan realizar conexiones desde todas las máquinas. Si se desea una permisología más detallada pueden consultar el manual de uso de la aplicación. Esto lo ejecutaremos en la máquina anfitriona:

# xhost +

Al ejecutarlo nos notificará que el acceso se ha habilitado para todas las máquinas.

Arranque del sistema

Cuando tengamos nuestro sistema encapsulado preparado podemos continuar utilizándolo desde su entorno controlado o podemos también ponerlo a correr en nuestro sistema. Quizás el usuario haya querido probar alguna funcionalidad nueva y cuando esté decidido a ponerla en uso quiera que su sistema anfitrión tenga esa imagen del sistema cliente. Para ello debemos ubicar nuestro sistema cliente en otro dispositivo en nuestro sistema. Por ejemplo veremos cómo puede estar estructurado nuestro sistema:

$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             19228308  16364452   1887104  90% /
tmpfs                   517412         0    517412   0% /lib/init/rw
udev                     10240       108     10132   2% /dev
tmpfs                   517412         0    517412   0% /dev/shm
/dev/sda2               139999     22850    109920  18% /boot
/dev/sda4             46878848  26403112   7586448  68% /home
/dev/sda5             10000000         0  10000000   0% /opt/bootstrap_test

Noten como la “/” está asignado a un dispositivo en este caso /dev/sda3. Podemos crear nuestro sistema debootstrap en otro dispositivo como aparece al final en el listado. Luego modificaremos el arranque de nuestro sistema y asignarle al arranque que cargue con el núcleo instalado y con esta raiz nueva. En el ejemplo usamos el gestor de arranque GRUB. Para ello iremos a /boot/grub/menu.lst:


title           Debian GNU/Linux, kernel 2.6.24.3-e1505-
root            (hd0,1)
kernel          /vmlinuz-2.6.24.3-e1505- root=/dev/sda3 ro i386
initrd          /initrd.img-2.6.24.3-e1505-
savedefault

title           Debian GNU/Linux, kernel 2.6.24.3-e1505- (single-user mode)
root            (hd0,1)
kernel          /vmlinuz-2.6.24.3-e1505- root=/dev/sda3 ro i386 single
initrd          /initrd.img-2.6.24.3-e1505-
savedefault

Noten como se especifica “root=xxxxx” como el sistema raiz a cargar. Simplemente lo modificamos para que acepte nuestro nuevo dispositivo:

.
.
.......  root=/dev/sda5
.
.
.......  root=/dev/sda5
.

Reiniciamos, y listo !!! tendremos nuestro nuevo sistema corriendo. Si por alguna razón no levanta editamos el gestor de arranque cuando arranque el sistema, modificamos la línea referente al root y restauramos los valores anteriores.





Compilación distribuida …

20 04 2008

Para los que desarrollen notarán que muchas veces empleamos una cantidad de tiempo determinada a la hora de construir nuestro proyecto. Puede llegar incluso a parecer bastante, más aún si el número de dependencias de nuestro proyecto es alto y cada una en sí compleja. Existen herramientas que nos pueden auxiliar para optimizar el tiempo de compilación de nuestro proyecto. A continuación expondremos algunas conocidas y cómo usarlas:

distcc

Quizás una de las que más nos pueda ayudar sea distcc ( Distributed C/C++ Compiler ). Sirve para distribuir la construcción de nuestro proyecto de C, C++, Objective C ú Objective C++ a través de un grupo de ordenadores o incluso en nuestra misma máquina. Lo mejor que tiene es que no necesita que todas las máquinas en el grupo de compilación tengan el mismo sistema de archivos, relojes sincronizados, las mismas bibliotecas o cabeceras instaladas, arquitecturas o incluso el mismo sistema operativo. Sí requiere que se use el mismo compilador en todas. Para esta guía se utilizó el compilador gcc de GNU que nos ayudará en cuanto a la portabilidad si montaremos la compilación a través de distintas arquitecturas o sistemas. Para comenzar:

# apt-get install distcc distccmon-gnome

El programa distccmon-gnome nos ayudará a monitorear el proceso de compilación a través de las máquinas.

El distcc opera a modo de cliente/servidor. En la máquina que recibirá el paquete a compilar estará escuchando un servidor: distccd y en la máquina que pide el servicio se usará un cliente: distcc.

Servidor

Para montar el distcc como servidor podemos auxiliarnos del fichero de configuración /etc/default/distcc que se instala con el paquete:

STARTDISTCC="true" # define si levanta el servicio con el arranque del sistema
ALLOWEDNETS="xxx.xxx.xxx.xxx" # Redes permitidas, escucha en estas redes para compilar
LISTENER="127.0.0.1" # Interfaz desde el cual escuchará, por defecto es local 127.0.0.1

Luego:

# /etc/init.d/distcc restart

Si no podemos lograr levantar el servidor mediante el demonio por esta vía podemos usar la línea de comando directamente. Tomando como referencia los datos anteriores el comando quedaría así:

# distccd --daemon --allow xxx.xxx.xxx.xxx

Cliente

Para correr el cliente tenemos variantes todas explicadas en el manual de uso de distcc:

# man distcc

Existen 3 modos de uso de distcc. Sólo se recomienda usar uno, y no mezclar variantes. Aquí explicaremos solamente 2.

Modo máscara

El primero se llama módo enmascarado ( masquerade mode ), y lo que hace es interceptar las llamadas al compilador ejecutándose él por defecto. Lo bueno de esta vía es que tendremos disponible siempre implícitamente el distribuidor para compilar en otras máquinas lo que nos propicia que podamos compilar distribuidamente con todas las herramientas posibles, lo malo es que si no nos encontramos en un ambiente cerca de otras máquinas el distribuidor tratará de resolver la compilación por su cuenta. Es aquí donde quizás sea útil definir la variable DISTCC_FALLBACK. Por defecto el distribuidor si falla en otra pc, tratará de compilar localmente. Podemos eliminar ese modo de operación con:

# export DISTCC_FALLBACK=0

Para habilitar el modo máscara crearemos un directorio en el cual redireccionaremos los vínculos a los compiladores reales en nuestra pc, luego declararemos ese directorio en la variable PATH que define rutas globales para los recursos en la pc. Aquí definiremos la ruta nuestra antes que las restantes para que trate de buscar los compiladores en la ruta definida y no en la ruta real. De este modo enmascaramos su uso. Quedaría así:

# mkdir /usr/lib/distcc/bin
# cd /usr/lib/distcc/bin
# ln -s ../../../bin/distcc gcc
# ln -s ../../../bin/distcc cc
# ln -s ../../../bin/distcc g++
# ln -s ../../../bin/distcc c++

Luego editamos el fichero /etc/bash.bashrc para añadir la ruta antes de las reales. Quedaría así la línea referente a la variable PATH:

if [ -d /usr/lib/distcc/bin ]; then
export DISTCC_HOSTS="distcc"
export PATH=/usr/lib/distcc/bin:$PATH
fi

La variable DISTCC_HOSTS define las máquinas en las que enviaremos la petición de compilar.

Modo explícito

El segundo método se vale en definir a la hora de compilación todas las directivas para distribuir la compilación. Necesitamos declarar dos variables para ello. La primera es DISTCC_HOSTS que vimos anteriormente. La segunda se le pasa como un argumento a la herramienta que esté compilando:

$ make -j8 CXX="distcc"

Esto es un ejemplo de cómo se puede llamar. La opción j8 declara cuantos trabajos de compilación como máximo se deben ejecutar. Por defecto cada núcleo de procesamiento procesa 2 trabajos en paralelo. Para los casos que compilaremos en una pc con 2 núcleos tendremos un máximo de 4 trabajos máximos.

Mientras se esté compilando podemos ejecutar el distccmon-gnome que mostrará una ventana con el estado del proceso.





Guía de instalación de Debian en Haier H53

20 04 2008

En este artículo hablaremos un poco sobre el modelo de esta laptop y sobre cómo se le puede instalar Debian con soporte para los dispositivos que trae.

CPU: Intel Core Duo 1.83GHz
Chipset:ATI RC410ME + ATI SB450
Red:Asus WL159G
Audio: -
Red: -
Video: ATI integrated x200
Firewire: No
SD: -
Bluetooth: No

La tarjeta ATI Integrated x200 puede instalarse por dos vías. Se pueden utilizar los controladores libres o los controladores que brinda su empresa. Recomendaremos los controladores de la compañía ya que brinda hoy en día mejor soporte para aceleración y gráficos 3D. Para ello simplemente consulte el sitio de la ATI en la sección de dispositivos, y baje el correspondiente al modelo.

Controlador

Una vez que lo hayamos bajado e instalado en el sistema siguiendo su guía de instalación, ejecutaremos esto para terminar de configurar la tarjeta:

# aticonfig --initial -f

Luego reiniciamos el servidor gráfico del sistema. Podemos cerrar la sesión y ejecutar desde la terminal:

# /etc/init.d/gdm restart

En el ejemplo se usó gdm pero pueden sustituirlo por su manejador de entrada preferido. Una vez que iniciemos veremos si está activada la aceleración gráfica de nuestro entorno visual:

$ glxinfo | grep rendering

El cual debe imprimir algo como esto:

direct rendering: Yes

Red

El modelo de red que usa este ordenador es un Asus wl159g. El controlador libre que provee la comunidad se llama zd1211rw. Este se comenzó a incorporar al núcleo a partir de la versión 2.6.18-rc1 y para su funcionamiento es necesario habilitar estos módulos:

CONFIG_IEEE80211
CONFIG_IEEE80211_SOFTMAC
CONFIG_FW_LOADER
CONFIG_ZD1211RW

Como muchos módulos de red disponibles necesitaremos además la firma del fabricante o firmware para que se pueda usar el módulo. En el sitio de desarrollo zd1211rw recomiendan no usar el firmware que provee el grupo de Debian zd1211-firmware. Y usar este firmware. Una vez que lo tengamos podremos instalarlo en una ubicación en nuestro sistema que por lo general es /lib/firmware aunque puede variar entre sistemas.

Audio

El audio se instala bastante fácil. Por defecto en la mayoría de los núcleos debe venir habilitado. Si no lo tenemos comprobemos que tenemos este símbolo en el núcleo:

CONFIG_SND_HDA_INTEL

Programas

Gracias a la colaboración de un usuario de la comunidad allá en Cuba que pudo resolver un tema que quizás mejore en próximas versiones del núcleo con respecto al soporte para dispositivos electrónicos en esta laptop. El problema se puede manifestar a la hora de visualizar el estado de la batería de la pc. Añadimos al gestor de arranque la opción “nohpet” que posibilitará que el núcleo cargue con soporte acpi especial.





Energía desde nuestros ordenadores …

4 04 2008

El tema aunque pueda parecer poco significativo, presenta una vía importante para proveer un desarrollo sostenible para cualquier entidad, región, empresa, o grupo poblacional. La energía a nivel mundial se presenta incluso como un conflicto de monopolios que tratan de imponer un sistema de consumo irracional con tal de obtener ganancias a costa de la salud y el bienestar de los seres humanos. Todos podemos desde nuestro pequeño rincón donde vivimos, o trabajamos ayudar a que gocemos de mayores beneficios, con más energía para desarrollarnos y a un menor costo tanto económico como biológico.

Ya centrándonos más en el tema de la informática, podemos notar que varios fabricantes han tomado en cuenta esta situación no sólo por las implicaciones que pueda traer para una población un mayor consumo de energía sino también por otros intereses como son el aumento de la autonomía de equipos electrónicos, el aumento de la vida útil de ellos ya que si consumen menos se calientan menos y pueden perdurar más …

Navegando podremos conseguir un sitio en el que se trata este tema, directamente hasta nosotros, hasta nuestra computadora. El fabricante internacional Intel ha desarrollado un espacio donde se pueden dar cita desarrolladores, usuarios y consejeros en esta materia. Lesswats.org se inclina por promover el ahorro de energía en ordenadores con GNU/Linux y según sus estadísticas han logrado aportes significativos de hasta aumentar casi 1 hora más la autonomía de un ordenador que use una batería.

De este y otros sitios se reunieron un grupo de guías para que los usuarios puedan aplicar en sus ordenadores de manera tal de que logren hacer un uso más consciente y eficiente de sus recursos energéticos.  A continuación están las 12 guías rápidas para la configuración de su estación.  Para leer el documento completo lo pueden descargar de acá:

Guia Tecnica para optimización de sistemas GNU-Linux

Guía rápida:

1- Los medios que se adquieran deben cumplir con alguno de los estándares sobre eficiencia energética y de no tenerlo que tengan alguna

funcionalidad similar de ahorro.

2- Utilizar para estaciones de trabajo arquitecturas x86 y amd64 y para servidores x86, amd64 e ia64.

3- Incorporar tecnologías Intel para soluciones de procesamiento general.

4- Emplear técnicas de disipación eficientes mediante el uso de sistemas de disipación por aire, ventiladores de voltaje regulados y uso de pastas o sustancias conductoras para la unión de los disipadores con los componentes. El ordenador debe ser limpiado con cierta frecuencia en su interior para evitar la acumulación de agentes externos que puedan obstruir piezas móviles y debe ser ubicado en una zona de baja temperatura en su local de operación.

5- Utilizar técnicas de saltos de frecuencia para los procesadores y emplear la metodología “correr hasta pausar” por ser la más eficiente en la generalidad de los casos.

6- Modificar el sistema para que, en momentos en que no se trabaje, la frecuencia de las tarjetas gráficas se mantenga al mínimo posible y se deshabiliten las salidas que no se utilicen.

7- Obtener discos duros de discos giratorios para las estaciones y utilizar el mayor número de técnicas posibles para su optimización.

8- Configurar el servidor gráfico para que suspenda y apague el monitor acordemente según el tiempo de inactividad de la máquina.

9- Utilizar en lo posible la opción de ahorro de energía en tarjetas de audio Intel en el caso de que la placa que se use la traiga.

10- Evaluar el ambiente de despliegue de nuestro sistema y en base a los servicios que se brinden allí, configurar la red cableada para operar a velocidades acordes deshabilitando también el encendido remoto.

11- Conseguir en la medida de las posibilidades adaptadores de redes inalámbricas Intel para poder habilitarles sus funciones de ahorro. Así como apagar todos los faros bluetooth encendidos innecesariamente.

12- Configurar la máquina para que hiberne o entre en suspensión cuando esté sin utilizarse





Guia de instalación de Debian en Dell Inspiron e1505 / 6400

26 03 2008

En este artículo hablaremos un poco sobre el modelo de esta laptop y sobre cómo se le puede instalar Debian con soporte para los dispositivos que trae.

CPU:Intel Core Duo T2400 1.83GHz 2Mb Cache
Chipset:Intel Mobile 945GM
Red:Broadcom 1390 Wireless
Audio:Intel ICH7
Red:BCM4401-B0 100Base-TX
Video:ATI Radeon x1400 Mobile
Firewire:IEEE 1394
SD:Ricoh Co Ltd Cache
Bluetooth:Sí

Video

La tarjeta ATI Radeon x1400 puede instalarse por dos vías. Se pueden utilizar los controladores libres o los controladores que brinda su empresa. Recomendaremos los controladores de la compañía ya que brinda hoy en día mejor soporte para aceleración y gráficos 3D. Para ello simplemente consulte el sitio de la ATI en la sección de dispositivos, y baje el correspondiente al modelo.

Controlador

Una vez que lo hayamos bajado e instalado en el sistema siguiendo su guía de instalación, ejecutaremos esto para terminar de configurar la tarjeta:

# aticonfig --initial -f

Red

La tarjeta de red que trae la configuración en cuestión es una Broadcom. Estas tarjetas a través del tiempo han sufrido modificaciones en los controladores usados en software libre. Todos los chips Broadcom requieren una firma del fabricante o ( firmware ) que se carga en él antes de su funcionamiento. Hay variantes que podremos usar en base a lo que el usuario desee configurar. Las veremos paso a paso:

Ndiswrapper

Una opción que podremos usar es instalando el módulo de ndiswrapper el cual crea un encapsulador para el controlador de binarios no nativos al sistema GNU/Linux como son de Microsoft Windows o MacOs. Primero debemos compilar el módulo correspondiente:

# apt-get install module-assistant ndiswrapper-common ndiswrapper-utils

Luego compilaremos el módulo y lo instalaremos siguiendo la interfaz del module-assistant. Una vez compilado, podremos utilizar el programa para extraer del controlador el firmware y comenzar a usar la tarjeta. Para ello debemos localizar el binario que contiene dicho controlador. En los discos de instalación de la laptop se llama R151517.EXE. Lo descompactamos con:

# unzip R151517.EXE

Luego para instalar el controlador:

# ndiswrapper -i bcmwl5.inf

Para empezar a utilizar la red cargamos el módulo correspondiente y lo añadimos al /etc/modules para que levante cuando arranque el sistema:

# modprobe ndiswrapper && echo "ndiswrapper" >> /etc/modules

Los próximos métodos que expondremos son muy similares en su modo de operación y han sido organizados a partir de la versión del núcleo 2.6.24 dentro de su código. De usar alguno es necesario habilitar:

CONFIG_MAC80211=m
CONFIG_IEEE80211_SOFTMAC=m

De todas formas no es un requisito indispensable usarlo, pueden usar los módulos por separado. Hay variantes que exigen un número de versión obligatorio para su funcionamiento, lo que significa que si no está disponible en un repositorio es necesario que se descargue. Un sitio donde están es en LinuxWireless.org

Módulo bcm43xx

Este módulo ya está descontinuado, sin embargo un número de usuarios determinado lo siguen utilizando. Es bueno notar que la filosofía de uso es similar a la mostrada con ndiswrapper. Usaremos un software para extraer el firmware de un determinado controlador. Necesitamos usar el programa bcm43xx-fwcutter versión 006 para esto:

# apt-get install bcm43xx-fwcutter

Debe usarse la version 3.130.20.0 del controlador propietario de Broadcom. Lo puede descargar en:

# export FIRMWARE_INSTALL_DIR="/lib/firmware"
# wget http://downloads.openwrt.org/sources/wl_apsta-3.130.20.0.o
# bcm43xx-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta-3.130.20.0.o

Por lo general la ruta del firmware es en /lib/firmware aunque a veces puede ser en otra ubicación como es:

/lib/modules/{uname -a}/kernel/drivers/firmware

De usar el núcleo 2.6.24 debemos habilitar:

CONFIG_BCM43XX=m

Módulo b43-legacy

Para este módulo necesitamos el programa b43-fwcutter de la misma forma que las variantes anteriores. Puede que no esté en el repositorio y debemos bajarlo. Necesitamos la versión 011.

# wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-011.tar.bz2

Además de la versión 3.130.20.0 del controlador propietario de Broadcom.

# export FIRMWARE_INSTALL_DIR="/lib/firmware"
# wget http://downloads.openwrt.org/sources/wl_apsta-3.130.20.0.o
# b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta-3.130.20.0.o

Nuevamente recordamos, especificar la ruta correcta para el firmware ….

De usar el núcleo 2.6.24 habilitaremos:

CONFIG_B43LEGACY=m

Módulo b43 del núcleo 2.6.24

Para este módulo necesitamos la versión 011 de b43-fwcutter:

# wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-011.tar.bz2

Además de la versión 4.80.53.0 del controlador propietario de Broadcom.

# export FIRMWARE_INSTALL_DIR="/lib/firmware"
# wget http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2
# b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta.o

Habilitaremos en el núcleo:

CONFIG_B43=m

Ya con el módulo que estemos usando bastará ejecutar el siguiente comando para tener la información de nuestra red:

# iwconfig

wlan0     IEEE 802.11g  ESSID:"xxxxxx"
Mode:Managed  Frequency:2.447 GHz  Access Point: 00:16:01:98:0C:28
Bit Rate=1 Mb/s   Tx-Power=27 dBm
Retry min limit:7   RTS thr:off   Fragment thr=2346 B
Encryption key:off
Link Quality=91/100  Signal level=-43 dBm  N
oise level=-70 dBm
Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
Tx excessive retries:0  Invalid misc:0   Missed beacon:0

Bluetooth

Para tener soporte a nivel de núcleo de bluetooth debemos habilitar en el núcleo:

CONFIG_BT_HCIUSB=m

Hay una gran variedad de programas encaminados a explotar las funcionalidades de este tipo de conexión en distintos manejadores gráficos. Más adelante explicaremos algunos.

lbrc

El proyecto LBRC ( Linux Bluetooth Remote Control ) está encaminado a desarrollar soluciones para transferir información entre dispositivos bluetooth que para este caso puede ser usado para controlar remotamente la máquina.

En su sitio podremos encontrar más información LBRC

Audio

La tarjeta de audio que trae la máquina es una intel CH7 HDA, bastante estándar con el software hoy en día. Muchos núcleos por defecto la traen habilitada. Si recompilamos nuestro propio núcleo recuerden habilitar:

CONFIG_SND_HDA_INTEL=m

Sensores

Esta máquina trae soporte para varios sensores que podremos monitorear o controlar desde nuestro escritorio. A continuación hablaremos sobre ellos.

hddtemp

Este programa accede a la información de la herramienta S.M.A.R.T en los discos que lo soporten y extraer de ahí en tiempo real su temperatura. Usaremos:

# apt-get install hddtemp

Para saber si el disco provee del protocolo S.M.A.R.T usaremos:

# apt-get install smartctl
# smartctl -a -d ata /dev/sda

En caso de que usemos /dev/sda como el disco que queremos monitorear. Si no soporta S.M.A.R.T nos lo dirá.

i8k

Este módulo nos ayudará a monitorear la temperatura del procesador y la velocidad a que operar los ventiladores que lo circundan. Este módulo es sólo para los ordenadores Dell y no en todos brinda soporte completo. Puede que varie el número de ventiladores que se puedan controlar. Para usar el módulo es necesario habilitar el soporte para laptops Dell:

CONFIG_I8K=m

Una vez instalado el módulo debemos configurarlo para que arranque al inicio del sistema. Debemos pasar una opción para forzar la carga del módulo, ya que de otra forma no es posile usarlo:

# echo "i8k force=1" >> /etc/modules

sensors-applet

Tenemos vías para poder visualizar el valor de los sensores y controlar a partir de sus valores. Existe una aplicación visual muy completa, y muy fácil de usar llamada sensors-applets. Este es capaz de mostrar valores para un gran número de módulos. Entre ellos los que expusimos aquí.

# apt-get install sensors-applet

Al consultar la lista de módulos disponibles veremos que aparecen entre otros los que configuramos anteriormente. Se verían algo así:

Referencias:

BerliOS
LinuxWireless
Troyan0