跳到主要内容

源码

本文档介绍SDK源码的开发环境、下载和编译方式。

开发环境

硬件配置

推荐配置:

  • CPU:12th Gen Intel(R) Core(TM) i5或以上
  • Memory:16GB或以上
  • Disk:SSD,256GB或以上

操作系统

推荐Ubuntu 20.04或更新LTS版本,其他Linux发行版本没有测试。

安装依赖

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

下载

  1. 下载前先参考这篇文档设置SSH Keys,因为Bianbu Linux代码托管在Gitee上。

  2. 使用repo --version确认版本和repo源,要求repo(版本 >= 2.41)和tsinghua源下载完整SDK,否则下载过程会异常。 如果不满足版本要求或者非tsinghua源,参考Git Repo 镜像使用帮助安装。

repo --version
repo version v2.48
(from https://mirrors.tuna.tsinghua.edu.cn/git/git-repo)
(tracking refs/heads/stable)
(Mon, 7 Oct 2024 18:44:19 +0000)
repo launcher version 2.50
(from /usr/bin/repo)
(currently at 2.48)
repo User-Agent git-repo/2.48 (Linux) git/2.25.1 Python/3.8.10
git 2.25.1
git User-Agent git/2.25.1 (Linux) git-repo/2.48
Python 3.8.10 (default, Nov 7 2024, 13:10:47)
[GCC 9.4.0]
OS Linux 5.4.0-196-generic (#216-Ubuntu SMP Thu Aug 29 13:26:53 UTC 2024)
CPU x86_64 (x86_64)
Bug reports: https://issues.gerritcodereview.com/issues/new?component=1370071
  1. 下载最新2.0代码:
mkdir ~/bianbu-linux-2.0
cd ~/bianbu-linux-2.0
repo init -u git@gitee.com:bianbu-linux/manifests.git -b main -m bl-v2.0.y.xml
repo sync
repo start bl-v2.0.y --all

推荐提前下载buildroot依赖的第三方软件包,并在团队内部分发,避免主服务器网络拥塞。

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

目录结构

├── bsp-src               # 存放linux kernel、uboot、opensbi源码
│ ├── linux-6.6
│ ├── opensbi
│ └── uboot-2022.10
├── buildroot # buildroot主目录
├── buildroot-ext # 客制化扩展,包含board、configs、package、patches子目录
├── Makefile # 顶层Makefile
├── package-src # 本地展开的应用或库源码目录
│ ├── ai-support
│ ├── drm-test
│ ├── img-gpu-powervr
│ ├── k1x-cam
│ ├── k1x-jpu
│ ├── k1x-vpu-firmware
│ ├── k1x-vpu-test
│ ├── mesa3d
│ ├── mpp
│ └── v2d-test
└── scripts # 编译使用到的脚本

交叉编译

Bianbu Linux 2.0 首次完整编译

首次编译,建议使用make envconfig完整编译。

修改了buildroot-ext/configs/spacemit_<solution>_defconfig,要使用make envconfig编译。

其他情况,使用make编译即可。

cd ~/bianbu-linux
make envconfig
Available configs in buildroot-ext/configs/:
1. spacemit_k1_defconfig
2. spacemit_k1_upstream_defconfig
3. spacemit_k1_minimal_defconfig
4. spacemit_k1_plt_defconfig
5. spacemit_k1_rt_defconfig
6. spacemit_k1_v2_defconfig


your choice (1-6):

编译Bianbu Linux 2.0版本,输入6,然后回车即开始编译。

编译过程可能需要下载一些第三方软件包,具体耗时和网络环境相关。如果提前下载buildroot依赖的第三方软件包,推荐硬件配置编译耗时约为1小时。

Images successfully packed into /home/username/bianbu-linux/output/k1_v2/images/bianbu-linux-k1_v2.zip


Generating sdcard.img...................................
INFO: cmd: "mkdir -p "/home/username/bianbu-linux/output/k1_v2/build/genimage.tmp"" (stderr):
INFO: cmd: "rm -rf "/home/username/bianbu-linux/output/k1_v2/build/genimage.tmp"/*" (stderr):
INFO: cmd: "mkdir -p "/home/username/bianbu-linux/output/k1_v2/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_v2/images/bianbu-linux-k1_v2-sdcard.img

其中bianbu-linux-k1_v2.zip适用于Titan Flasher,或者解压后用fastboot刷机;bianbu-linux-k1_v2-sdcard.img为sdcard固件,解压后可以用dd命令或者balenaEtcher写入sdcard。

Titan Flasher使用指南:刷机工具使用指南

固件默认用户名:root,密码:bianbu

Bianbu PREEMPT_RT Linux 首次完整编译

首次编译,建议使用make envconfig完整编译。

修改了buildroot-ext/configs/spacemit_<solution>_defconfig,要使用make envconfig编译。

其他情况,使用make编译即可。

cd ~/bianbu-linux
make envconfig
Available configs in buildroot-ext/configs/:
1. spacemit_k1_defconfig
2. spacemit_k1_upstream_defconfig
3. spacemit_k1_minimal_defconfig
4. spacemit_k1_plt_defconfig
5. spacemit_k1_rt_defconfig
6. spacemit_k1_v2_defconfig


your choice (1-6):

Bianbu Linux 2.0支持实时Linux(PREEMPT_RT)内核编译,输入5,然后回车即开始编译,首次编译过程中会自动打上PREEMPT_RT补丁

buildroot-ext/configs//spacemit_k1_rt_defconfig
Patching linux with PREEMPT_RT patch
Applying rt-linux-support.patch using patch:
...

编译完成,可以看到:

Images successfully packed into /home/username/bianbu-linux/output/k1_rt/images/bianbu-linux-k1_rt.zip
...
Successfully generated at /home/username/work/bianbu-linux/output/k1_rt/images/bianbu-linux-k1_rt-sdcard.img

配置

buildroot

配置:

make menuconfig

保存配置,默认保存到buildroot-ext/configs/spacemit_k1_v2_defconfig

make savedefconfig

linux

配置:

make linux-menuconfig

保存配置,默认保存到bsp-src/linux-6.6/arch/riscv/configs/k1_defconfig

make linux-update-defconfig

u-boot

配置:

make uboot-menuconfig

保存配置,默认保存到bsp-src/uboot-2022.10/configs/k1_defconfig

make uboot-update-defconfig

再次完整编译

如果已经使用make envconfig完整编译,可以直接使用make再次完整编译。

编译指定包

buildroot支持编译指定package,可以make help查看指南。

常用命令:

  • 删除<pkg>的编译目录:make <pkg>-dirclean
  • 编译<pkg>make <pkg>

编译内核:

make linux-rebuild

编译u-boot:

make uboot-rebuild

编译指定包之后,可以单独下载到设备验证,或者编进固件:

make

单独编译

交叉编译器下载地址:http://archive.spacemit.com/toolchain/,解压即可使用。

例如spacemit-toolchain-linux-glibc-x86_64-v1.0.0.tar.xz

sudo tar -Jxf /path/to/spacemit-toolchain-linux-glibc-x86_64-v1.0.0.tar.xz -C /opt

设置环境变量:

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

编译 opensbi

cd bsp-src/opensbi
make -j$(nproc) PLATFORM_DEFCONFIG=k1_defconfig PLATFORM=generic

编译最终生成 platform/generic/firmware/fw_dynamic.itb

编译 u-boot

cd bsp-src/uboot-2022.10
make k1_defconfig
make -j$(nproc)

编译会根据 board/spacemit/k1-x/k1-x.env 生成 u-boot-env-default.bin,对应分区表 env 分区的镜像,以及生成 FSBL.binu-boot.itb

编译linux

cd bsp-src/linux-6.6
make k1_defconfig
LOCALVERSION="" make -j$(nproc)