我正在开发嵌入式 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
我找出了根本原因。
这是来自 rootfs 映像的构建,默认情况下使用 ZLIB。为了让 LZO 发挥作用,需要做两件事。
- 在内核配置中启用
CONFIG_JFFS2_LZO=y
,其他压缩配置可以禁用。 - 使用 运行 mkfs.jffs2
-X lzo -x zlib -x rtime
,这意味着启用 LZO 压缩器,并禁用 ZLIB 和 RTIME 压缩器。
如上所述,rootfs 映像已使用 LZO 进行压缩,并且可以使用启用了内核的 LZO 来启动。