03 Oct 2004: v0.1
Bueno, he recompuesto y reescrito un poco los anteriores mensajes, de modo que intentaré hacerlo siempre sobre el mismo, marcando los cambios con alguna marca que aún no he pensado.
A modo de introducción, la primera cuestión surgió en si reinstalar o no el WXP que venía por defecto con el portátil. Mal que me pese, no puedo prescindir de el (a algo tiene que jugar el sujeto ocioso). Aunque mi primera opción era la reinstalación, con todo lo que ello implicaba, tras varias ‘consultas’ opté por utilizar el Partition Magic, y en unos 10-15 mins de manera casi automática tenía 11GB de espacio no asignado, dejando 28 GB para el XP.
Tras esto, el Linux.
Características)
Las caracteristicas más relevantes (para la configuracion del Linux) son las siguientes:
-> CPU Intel(R) Pentium(R) M Processor 1.5Ghz
Cache 1MB
Chipset Intel 855GM
BIOS 512KB(4 Mbit), Flash upgradable
-> Display and Graphics
LCD 14.1″ XGA
LCD Resolution 1024 x 768 x 262,144 color (18 bit)
Graphics Controller Intel 855GM Integrated Graphic
Video Memory UMA 8MB, DVMT Max 64M
-> Audio Sound AC ’97 Sound
Controller AC ’97 2.2 compliant CODEC, SigmaTel STAC9752
Internal Embedded stereo speakers
-> Int External Microphone, Headphone, Optical S/PDIF out port
-> Int Controls Keyboard volume control
-> Storage
Hard Disk 9.5mmH 2.5″ HDD, Removable 40GB
Drive Supports SMART UltraDMA-33/66/100 support
-> Network Tools
Fax/Modem 56Kbps / V.92
Chipset AC-97 S/W Modem
Features RJ11 Output
LAN 10/100 Ethernet UTP
Chipset Intel 82562 EZ
Features RJ45 Output
Wireless LAN 802.11b 802.11b : Intel
Chipset Calexico
Antenna Integrated 2 Antenna
-> I/O Interface
PC CardBus 1 Type II slot
Slots Controller Ricoh R5C593
Support 32bit CardBus cards
iEEE1394 Port 1
USB Port 2 (USB2.0)
Video Port 1
TV-out connector SVHS
Audio Jacks HeadPhone-out ,S/PDIF, MIC-in
Power 1(5pie)
Input Devices
Key board 88KEY(KR/US), 89KEY(UK/FR/GM/SP)
Touchpad Synaptics Touchpad
Scroll Button Scroll wheel
Memory stick 1 slot
-> Power and Power Management
Battery SSB-X10LS3 (3cells, Smart Li-Ion Battery)
Power Management ACPI 1.0b support, Standby(S3), Hibernate(S4)
Instalación)
Me decidí por la Gentoo a favor de Debian (o Slackware) por a) probar algo nuevo y b) tener la capacidad de compilar todo el linux. En cualquier caso, la mayoría de las configuraciones que muestro aquí son de paquetes estándar o del propio kernel.
De las tres ‘stages’ de la Gentoo, me decidí por la primera. Es decir, compilarlo *todo*. El manual proporcionado por la gente de Gentoo es muy sencillo de seguir. El DHCP funcionó sin problemas a la primera, por lo que no fue un problema el acceso a red.
El particionado del disco se hizo asignando 1GB a swap (/dev/hda2) y 10GB al linux (/dev/hda3). mkreiserfs (ReiserFS), mkswap y swapon.
Los siguientes pasos fueron directamente los del manual. Así hasta que llegamos a las opciones del make.conf. Según lo que estuve leyendo por Internet, me decanté por lo siguiente:
CFLAGS=”-Os -march=pentium3 -pipe -mfpmath=sse -fforce-addr -fomit-frame-pointer
-falign-functions=64″
CHOST=”i686-pc-linux-gnu”
(El Pentium M parece ser, por lo que he leido, más un PIII que un PIV)
Una vez hecho esto, era hora de bajarse la distribucion. Aunque utilicé inicialmente el comando mirrorselect para seleccionar el ‘mejor’ mirror, funcionó (o lo hice funcionar) incorrectamente, ya que me encontré con varias líneas de basura en /etc/make.conf, por lo que comprobé manualmente un par de mirrors y finalmente gentoo.inode.at pareció bastante rápido (Suiza, Austria o Finlandia suelen ser mirrors bastante buenos). A partir de aquí, seguí las opciones del manual, que eran principalmente
# emerge sync (que llevó su buena horita)
# cd /usr/portage
# scripts/bootstrap.sh (que llevó sus dos horitas y pico)
y
# emerge system
comando que tras un buen rato compilando, fue el que me dió el primer problema. Éste residía en la dependencia que tiene el Perl de las librerías del GDBM (GNU DataBase Management, creo). Por la información mostrada, estas librerías no se habían instalado previamente, por lo que la compilación del Perl fallaba y acababa por bloquear el ‘emerge system’. Tras algunos intentos fallidos, modifiqué /etc/make.conf introduciendo ‘-gdbm’ en la variable USE, para evitar que el Perl se compilase con soporte para GDBM. Posteriormente descubrí que existía un bug report abierto con este problema, #65055. Con esto el emerge system finalizó quizá en unas cuatro horas. Después de esto, compilé el kernel de la gentoo (2.6.8-gentoo-rc3) sin problemas, y acabé instalando el LILO con /dev/hda1 como windows y /dev/hda3 como gentoo.
Kernel)
Aunque instalé inicialmente el kernel 2.6.8 que trae la Gentoo, posteriormente he instalado un 2.6.8.1 vanilla directamente de kernel.org. Hice esto principalmente para poder aplicar los parches necesarios (ACPI, Wireless…) sin necesidad de comprobar si los ficheros a parchear en cada caso eran los originales. Además, me gusta no depender
de un kernel específico. Básicamente, las opciones que trae son las mismas, con algunas pequeñas excepciones. Una de ellas es la opcion
Device Drivers —>
Graphics support —>
+ VESA driver type (vesafb-tng) —>
+ (1024×768@60) VESA default mode
En el vanilla 2.6.8.1, sin necesidad de parchear, esto se puede arreglar poniendo
vga = 791
en el fichero de configuracion lilo.conf, según la tabla:
Colours 640x480 800x600 1024x768 1280x1024 1600x1200
--------+---------------------------------------------
256 | 769 771 773 775 796
32,768 | 784 787 790 793 797
65,536 | 785 788 791 794 798
16.8M | 786 789 792 795 799
Ver http://rampex.ihep.su/Linux/linux_howto/html/tutorials/mini/Vesafb.html#toc5 para más informacion o http://www.tldp.org/HOWTO/Framebuffer-HOWTO-15.html para una versión más larga y actualizada (en mi caso, el primero me sirvió).
Xorg) Las Xorg se compilan sin más haciendo un emerge xorg-x11. La utilidad xorgcfg reconoce el chipset 855GM y lo configura prácticamente todo sin problemas. Nota: el driver a utilizar es el i810, pero el driver del DRI es el i830 (ver http://www.xfree86.org/~dawes/845driver.html). Concretamente en el kernel habrá que seleccionar
Device Drivers —>
Character devices —>
[*] Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
<*> Intel 830M, 845G, 852GM, 855GM, 865G
Tener en cuenta que si se utiliza el kernel de la gentoo, existe un HOWTO adicional para la configuración del DRI, ya que este procedimiento (es decir, compilar soporte en el núcleo y cargar el módulo en las X) no es suficiente.
Adicionalmente, lo único que es necesario configurar de manera adicional es el touchpad y el teclado. El primero lo describo en la siguiente sección, y el segundo se puede activar mediante el panel de control del KDE, en la sección de ‘Regional & Accesibility’, seleccionando ‘Laptop/notebook Compaq Laptop Keyboard’
Como nota aparte, el único problema que se presenta es un error al arrancar las X:
…
(EE) I810(0): unknown reason for exception
…
(EE) I810(0): cannot continue
…
pero al parecer, es el driver de la tarjeta gráfica recibiendo información incorrecta de la BIOS. Aunque en otros drivers esto se puede evitar (DisplayInfo “FALSE” en la sección “Devices”), no se puede hacer eso en este controlador, por lo que tendré que vivir con ello. En cualquier caso no parece tener ningún efecto sobre el comportamiento de las X, por lo que por el momento tendré que vivir con ello (me ha parecido ver algo al respecto en la version 2.6.9-rc2 pero no estoy seguro).
Touchpad) Este touchpad de Synaptics es fácilmente activable en modo texto mediante el comando
# /usr/sbin/gpm -m /dev/input/mice -t ps2
Simplemente editar /etc/conf.d/gpm, con las variables MOUSE=ps2 y MOUSEDEV=/dev/input/mice y listo.
En el modo gráfico, es poco más complicado de configurar. Los drivers se pueden bajar de http://freshmeat.net/projects/synaptics/, donde se incluye toda la documentación para el funcionamiento de este dispositivo principalmente en las X, incluyendo la modificación que hay que realizar en el fichero de configuración de las X (Xorg en mi caso, quizá xfree86 en el tuyo) y las opciones a activar en el kernel. La instalación es prácticamente inmediata.
Wireless)
Puede decirse que este fue el segundo de los problemas que me encontré, pero más por culpa de la Gentoo que por el mio. Fue casi un rompecabezas hasta que localicé el problema. En primer lugar, es necesario instalar el coldplug:
# ACCEPT_KEYWORDS=”~x86″ emerge =sys-apps/coldplug-20040920
No es necesario instalar el hotplug, ya que el coldplug nos lo instalará. De hecho, probablemente instalar el hotplug dará lugar a algún tipo de conflicto (el coldplug ha sustituido en la Gentoo al hotplug).
Ahora necesitaremos modificar el kernel para añadir soporte para crc32, wireless y radio (si no recuerdo mal). Podemos añadirlo ahora o ir esperando a ver que nos pide al compilar el driver de la ipw2100 e ir añadiéndolo (lo que conlleva varias recompilaciones y reinicios). Tras todo esto, el driver del ipw2100 (para la versión más reciente, http://ipw2100sourceforge.net):
# ACCEPT_KEYWORDS=”~x86″ emerge net-wireless/ipw2100
Esto debería instalar el ipw2100 (v0.54 en mi caso) y las wireless-tools (0.27 en mi caso). Finalmente, el hostap-driver:
# ACCEPT_KEYWORDS=”~x86″ emerge net-wireless/hostap-driver
Tras esto, normalmente deberíamos poder ver la eth1 con un simple ‘ifconfig –a’ pero la sorpresa es que no es así (bug id #65059): eth1 no existe. Para ver el problema, podemos echar un vistazo a los logs del kernel. El problema se encuentra en que el emerge pone el firmware en /usr/lib/hotplug/firmware, mientras que el hotplug lo busca en /lib/firmware. Simplemente, hacemos lo siguiente:
# mkdir /lib/firmware
# mv /usr/lib/hotplug/firmware/*.fw /lib/firmware/
# rmmod ipw2100 ieee80211 ieee80211_crypt
# modprobe ipw2100
Tras esto, un ‘ifconfig -a’ debería mostrarnos el interfaz eth1. La configuración de la ethernet entonces puede realizarse a través del modo convencional, y la del wireless a través de las wireless-tools (man iwconfig).
Nota: He intentado instalar la última versión del ipw2100, drivers 0.55 con firmware 1.3. No obstante, lo que frecuentemente pasa es que falla y aparece lo siguiente en el kernel:
Sep 29 15:45:15 [kernel] ipw2100: Fatal interrupt. Scheduling firmware restart.
Sep 29 15:45:16 [kernel] ipw2100: eth1: Restarting adapter.
Sep 29 15:45:16 [kernel] eth1: Associated with ’3Com’ at 11Mbps, channel 1 (BSSID=00:00:00:00:00:00)
Sep 29 15:45:16 [kernel] ipw2100: Fatal interrupt. Scheduling firmware restart.
Sep 29 15:45:16 [kernel] eth1: Hardware fatal error detected.
Sep 29 15:45:18 [kernel] ipw2100: eth1: Restarting adapter.
Sep 29 15:45:18 [kernel] eth1: Associated with ’3Com’ at 11Mbps, channel 1 (BSSID=00:00:00:00:00:00)
Sep 29 15:45:19 [kernel] ipw2100: Fatal interrupt. Scheduling firmware restart.
Sep 29 15:45:20 [kernel] eth1: Hardware fatal error detected.
Sep 29 15:45:22 [kernel] ipw2100: eth1: Restarting adapter.
Sep 29 15:45:22 [kernel] eth1: Associated with ’3Com’ at 11Mbps, channel 1 (BSSID=00:00:00:00:00:00)
Sep 29 15:45:22 [kernel] ipw2100: Fatal interrupt. Scheduling firmware restart.
Sep 29 15:45:24 [kernel] eth1: Hardware fatal error detected.
por lo que no recomiendo instalarlo hasta que no se haya solucionado este problema.
ACPI)
Esto ha sido probablemente lo que más quebraderos de cabeza me ha causado, hasta que me he aclarado con toda la documentación que hay sobre el tema. La mejor fuente de información que he seguido es http://forums.gentoo.org/viewtopic.php?t=122145(1), aunque hay mucha documentación acerca del tema.
En cualquier caso, esta sección está lejos de estar acabada.
Lo que he hecho:
1.- Siguiendo (1), conseguiremos el compilador de asl de intel ( http://developer.intel.com/technology/iapc/acpi/downloads.htm), y ver si nuestro DSDT tiene problemas o no. Una vez hayamos recompilado la DSDT , sabremos si la DSDT está correcta o no. En mi caso, prácticamente he encontrado los mismos problemas que el propio autor, por lo que su resolución ha sido sencilla.
2.- Una vez tenemos nuestra tabla DSDT “correcta”, tenemos que hacer que el kernel la lea. En mi caso, he utilizado el método estático (de los dos descritos en (1)), por tres razones: 1) me equivoqué al coger el parche (pensaba que estaba utilizando el del método del initrd), 2) no
tengo intención de modificar el DSDT, y 3) si voy a utilizar un bootsplash (logo de inicio) utilizando el initrd, prefiero ahorrarme complicaciones. En resumen, que vamos a por el método estático. En este método el fichero que necesitaremos es el dsdt.hex, que se habrá generado en la compilación anterior
Lo primero es obtener el parche para el kernel, de acpi.sourceforge.net. El parche que yo he utilizado es el acpi-20040816-26-stable-release.
# cd /usr/src/linux/
# patch -p1 < /root/acpi-20040816-26-stable-release.diff
Copiamos la tabla a un lugar 'seguro' (en realidad, podríamos poner esta tabla en /boot, ya que el kernel nos da la opción de escoger la localización de dicho fichero):
# cp /root/acpica-unix-20040715/compiler/dsdt.hex /usr/src/linux/include/acpi/dsdt_table.h
Tras el parcheado, modificamos el kernel para que cargue la nueva DSDT:
Power management options (ACPI, APM) --->
ACPI (Advanced Configuration and Power Interface) Support —>
[*] ACPI Support
[ ] Sleep States (EXPERIMENTAL)
<*> AC Adapter
<*> Battery
<*> Button
<*> Fan
<*> Processor
<*> Thermal Zone
< > ASUS/Medion Laptop Extras
< > Toshiba Laptop Extras
[*] Include Custom DSDT
(/usr/src/linux/include/acpi/dsdt_table.h) Custom DSDT Table file to include
(0) Disable ACPI for systems before Jan 1st this year
[ ] Debug Statements
[*] Power Management Timer Support
Y recompilamos. Reiniciamos, y el ACPI debería funcionar correctamente. En mi dmesg, aparece algo como lo siguiente:
…
ACPI: AC Adapter [ADP1] (on-line)
ACPI: Battery Slot [BAT1] (battery present)
ACPI: Power Button (FF) [PWRF]
ACPI: Lid Switch [LID0]
ACPI: Sleep Button (CM) [SLPB]
ACPI: Fan [FAN0] (on)
ACPI: Processor [CPU0] (supports C1 C2 C3, 8 throttling states)
ACPI: Thermal Zone [THRM] (53 C)
…
además mediante /proc/acpi podemos obtener numerosa información de la gestión del procesador, ventilador, botones…
Finalmente, lo siguiente es simplemente instalar el acpid, y meterlo en los scripts de arranque:
# emerge acpid
# /etc/init.d/acpid start
# rc-update add acpid boot
Adicionalmente, hay varios temas del ACPI más avanzados en los que aún no me he metido.
Speedstepping)
Esto es prácticamente inmediato. En el kernel 2.6.8.1:
Power management options (ACPI, APM) —>
CPU Frequency scaling —>
[*] CPU Frequency scaling
Default CPUFreq governor (performance) —>
— ‘performance’ governor
<*> ‘powersave’ governor
<*> ‘userspace’ governor for userspace frequency scaling
[*] /proc/sys/cpu/ interface (2.4. / OLD)
<*> CPU frequency table helpers
— CPUFreq processor drivers
<*> ACPI Processor P-States driver
<*> Intel Enhanced SpeedStep
<*> Intel Speedstep on ICH-M chipsets (ioport interface)
Posteriormente, podemos ver y modificar la informacion del procesador mediante /sys/devices/system/cpu/cpu0/cpufreq/, o de forma más sencilla, instalando el speedfreq.
USB)
El soporte para el kernel que estoy utilizando es básicamente:
Device Drivers —>
USB support —>
<*> Support for Host-side USB
[*] USB device filesystem
<*> EHCI HCD (USB 2.0) support
<*> OHCI HCD support
<*> UHCI HCD (most Intel and VIA) support
<*> USB Printer support
<*> USB Mass Storage support
[*] USB Mass Storage verbose debug
<*> USB Human Interface Device (full HID) support
[*] HID input layer support
La parte de HID es necesaria para el funcionamiento del ratón y el teclado USB.
Adicionalmente, podemos conectar a los puertos USB un Flash Disk. Podemos ver si lo detecta viendo el fichero /proc/bus/usb/devices. En el mio aparece algo como lo siguiente:
…
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0ea0 ProdID=2168 Rev= 2.00
S: Manufacturer=USB
S: Product=Flash Disk <--------------
S: SerialNumber=241F1E40A081C5C5
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=200mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=83(I) Atr=03(Int.) MxPS= 2 Ivl=125us
...
Si no detectamos nada parecido, otra alternativa es poner el USB, contar el número de dispositivos y ponerlo. El número de dispositivos USB debería ser ahora mayor.
Una vez detectado, tendremos que tener en el kernel soporte para dispositivos que hablen el protocolo SCSI, como es nuestro caso. Simplemente,
Device Drivers --->
SCSI device support —>
<*> SCSI disk support
Con esta opción activada, tendremos un dispositivo llamado /dev/sda. Simplemente haciendo
# mount -t vfat /dev/sda /mnt
es suficiente para utilizar el dispositivo. Tener en cuenta que es necesario desmontarlo cada vez que queramos sacarlo (que es lo equivalente al ‘detener el dispositivo’ en windows). El sistema de ficheros, vfat, es útil si la otra partición utiliza NTFS, sistema de ficheros que no está completamente soportado en el kernel.
Sonido) (sonido en las X)
ACPI II) Resume/Suspend, botones CM y FF
TV) Salida de Televisión
Firewire)
PDIF)
Asociacion de teclas) Asociación de teclas.