埋め込みデバイス用の小さな rootfs ディレクトリから squashfs を作成しました:
mksquashfs rootfs_image rootfs.squashfs -b 1024k -comp xz -Xbcj x86
この squashfs をデバイスの NOR フラッシュにコピーし、この NOR を rootfs として使用するようにブートローダー (U-boot) とカーネルを設定することに成功しました。
ただし、一部のファイルは適切 (つまり、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 ファイルは破損しておらず、ホスト マシン上で問題なく unsquashfs できることに注意してください。
答え1
xz 圧縮を使用しないことでこの問題を解決しました。
mksquashfs rootfs_image rootfs.squashfs -b 1024k
この方法では、squashfs は gzip によって圧縮されたままですが、これは私のデバイスにはより適しているようです。