cramfs en sistemas big-endian (arm, ppc…)

Quería aprovechar para dejar escrito en algún lado un problema al que me enfrenté el otro día jugando con cramfs, linux y un sistema bigendian. Desafortunadamente no conseguí encontrar información sobre lo que ocurría, Google estaba como… ¿perdido?. Lo más probable es que yo no le hiciera las preguntas correctas. De todas formas, para cuando el gran hermano se de una vuelta por aquí, y si tiene a bien indexarlo, comentaré el problema y la solución que encontré.

Estaba yo intentando crear un sistema de archivos usando cramfs. cramfs (con minúscula) es un tipo de sistema de archivos de solo-lectura, ideado para sistemas empotrados con memoria ROM o flash, aunque se usa en otras aplicaciones.

La principal gracia que tiene es que, a diferencia de un ramdisk tradicional, el uso de memoria es muy reducido con lo que es ideal para sistemas empotrados, que por lo general de memoria RAM andan cortitos.

Pues eso. Para hacer el sistema de archivos hay una utilidad: mkcramfs (en Ubuntu: sudo apt-get install cramfsprogs) Esta utilidad es tan sencilla como indicarle un directorio de tu PC donde tengas (por debajo) el sistema de archivos que quieras arrancar en el sistema destino (empotrado, por lo general) y el nombre de fichero de salida. Y ya!

Ale, se flashea/escribe sobre el dispositivo destino y se arranca. Y falla. “kernel panic”, “root filesystem not found”, “unknown block (31,0)”… vamos, que no. Puedes pensar que es un problema de haber compilado el kernel mal, pero si le has puesto soporte para cramfs, estará casi seguro bien, sobre todo si antes ha sido capaz de arrancar, por ejemplo, un ramdisk o un j2ffs.

Lo más probable es que tu ordenador sea little-endian y tu plataforma sea big-endian. La utilidad mkcramfs genera un fichero de salida en formato de la máquina origen, little-endian. Y el host destino es, en este caso, big-endian. El kernel no encuentra el número mágico que le dice que es un cramfs y hace un “panic” irresoluble. Pero la solución es muy sencilla: cramfsswap (en Ubuntu sudo apt-get install cramfsswap). Esta utilidad convierte una imagen cramfs de little-endian a big-endian (y si quieres viceversa también).

Espero que este post le sea de utilidad a alguien.

Etiquetas: , ,

Una respuesta to “cramfs en sistemas big-endian (arm, ppc…)”

  1. Julio Says:

    Pues sí que ha sido de ayuda. Hace un momento, me acaba de pasar lo que comentas en este post.
    Gracias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: