Skip to main content

Debian Package Build Process

Host Debian

# Compiling under qemu-user
sudo apt update
sudo apt install -y \
sbuild buildd qemu-system-misc qemu-user-static binfmt-support \
ca-certificates apt-transport-https devscripts mmdebstrap

# Native
sudo apt install -y \
sbuild buildd ca-certificates apt-transport-https devscripts mmdebstrap

# Install revyos keyring
wget https://fast-mirror.isrc.ac.cn/revyos/trixie/revyos-addons/pool/main/r/revyos-keyring/revyos-keyring_2025.03.28_all.deb
sudo dpkg -i ./revyos-keyring_2025.03.28_all.deb

# Add current user to sbuild without root
sudo sbuild-adduser $USER

Creating the Packaging Environment

revyos v1.0 (only for TH1520)

cat << EOF | sudo sbuild-createchroot --debootstrap=mmdebstrap --arch=riscv64 \
--chroot-suffix=-revyos-sbuild \
--no-deb-src \
--include=debian-ports-archive-keyring,ca-certificates,apt-transport-https,eatmydata,revyos-keyring \
sid /srv/chroot/sid-riscv64-revyos-sbuild -
deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-addons/ revyos-addons main
deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/revyos-base/ sid main contrib non-free non-free-firmware
EOF
sudo rm -rf /srv/chroot/sid-riscv64-revyos-sbuild/var/lib/apt/lists/*
echo "command-prefix=eatmydata" | sudo tee -a /etc/schroot/chroot.d/sid-riscv64-revyos-sbuild-*

revyos v2.0 (for others)

export CODENAME=trixie
#export ARCH=amd64
export ARCH=riscv64
cat << EOF | sudo sbuild-createchroot --debootstrap=mmdebstrap --arch=${ARCH} \
--chroot-suffix=-revyos-sbuild \
--no-deb-src \
--include=debian-archive-keyring,ca-certificates,apt-transport-https,eatmydata \
${CODENAME} /srv/chroot/${CODENAME}-${ARCH}-revyos-sbuild -
deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/trixie/dev/revyos-addons ${CODENAME} main
deb [trusted=yes] https://mirror.iscas.ac.cn/revyos/trixie/revyos-base ${CODENAME} main contrib non-free non-free-firmware
EOF
sudo rm -rf /srv/chroot/${CODENAME}-${ARCH}-revyos-sbuild/var/lib/apt/lists/*
echo "command-prefix=eatmydata" | sudo tee -a /etc/schroot/chroot.d/${CODENAME}-${ARCH}-revyos-sbuild-*

Build Command

revyos v1.0 (only for TH1520)

sbuild --arch=riscv64 -d sid -c sid-riscv64-revyos-sbuild xxx.dsc

revyos v2.0 (for others)

sbuild --arch=riscv64 -d trixie -c trixie-riscv64-revyos-sbuild xxx.dsc

Manual Kernel Compilation

Supported architectures: x86_64 riscv64

x86_64 supported toolchains:

  • 6.6.0 Xuantie-900 Linux 6.6.0 (Currently not compilable)
  • 5.10.0 Xuantie-900 Linux 5.10.0 (Currently not compilable)
  • 13 Mainline RISC-V GCC 13 cross-compiler
  • 14 Mainline RISC-V GCC 14 cross-compiler (Default)

riscv64 supported toolchains:

  • rv Mainline GCC compiler

Select the compiler to use through the TOOLCHAIN_VERSION variable.

Usage

git clone https://github.com/KamijoToma/xuantie-kernel-docker
cd xuantie-kernel-docker
docker build --build-arg TOOLCHAIN_VERSION=14 -t xuantie900:linux14 . # Choose TOOLCHAIN_VERSION based on supported architecture
docker run -it --rm -v LOCAL_PATH:/output xuantie900:linux14 bash # LOCAL_PATH is the directory to store the compiled kernel
./mkkernel_x64.sh # Choose mkkernel_xuantie.sh or mkkernel_riscv64.sh based on TOOLCHAIN_VERSION configuration

After the entire process is completed, the built kernel deb packages will be copied to the directory specified by LOCAL_PATH, which can then be installed using dpkg.

sudo dpkg -i [DEB PACKAGE]

The compilation process will generate several results:

  • linux-headers.deb (install when compiling kernel modules or for kernel development)
  • linux-image-dbg.deb (debug symbols, install when debugging the kernel)
  • linux-image.deb (kernel, required)
  • linux-libc-dev.deb (libc interface, generally not installed, using the generic version is sufficient)

Notes

  1. If you need to change the version being compiled, you can freely modify it after entering the docker environment (by typing bash)
  2. The linux-header package cross-compiled in an x86_64 environment may contain x86_64 header files. If you need to perform kernel development or use DKMS modules like zfs, please compile using TOOLCHAIN_VERSION=rv in a RISC-V environment.