From b4e72c926face67f3677d540afdc8b3911943eb3 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sun, 22 Mar 2026 15:00:22 -0700 Subject: [PATCH] setup erofs --- kernel/configs/vamos.config | 5 +++++ tools/build/Dockerfile.builder | 16 +++++++++++++++- tools/build/build_system.sh | 23 +++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/kernel/configs/vamos.config b/kernel/configs/vamos.config index 92cbcf1..adcf259 100644 --- a/kernel/configs/vamos.config +++ b/kernel/configs/vamos.config @@ -84,5 +84,10 @@ CONFIG_TOUCHSCREEN_S6SY761=y CONFIG_EXPERT=y CONFIG_GPIO_SYSFS=y +# EROFS +CONFIG_EROFS_FS=y +CONFIG_EROFS_FS_ZIP=y +CONFIG_EROFS_FS_ZIP_LZ4=y + # Misc CONFIG_LOCALVERSION_AUTO=n diff --git a/tools/build/Dockerfile.builder b/tools/build/Dockerfile.builder index 4883bd5..c0fdc69 100644 --- a/tools/build/Dockerfile.builder +++ b/tools/build/Dockerfile.builder @@ -19,10 +19,24 @@ RUN apk add --no-cache \ git \ libcap \ linux-headers \ + lz4-dev \ openssl \ openssl-dev \ perl \ - python3 + python3 \ + util-linux-dev \ + xz-dev + +# Build erofs-utils from source (not packaged in Alpine) +RUN git clone https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git /tmp/erofs-utils \ + && cd /tmp/erofs-utils \ + && git checkout v1.8.5 \ + && apk add --no-cache autoconf automake libtool \ + && autoreconf -fi \ + && ./configure --enable-lz4 --enable-lzma --disable-fuse \ + && make -j$(nproc) \ + && make install \ + && rm -rf /tmp/erofs-utils # Cross-compiler for x86_64 hosts building aarch64 kernel # gcc-aarch64-none-elf is bare-metal but works for kernel (freestanding code) diff --git a/tools/build/build_system.sh b/tools/build/build_system.sh index da9bfb7..110cad8 100755 --- a/tools/build/build_system.sh +++ b/tools/build/build_system.sh @@ -129,6 +129,17 @@ MOUNT_CONTAINER_ID="$MOUNT_CONTAINER_ID" ROOTFS_DIR="$ROOTFS_DIR" \ ROOTFS_IMAGE="$ROOTFS_IMAGE" OUTPUT_DIR="$OUTPUT_DIR" \ "$DIR/vamos" profile +# Build EROFS image (before unmount, while rootfs is still mounted) +EROFS_IMAGE="$BUILD_DIR/system.erofs.img" +OUT_EROFS_IMAGE="$OUTPUT_DIR/system.erofs.img" +echo "Building EROFS image (LZ4HC, 64K clusters)" +exec_as_root mkfs.erofs \ + -zlz4hc,12 \ + -C65536 \ + -T0 \ + --all-root \ + "$EROFS_IMAGE" "$ROOTFS_DIR" + # Unmount image echo "Unmount filesystem" exec_as_root umount -l "$ROOTFS_DIR" @@ -137,6 +148,9 @@ exec_as_root umount -l "$ROOTFS_DIR" echo "Sparsifying system image" exec_as_user img2simg "$ROOTFS_IMAGE" "$OUT_IMAGE" +# Copy EROFS image to output +cp "$EROFS_IMAGE" "$OUT_EROFS_IMAGE" + # Patch sparse image size into profile JSON SPARSE_SIZE=$(stat -c%s "$OUT_IMAGE" 2>/dev/null || stat -f%z "$OUT_IMAGE") if command -v jq &>/dev/null; then @@ -145,4 +159,13 @@ if command -v jq &>/dev/null; then mv "$OUTPUT_DIR/rootfs-profile.json.tmp" "$OUTPUT_DIR/rootfs-profile.json" fi +# Size comparison +EXT4_SPARSE_SIZE=$(stat -c%s "$OUT_IMAGE" 2>/dev/null || stat -f%z "$OUT_IMAGE") +EROFS_SIZE=$(stat -c%s "$OUT_EROFS_IMAGE" 2>/dev/null || stat -f%z "$OUT_EROFS_IMAGE") +echo "" +echo "=== Image size comparison ===" +echo "ext4 (sparse): $(numfmt --to=iec-i --suffix=B "$EXT4_SPARSE_SIZE") ($EXT4_SPARSE_SIZE bytes)" +echo "EROFS (LZ4HC): $(numfmt --to=iec-i --suffix=B "$EROFS_SIZE") ($EROFS_SIZE bytes)" +echo "" + echo "Done!"