无法运行 init,并出现错误:jffs2:压缩类型 0x06 不可用

无法运行 init,并出现错误:jffs2:压缩类型 0x06 不可用

我正在开发嵌入式 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 lzomkfs.jffs2.

那么如何使用LZO让系统以jffs2系统启动呢?

答案1

我找出了根本原因。

这是来自 rootfs 映像的构建,默认情况下使用 ZLIB。为了让 LZO 发挥作用,需要做两件事。

  1. 在内核配置中启用CONFIG_JFFS2_LZO=y,其他压缩配置可以禁用。
  2. 使用 运行 mkfs.jffs2 -X lzo -x zlib -x rtime,这意味着启用 LZO 压缩器,并禁用 ZLIB 和 RTIME 压缩器。

如上所述,rootfs 映像已使用 LZO 进行压缩,并且可以使用启用了内核的 LZO 来启动。

相关内容