Skip to main content

Downloading and Compiling

Development Environment

Hardware Configuration

Recommended configuration:

  • CPU: 12th Gen Intel(R) Core(TM) i5 or above
  • Memory: 16GB or more
  • Disk: SSD, 256GB or more

Operating System

Recommended Ubuntu 20.04 or a newer LTS version, other Linux distributions have not been tested.

Installing Dependencies

Ubuntu 16.04 and 18.04:

sudo apt-get install git build-essential cpio unzip rsync file bc wget python3 libncurses5-dev libssl-dev dosfstools mtools u-boot-tools flex bison python3-pip
sudo pip3 install pyyaml

Ubuntu 20.04 or higher:

sudo apt-get install git build-essential cpio unzip rsync file bc wget python3 python-is-python3 libncurses5-dev libssl-dev dosfstools mtools u-boot-tools flex bison python3-pip
sudo pip3 install pyyaml

Downloading

Use repo (version >= 2.41) to download the complete SDK. If you don't have repo, refer to the Git Repo Mirror Usage Help to install it. The Bianbu Linux code is hosted on Gitee. Before downloading, refer to this document to set up SSH Keys. To download the code, for example, to download the bl-v1.0.y branch:

mkdir ~/bianbu-linux
cd ~/bianbu-linux
repo init -u git@gitee.com:bianbu-linux/manifests.git -b main -m bl-v1.0.y.xml
repo sync
repo start bl-v1.0.y --all

It is recommended to download the third-party software packages that buildroot depends on in advance and distribute them within the team to avoid network congestion on the main server.

wget -c -r -nv -np -nH -R "index.html*" http://archive.spacemit.com/buildroot/dl

Directory structure:

├── bsp-src               # Stores the source code of linux kernel, uboot, and opensbi
│ ├── linux-6.1
│ ├── opensbi
│ └── uboot-2022.10
├── buildroot # Main directory of buildroot
├── buildroot-ext # Customization extension, including board, configs, package, patches subdirectories
├── Makefile # Top-level Makefile
├── package-src # Local expanded application or library source code directory
│ ├── ai-support
│ ├── drm-test
│ ├── img-gpu-powervr
│ ├── k1x-cam
│ ├── k1x-jpu
│ ├── k1x-vpu-firmware
│ ├── k1x-vpu-test
│ ├── mesa3d
│ ├── mpp
│ └── v2d-test
└── scripts # Scripts used for compilation

Cross-compilation

First Full Compilation

For the first compilation, it is recommended to use make envconfig for a complete compilation. If you have modified buildroot-ext/configs/spacemit_<solution>_defconfig, you need to use make envconfig for compilation. In other cases, you can use make for compilation.

cd ~/bianbu-linux
make envconfig
Available configs in buildroot-ext/configs/:
1. spacemit_k1_defconfig
2. spacemit_k1_minimal_defconfig
3. spacemit_k1_plt_defconfig
4. spacemit_k1_v2_defconfig
your choice (1-4):

To compile the Bianbu Linux 1.0 version, enter 1 and press Enter to start the compilation. To compile the Bianbu Linux 2.0 version, enter 4. The compilation process may require downloading some third-party software packages, and the specific time consumption is related to the network environment. If you download the third-party software packages that buildroot depends on in advance, the compilation time for the recommended hardware configuration is about 1 hour. After the compilation is completed, you can see:

Images successfully packed into /home/username/bianbu-linux/output/k1/images/bianbu-linux-k1.zip
Generating sdcard.img...................................
INFO: cmd: "mkdir -p "/home/username/bianbu-linux/output/k1/build/genimage.tmp"" (stderr):
INFO: cmd: "rm -rf "/home/username/bianbu-linux/output/k1/build/genimage.tmp"/*" (stderr):
INFO: cmd: "mkdir -p "/home/username/bianbu-linux/output/k1/images"" (stderr):
INFO: hdimage(sdcard.img): adding partition 'bootinfo' from 'factory/bootinfo_sd.bin'...
INFO: hdimage(sdcard.img): adding partition 'fsbl' (in MBR) from 'factory/FSBL.bin'...
INFO: hdimage(sdcard.img): adding partition 'env' (in MBR) from 'env.bin'...
INFO: hdimage(sdcard.img): adding partition 'opensbi' (in MBR) from 'opensbi.itb'...
INFO: hdimage(sdcard.img): adding partition 'uboot' (in MBR) from 'u-boot.itb'...
INFO: hdimage(sdcard.img): adding partition 'bootfs' (in MBR) from 'bootfs.img'...
INFO: hdimage(sdcard.img): adding partition 'rootfs' (in MBR) from 'rootfs.ext4'...
INFO: hdimage(sdcard.img): adding partition '[MBR]'...
INFO: hdimage(sdcard.img): adding partition '[GPT header]'...
INFO: hdimage(sdcard.img): adding partition '[GPT array]'...
INFO: hdimage(sdcard.img): adding partition '[GPT backup]'...
INFO: hdimage(sdcard.img): writing GPT
INFO: hdimage(sdcard.img): writing protective MBR
INFO: hdimage(sdcard.img): writing MBR
Successfully generated at /home/username/work/bianbu-linux/output/k1/images/bianbu-linux-k1-sdcard.img

Among them, bianbu-linux-k1.zip is suitable for Titan Flasher, or can be unzipped and flashed using fastboot; bianbu-linux-k1-sdcard.img is the sdcard firmware, which can be written to the sdcard using the dd command or balenaEtcher.

Titan Flasher Usage Guide: Guide to Using the Flashing Tool The default username for the firmware is root, and the password is bianbu.

Configuration

buildroot

Configuration:

make menuconfig

Save the configuration, which is saved by default to buildroot-ext/configs/spacemit_k1_defconfig:

make savedefconfig

linux

Configuration:

make linux-menuconfig

Save the configuration, which is saved by default to bsp-src/linux-6.1/arch/riscv/configs/k1_defconfig:

make linux-update-defconfig

u-boot

Configuration:

make uboot-menuconfig

Save the configuration, which is saved by default to bsp-src/uboot-2022.10/configs/k1_defconfig:

make uboot-update-defconfig

Compiling Specified Packages

buildroot supports compiling specified packages, you can refer to make help for the guide. Common commands:

  • Delete the compilation directory of <pkg>: make <pkg>-dirclean
  • Compile <pkg>: make <pkg> To compile the kernel:
make linux-rebuild

To compile u-boot:

make uboot-rebuild

After compiling the specified package, you can download it to the device for verification separately or compile it into the firmware:

make

Compiling Separately

The download address of the cross-compiler: http://archive.spacemit.com/toolchain/, just unzip and use it. Set the environment variables:

export PATH=/path/to/spacemit-toolchain-linux-glibc-x86_64-v0.3.3/bin:$PATH
export CROSS_COMPILE=riscv64-unknown-linux-gnu-
export ARCH=riscv

Compiling opensbi

cd /path/to/opensbi
make -j$(nproc) PLATFORM_DEFCONFIG=k1_defconfig PLATFORM=generic

Compiling u-boot

cd /path/to/uboot-2022.10
make k1_defconfig
make -j$(nproc)

The compilation will generate u-boot-env-default.bin based on board/spacemit/k1-x/k1-x.env, which corresponds to the image of the env partition in the partition table.

Compiling linux

cd /path/to/linux-6.1
make k1_defconfig
LOCALVERSION="" make -j$(nproc)

Local Compilation

Download the opensbi, u-boot, or linux code to Bianbu Desktop to enable local compilation.

Compiling opensbi

cd /path/to/opensbi
make -j$(nproc) PLATFORM_DEFCONFIG=k1_defconfig PLATFORM=generic

Write platform/generic/firmware/fw_dynamic.itb to the opensbi partition using fastboot.

Compiling u-boot

cd /path/to/uboot-2022.10
make k1_defconfig
make -j$(nproc)

Write FSBL.bin, u-boot-env-default.bin, and u-boot.itb to the corresponding partitions using fastboot.

Compiling linux

cd /path/to/linux-6.1
make k1_defconfig
LOCALVERSION="" make -j$(nproc)

Replace the corresponding files in the bootfs partition with arch/riscv/boot/Image.gz.itb and arch/riscv/boot/dts/spacemit/*.dtb.