Build Bianbu OS 1.0
The Bianbu 1.0 OS Image is based on Ubuntu 23.10.
Compilation environment
The recommended host machine is Ubuntu 20.04/22.04, with docker ce and qemu-user-static (8.0.4, customized version, Vector 1.0 support is enabled by default) installed.
docker
For docker ce installation, please refer to https://docs.docker.com/engine/install/.
qemu
-
Uninstall binfmt-support
The customized version of qemu-user-static conflicts with binfmt-support because the
/etc/init.d/binfmt-support
provided by binfmt-support is a traditional SysVinit startup script, while the/lib/systemd/system/systemd-binfmt.service
provided by the customized version of qemu-user-static is a systemd service unit file./etc/init.d/binfmt-support
will be executed later than/lib/systemd/system/systemd-binfmt.service
, resulting in overwriting systemd settings.sudo apt-get purge binfmt-support
-
Download the customized version of qemu
wget https://archive.spacemit.com/qemu/qemu-user-static_8.0.4%2Bdfsg-1ubuntu3.23.10.1_amd64.deb
-
Install a customized version of qemu
sudo dpkg -i qemu-user-static_8.0.4+dfsg-1ubuntu3.23.10.1_amd64.deb
-
Register qemu-user-static to the kernel so that the entire system (including containers) can directly execute riscv binaries
sudo systemctl start systemd-binfmt.service
-
Verify that qemu-user-static is successfully registered
Download the test program:
wget https://archive.spacemit.com/qemu/rvv
Add executable permissions to the test program:
chmod a+x rvv
Execute the test program:
./rvv
The following message appears, indicating that the registration is successful.
helloworld
spacemit
Prepare base rootfs
1. Create a working directory
mkdir ~/bianbu-workspace
2. Create and start the container
docker run --privileged -itd -v ~/bianbu-workspace:/mnt --name build-bianbu-rootfs ubuntu:24.04
3. Entering the container
docker exec -it -w /mnt build-bianbu-rootfs bash
4. Install basic tools
apt-get update
apt-get -y install wget uuid-runtime
5. Configure environment variables
export BASE_ROOTFS_URL=https://archive.spacemit.com/bianbu-base/bianbu-base-23.10-base-riscv64.tar.gz
export BASE_ROOTFS=$(basename "$BASE_ROOTFS_URL")
export TARGET_ROOTFS=rootfs
6. Download the base file system
wget $BASE_ROOTFS_URL
7. Extract to the specified directory
mkdir -p $TARGET_ROOTFS && tar -zxpf $BASE_ROOTFS -C $TARGET_ROOTFS
8. Mount some system resources into rootfs
mount -t proc /proc $TARGET_ROOTFS/proc
mount -t sysfs /sys $TARGET_ROOTFS/sys
mount -o bind /dev $TARGET_ROOTFS/dev
mount -o bind /dev/pts $TARGET_ROOTFS/dev/pts
Necessary Configuration
1. Configuring sources
1.1 First, configure the environment variables
export DIST=mantic
export REPO="archive.spacemit.com/bianbu-ports"
export VERSION="v1.0.15"
1.2 Install the public key of the repository
wget -O $TARGET_ROOTFS/usr/share/keyrings/bianbu-archive-keyring-mantic.gpg https://archive.spacemit.com/bianbu-ports/bianbu-archive-keyring.gpg
wget -O $TARGET_ROOTFS/etc/apt/trusted.gpg.d/bianbu-archive-keyring-mantic.gpg https://archive.spacemit.com/bianbu-ports/bianbu-archive-keyring.gpg
1.3 Configure sources.list
cat <<EOF | tee $TARGET_ROOTFS/etc/apt/sources.list
# $DIST
deb https://$REPO/ $DIST/snapshots/$VERSION main universe multiverse restricted
# deb-src https://$REPO/ $DIST/snapshots/$VERSION main universe multiverse restricted
# $DIST-security
deb https://$REPO/ $DIST-security/snapshots/$VERSION main universe multiverse restricted
# deb-src https://$REPO/ $DIST-security/snapshots/$VERSION main universe multiverse restricted
EOF
1.4 Configure sources.list.d/bianbu.list
cat <<EOF | tee $TARGET_ROOTFS/etc/apt/sources.list.d/bianbu.list
# $DIST-spacemit
deb https://$REPO/ $DIST-spacemit/snapshots/$VERSION main universe multiverse restricted
# deb-src https://$REPO/ $DIST-spacemit/snapshots/$VERSION main universe multiverse restricted
# $DIST-porting
deb https://$REPO/ $DIST-porting/snapshots/$VERSION main universe multiverse restricted
# deb-src https://$REPO/ $DIST-porting/snapshots/$VERSION main universe multiverse restricted
# $DIST-customization
deb https://$REPO/ $DIST-customization/snapshots/$VERSION main universe multiverse restricted
# deb-src https://$REPO/ $DIST-customization/snapshots/$VERSION main universe multiverse restricted
EOF
1.5 Configure source priorities
cat <<EOF | tee $TARGET_ROOTFS/etc/apt/preferences.d/bianbu
Package: *
Pin: release o=Spacemit, n=mantic-spacemit
Pin-Priority: 1200
Package: *
Pin: release o=Spacemit, n=mantic-porting
Pin-Priority: 1100
Package: *
Pin: release o=Spacemit, n=mantic-customization
Pin-Priority: 1100
EOF
2. Configure DNS
echo "nameserver 8.8.8.8" >$TARGET_ROOTFS/etc/resolv.conf
3. Install hardware related packages
chroot $TARGET_ROOTFS /bin/bash -c "apt-get -y install ca-certificates"
chroot $TARGET_ROOTFS /bin/bash -c "apt-get update"
chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y --allow-downgrades upgrade"
chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y --allow-downgrades install initramfs-tools"
chroot $TARGET_ROOTFS /bin/bash -c "DEBIAN_FRONTEND=noninteractive apt-get -y --allow-downgrades install bianbu-esos img-gpu-powervr k1x-vpu-firmware k1x-cam spacemit-uart-bt spacemit-modules-usrload opensbi-spacemit u-boot-spacemit linux-image-6.1.15"
4. Install the meta-package
Different variants have different meta-packages:
- Minimal
bianbu-minimal
- Dekstop
bianbu-desktop bianbu-desktop-zh bianbu-desktop-en bianbu-desktop-minimal-en bianbu-standard bianbu-development