私は組み込みLinuxシステム(5.10.24)を開発しており、jffs2をrootfsとして使用しています。
次に、jffs2のカーネル設定を次のように変更します。
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
# CONFIG_JFFS2_SUMMARY is not set
# CONFIG_JFFS2_FS_XATTR is not set
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
# CONFIG_JFFS2_ZLIB is not set
CONFIG_JFFS2_LZO=y
# CONFIG_JFFS2_RTIME is not set
# CONFIG_JFFS2_RUBIN is not set
# CONFIG_JFFS2_CMODE_NONE is not set
# CONFIG_JFFS2_CMODE_PRIORITY is not set
# CONFIG_JFFS2_CMODE_SIZE is not set
CONFIG_JFFS2_CMODE_FAVOURLZO=y
そして、mkfs.jffs2 -e 0x8000 -p -l -n -X lzo
jffs2イメージを構築するために使用されます。
システムが起動すると、次のエラーが報告されます。
Run /init as init process
jffs2: compression type 0x06 not available
jffs2: Error: jffs2_decompress returned -5
Kernel panic - not syncing: Requested init /init failed (error -5).
私はとても混乱しています!
エラーメッセージを見ると、jffs2イメージがZLIBを介して圧縮されているように見え-X lzo
ますmkfs.jffs2
。
それでは、LZOを使用してシステムをjffs2システムで起動する方法は何ですか?
答え1
根本原因を見つけました。
これはデフォルトでZLIBを使用するrootfsイメージのビルドです。 LZOが機能するには2つのことが必要です。
- カーネル構成で有効になり、
CONFIG_JFFS2_LZO=y
他の圧縮構成では無効にすることができます。 - mkfs.jffs2を使用してmkfs.jffs2を実行します
-X lzo -x zlib -x rtime
。これは、LZO コンプレッサがイネーブルになり、ZLIB および RTIME コンプレッサがディセーブルになることを意味します。
前述のように、rootfs イメージは LZO を使用して圧縮され、カーネルがアクティブな状態で LZO を使用して起動できます。