# x-kernel-image **Repository Path**: openkylin/x-kernel-image ## Basic Information - **Project Name**: x-kernel-image - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-02 - **Last Updated**: 2026-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # x-kernel-image 为 X-Kernel 构建根文件系统镜像,供内核仓库 `make rootfs` 使用。 提供 Alpine 和 Debian 两类 rootfs,命名格式:`x-kernel-{distro}-{init}-{arch}[-{variant}].img.xz` | 类型 | C 库 | 包管理器 | Init | 产出文件 | |------|------|----------|------|----------| | Alpine | musl | apk | busybox | `x-kernel-alpine-busybox-.img.xz` | | Alpine CI | musl | apk | busybox | `x-kernel-alpine-busybox--ci.img.xz` | | Debian | glibc | apt/dpkg | busybox | `x-kernel-debian-busybox-.img.xz` | | Debian | glibc | apt/dpkg | systemd | `x-kernel-debian-systemd-.img.xz` | ## Alpine rootfs (musl) 依赖:`curl`、`xz`、`fallocate`、`mkfs.ext4`、`fsck.ext4`;需 root 权限。 构建非 `base` profile 时优先使用 host `apk-tools`;如果 host `apk` 不存在或不可用, 会自动使用 Docker 中的 Alpine `apk` 作为轻量 fallback。 ```sh sudo make all # 默认 aarch64,生成 x-kernel-alpine-busybox-aarch64.img.xz sudo make all ARCH=riscv64 # 指定架构 sudo make all ARCH=x86_64 PROFILE=ci # 生成 x-kernel-alpine-busybox-x86_64-ci.img.xz sudo make all4 # 构建四个架构(aarch64 / riscv64 / x86_64 / loongarch64) make clean # 清理产物 ``` 变量在 `config.mk`(`ARCH`、`PROFILE`、`IMG_SIZE`、`BASE`、`REL`),可命令行覆盖。 ### Alpine profiles `PROFILE=base` 是默认值,只使用 Alpine minirootfs 和仓库内的 `etc/` overlay。 `PROFILE=ci` 生成 CI 镜像,用于 pjdfstest、LTP 子集等测试运行时。包列表维护在 `profiles/ci.packages`,当前包含: - `perl`、`perl-utils`、`perl-test-harness`:运行 pjdfstest 原版 Perl/TAP 测试。 - `bash`、`coreutils`、`findutils`、`grep`、`sed`:复杂 shell 测试的基础工具。 - `openssl`:pjdfstest 原版 `misc.sh` 使用 `openssl md5` 生成随机文件名。 - `e2fsprogs`:ext4 镜像检查工具。 - `strace`:调试 syscall 行为。 新增 profile 时只需要增加 `profiles/.packages`,并使用 `sudo make all PROFILE= ARCH=` 构建。`base.packages` 为空,表示不安装 额外包。 CI profile 构建完成后可检查镜像内容: ```sh sudo mount x-kernel-alpine-busybox-aarch64-ci.img mnt ls mnt/usr/bin/perl mnt/usr/bin/prove mnt/usr/bin/openssl mnt/sbin/e2fsck sudo umount mnt ``` 如果 host 与目标架构一致,也可以进一步用 `chroot` 检查版本;跨架构时交给 QEMU guest 验证。 ## Debian rootfs (glibc) 依赖:Docker(支持多架构,通过 QEMU binfmt 模拟);**不需要** root 权限。 ```sh # busybox init bash scripts/build-debian-rootfs.sh --arch aarch64 --init busybox bash scripts/build-debian-rootfs.sh --arch x86_64 --init busybox bash scripts/build-debian-rootfs.sh --arch riscv64 --init busybox # systemd bash scripts/build-debian-rootfs.sh --arch aarch64 --init systemd bash scripts/build-debian-rootfs.sh --arch x86_64 --init systemd bash scripts/build-debian-rootfs.sh --arch riscv64 --init systemd # 使用 -o 指定自定义输出路径(匹配新命名格式) bash scripts/build-debian-rootfs.sh --arch aarch64 --init busybox \ -o x-kernel-debian-busybox-aarch64.img # 可选参数 bash scripts/build-debian-rootfs.sh --arch aarch64 --init systemd \ --size 4G --debian bookworm -o x-kernel-debian-systemd-aarch64.img ``` 构建后压缩: ```sh xz x-kernel-debian-busybox-aarch64.img ``` 首次构建跨架构镜像时需注册 QEMU binfmt: ```sh docker run --rm --privileged tonistiigi/binfmt --install all ``` ## 已有镜像 当前目录下已构建好的镜像: | 文件 | 说明 | |------|------| | `x-kernel-alpine-busybox-aarch64.img` / `.img.xz` | Alpine aarch64 base | | `x-kernel-alpine-busybox-x86_64.img` / `.img.xz` | Alpine x86_64 base | | `x-kernel-alpine-busybox-aarch64-ci.img` / `.img.xz` | Alpine aarch64 CI | | `x-kernel-alpine-busybox-x86_64-ci.img` / `.img.xz` | Alpine x86_64 CI | | `x-kernel-debian-busybox-aarch64.img` / `.img.xz` | Debian trixie aarch64 busybox | | `x-kernel-debian-busybox-x86_64.img` / `.img.xz` | Debian trixie x86_64 busybox | | `x-kernel-debian-systemd-aarch64.img` / `.img.xz` | Debian trixie aarch64 systemd | | `x-kernel-debian-systemd-x86_64.img` / `.img.xz` | Debian trixie x86_64 systemd |