저는 임베디드 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가 작동하려면 두 가지 일이 발생해야 합니다.
- 커널 구성에서 활성화되며
CONFIG_JFFS2_LZO=y
다른 압축 구성에서는 비활성화될 수 있습니다. - mkfs.jffs2 를 사용하여 mkfs.jffs2를 실행합니다
-X lzo -x zlib -x rtime
. 이는 LZO 압축기가 활성화되고 ZLIB 및 RTIME 압축기가 비활성화됨을 의미합니다.
위에서 언급한 것처럼 rootfs 이미지는 LZO를 사용하여 압축되며 커널이 활성화된 상태에서 LZO를 사용하여 부팅할 수 있습니다.