我已經從小型 rootfs 目錄中為嵌入式裝置建立了一個 squashfs:
mksquashfs rootfs_image rootfs.squashfs -b 1024k -comp xz -Xbcj x86
我已成功將此 squashfs 複製到裝置的 NOR 快閃記憶體中,並設定引導程式 (U-boot) 和核心以使用此 NOR 作為 rootfs。
然而,有些文件很好(即我可以捕捉它們),但有些文件則不然!
讓我們看看具體的例子:
# 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 檔案沒有損壞,因為它可以在主機上進行 unsquashfs 處理,不會有任何問題。
答案1
我透過不使用 xz 壓縮解決了這個問題:
mksquashfs rootfs_image rootfs.squashfs -b 1024k
這樣,squashfs 仍然被壓縮,但透過 gzip 壓縮,這似乎更適合我的設備。