我已经从小型 rootfs 目录为嵌入式设备创建了一个 squashfs:
mksquashfs rootfs_image rootfs.squashfs -b 1024k -comp xz -Xbcj x86
我已成功将此 squashfs 复制到设备的 NOR 闪存中,并设置引导加载程序(U-boot)和内核以使用此 NOR 作为 rootfs。
但是,有些文件是好的(即我可以对它们进行 cat ),但有些则不好!
让我们通过具体的例子来看一下:
# 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
#
这里有什么问题?我该如何解决?有没有简单的方法可以检查 squashfs 是否已损坏?
请注意,squashfs 文件没有损坏,因为它可以在主机上无问题地取消 squashfs 操作。
答案1
我通过不使用 xz 压缩解决了这个问题:
mksquashfs rootfs_image rootfs.squashfs -b 1024k
这样,squashfs 仍然被压缩,但是通过 gzip 压缩,这似乎更适合我的设备。