Creé un squashfs desde un pequeño directorio rootfs para dispositivos integrados:
mksquashfs rootfs_image rootfs.squashfs -b 1024k -comp xz -Xbcj x86
Copié con éxito este squashfs en la memoria flash NOR del dispositivo y configuré el gestor de arranque (U-boot) y el kernel para usar este NOR como rootfs.
Sin embargo, algunos archivos son buenos (es decir, puedo capturarlos), ¡pero otros no!
Veámoslos en ejemplos concretos:
# cat /var/www/hello.html
# hi, hello
# head /lib/modules/3.10.14/rtl8189es.ko
[ 21.940062] SQUASHFS error: xz_dec_run error, data probably corrupt
[ 21.946652] SQUASHFS error: squashfs_read_data failed to read block 0x1b9f76
[ 21.953963] SQUASHFS error: Unable to read fragment cache entry [1b9f76]
[ 21.960960] SQUASHFS error: Unable to read page, block 1b9f76, size 3c9d8
... (last 2 lines are repeated for a while
head: rtl8189es.ko: Input/output error
#
¿Cuál es el problema aquí y cómo puedo solucionarlo? ¿Existe alguna forma sencilla de comprobar si un squashfs está dañado?
Tenga en cuenta que el archivo squashfs no está dañado, ya que se puede descomprimir en la máquina host sin ningún problema.
Respuesta1
Resolví esto al no usar la compresión xz:
mksquashfs rootfs_image rootfs.squashfs -b 1024k
De esta manera, el squashfs todavía está comprimido pero mediante gzip, lo que parece más apropiado para mi dispositivo.