NetBSD-en-el-bolsillo

Hacía mucho tiempo que me ponía verde de envidia al leer este artículo de Michael W. Lucas (ese maestro) sobre la instalación de NetBSD en un HP Jornada 728. No es un aparato demasiado potente pero la idea de tener un unix de bolsillo me interesaba -y me interesa- mucho, pero el precio desorbitado para una máquina tan escasa (encontré precios que siempre superaban los mil dólares americanos) me desanimaban totalmente. Hace poco busqué en una de esas conocidas páginas de subastas y la encontré por mucho menos. Y piqué 🙂

La instalación de NetBSD en esta máquina pasa por eliminar el Windows CE que contiene, pero aunque sirve para comprobar que la máquina funciona no va mucho más allá, al menos en mi caso. No suelo usar suites ofimáticas y la utilidad de una especie de windows 95 a estas alturas no es mucha, así que no parece una pérdida que haya que lamentar mucho.

Advertencia: No soy ningún experto en lo que voy a relatar aquí, simplemente tengo curiosidad y tenía ganas de aprender a usar NetBSD y de tener un unix de bolsillo, así que me tiré a la piscina. Si quieres información absolutamente fiable y quieres saber qué es y el por qué de cada cosa de las que cuento busca un poco en Google y en el histórico de la lista de correo del port hpcarm de NetBSD. Dicho esto, vamos al turrón.

El primer paso fue instalar NetBSD en un pc (un HP Compaq nx9030 que me han dado para que haga algo con él) para desde ahí probar las posibilidades de cross-compiling de NetBSD. De hecho es posible crear un NetBSD completo incluso desde una máquina que no ejecuta NetBSD. Lo intenté desde OS X pero me daba un error crítico que no supe solucionar. Más tarde me encontré con el mismo error crítico en el i386/NetBSD y estuve atascado como buen novato hasta que en la lista de correo del port de NetBSD correspondiente al Jornada 728 (http://www.netbsd.org/ports/hpcarm/) me dijeron que -current estaba roto, que en unos dias podría seguir intentandolo. El hilo empieza aquí. Unos dias después actualicé los fuentes y pude continuar.

El primer paso es bajar el árbol de fuentes de NetBSD.


cvs -d :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot checkout src

cvs update -dP

La opción P es muy importante porque se encarga de purgar los directorios vacíos que haya en el árbol. Esto es importante porque más tarde pueden dar errores. A mí me dieron, así que puedo asegurarlo 🙂

Hecho esto empezamos con lo interesante: generar una versión de NetBSD para el 728. Cada plataforma necesita sus propias herramientas (compilador, etc) y eso es lo primero que hay que hacer:

# cd /usr/src
# ./build.sh -m hpcarm -T /usr/src/hpcarmtools tools kernel=JORNADA720

Esta es la salida que indica que todo ha ido bien y dónde ha ido a parar cada cosa:

===> build.sh ended: Sun Mar 30 16:05:42 CEST 2008
===> Summary of results:
build.sh command: ./build.sh -m hpcarm -T /usr/src/hpcarmtools tools kernel=JORNADA720
build.sh started: Sun Mar 30 15:51:33 CEST 2008
NetBSD version: 4.99.58
MACHINE: hpcarm
MACHINE_ARCH: arm
Build platform: NetBSD 3.1 i386
HOST_SH: /bin/sh
No /usr/src/hpcarmtools/bin/nbmake, needs building.
Bootstrapping nbmake
TOOLDIR path: /usr/src/hpcarmtools
DESTDIR path: /usr/src/obj/destdir.hpcarm
RELEASEDIR path: /usr/src/obj/releasedir
Created /usr/src/hpcarmtools/bin/nbmake
makewrapper: /usr/src/hpcarmtools/bin/nbmake-hpcarm
Updated /usr/src/hpcarmtools/bin/nbmake-hpcarm
Tools built to /usr/src/hpcarmtools
Building kernel: JORNADA720
Build directory: /usr/src/sys/arch/hpcarm/compile/obj/JORNADA720
Kernels built from JORNADA720:
/usr/src/sys/arch/hpcarm/compile/obj/JORNADA720/netbsd
build.sh ended: Sun Mar 30 16:05:42 CEST 2008
===> .

Con este paso tenemos las herramientas y un kernel. Ahora necesitamos tener userland.

# ./build.sh -m hpcarm -T /usr/src/hpcarmtools -U \
-D /usr/hpcarmbuild distribution

Este paso es bastante más largo que el anterior, como es lógico. No hay más que ver cuándo comenzó y cuándo acabó.

===> Successful make distribution
===> build.sh ended: Sun Mar 30 18:01:21 CEST 2008
===> Summary of results:
build.sh command: ./build.sh -m hpcarm -T /usr/src/hpcarmtools -U -D /usr/hpcarmbuild distribution
build.sh started: Sun Mar 30 16:07:59 CEST 2008
NetBSD version: 4.99.58
MACHINE: hpcarm
MACHINE_ARCH: arm
Build platform: NetBSD 3.1 i386
HOST_SH: /bin/sh
TOOLDIR path: /usr/src/hpcarmtools
DESTDIR path: /usr/hpcarmbuild
RELEASEDIR path: /usr/src/obj/releasedir
makewrapper: /usr/src/hpcarmtools/bin/nbmake-hpcarm
Updated /usr/src/hpcarmtools/bin/nbmake-hpcarm
Successful make distribution
build.sh ended: Sun Mar 30 18:01:21 CEST 2008
===> .

Dado que el proceso de generación de userland es largo (supongo que depende de la máquina, la mía hubiera necesitado entre otras cosas un par más de ventiladores) podemos mientras ir descifrando el proceso de preparación del disco (en este caso una tarjeta Compact Flash). Casualmente dispongo de una tarjeta de 512MB, que es el tamaño que mwlucas usa en su ejemplo, así que pude “fusilar” los detalles. disklabel no es de las herramientas más intuitivas de unix y la verdad es que sin el artículo de mwlucas no sé cómo lo hubiera hecho. En resumidas cuentas, está todo en http://www.onlamp.com/lpt/a/3860.

Por muy despacio que vayas seguramente tendrás tiempo de comprobar que lo ha hayas hecho con la tarjeta (incluso con más de un intento) salga bien. El resultado es una partición de 5MB con formato MSDOS para alojar el arranque *y* nuestro flamante kernel.

Hay que montar la tarjeta CF en unos directorios en los que más tarde copiaremos ficheros (la parte MSDOS) e instalaremos NetBSD (todo lo demás).

En su artículo mwlucas propone lo siguiente

# mkdir /mnt/jornada
# mount /dev/wd1a -o noatime,nodevmtime /mnt/jornada
# mkdir /mnt/jornada/dos
# mount_msdos -o -l /dev/wd1e /mnt/jornada/dos
#

En el caso del sistema de ficheros ffs (el de NetBSD) con esas opciones limitamos las escrituras a la tarjeta porque no actualiza información de accesos a ficheros y dispositivos especiales (respectivamente), cosa bastante buena en una máquina limitada (gestión de la energía o recursos en general) y mejor aún si hablamos de una tarjeta compact flash, es decir, con un número de escrituras limitado; pero según la página de manual de mount_msdos(8) para NetBSD 3.1 la opción -l (ojo, menos ele, no menos uno) fuerza la lectura y generación de nombres largos al estilo de -ejem- windows 95. Me daba problemas, así que visto esto no la usé.

La instalación de NetBSD en la compact flash se hace así:

# cd /usr/src
# ./build.sh -m hpcarm -T /usr/src/hpcarmtools -U \
-D /usr/hpcarmbuild install=/mnt/jornada

Aunque falta algún detalle, como tener un directorio /etc completo

# cd /usr/hpcarmbuild/etc
# pax -rw -pe . /mnt/jornada/etc/
#

y copiar el bootloader y el kernel al sistema de ficheros DOS de la tarjeta.

# cp hpcboot.exe /mnt/jornada/dos
# cp /usr/obj/sys/arch/hpcarm/compile/JORNADA720/netbsd \
/mnt/jornada/dos/netbsd

Últimos pasos:

Hay que crear dispositivos, pero aquí me encontré con otro problema. En el artículo dice que hay que hacer lo siguiente

# cd /mnt/jornada/dev
# sh ./MAKEDEV all
#

pero en mi /mnt/jornada/dev esto es lo que hay:


altq fd log

Así que copio MAKEDEV y MAKEDEV.local desde /usr/hpcarmbuild/dev.

Tras crear un /etc/fstab acorde con el nombre con el que aparece el dispositivo en mi sistema (sd0 y no wd1 como en el artículo) se desmontan los dos sistemas de ficheros de la tarjeta y se pincha en el 728.

He probado a arrancar con todas las opciones que hay para “Jornada 720” y con estos dos /etc/fstab:

/dev/sd0a / ffs rw,noatime,nodevmtime 1 1
/dev/sd0e /dos msdos -l,rw 1 1


/dev/wd0a / ffs rw,noatime,nodevmtime 1 1
/dev/wd0e /dos msdos -l,rw 1 1

y nada, se queda congelado. He preguntado en la lista de hpcarm. Espero.

Enlaces de interés:

2 Responses

  1. gollines says:

    y lo lograste?? si es así podrías hacer un tutorial 😉 saludos.

  2. Bixen says:

    No llegué a hacer nada de provecho con la maquinita, una pena.

    Si la quieres tuya es. Tú pagas el transporte, obviamente. Luego haces el tutorial o no 😉

Leave a Reply