Linux SDK支持buildroot、Yocto以及Debian三种根文件系统,Linux内核版本为4.19、U-Boot版本为2017.09。
sudo apt-get update
sudo apt-get install curl python2.7 python-pyelftools git ssh make gcc libssl-dev liblz4-tool expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib unzip device-tree-compiler python3-pip libncurses-dev python3-pyelftools vim mtd-utils
repo是建立在 Git上的一个多仓库管理工具,可以组织多个仓库的上传和下载, 用于 管理多个 Git存储仓库。 RK3568 Linux SDK中 代码和相关文档被划分成了若干 个 git仓库分别进行版本管理 SDK包含了若干个 git仓库) ),开发者可以使用 repo工具 对这些 git仓库进行统一下载、提交、切换分支等操作。
mkdir ~/bin
export PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod a+x ~/bin/repo
git config --global user.name "your name"
git config --global user.email "your email"
配置完成后,通过以下指令查看配置结果
git config --list

在编译根文件系统的过程中会通过网络下载很多的第三方库文件 ;首先下载过程会占用很多时间导致编译时间拉长;其次,如果用户的网络环境不稳定或者第三方库文件的下载源发生变更,很容易导致下载失败 ,进而导致根文件系统编译出错;所以,为了加快根文件系统的编译过程、也为了 降低 编译根文件系统 时出现问题的概率, 我们可以预先把编译根文件系统所需的第三方库文件拷贝到 SDK中。
将步骤a中下载 dl.tgz文件拷贝到\wsl.localhost\Ubuntu-20.04\home{你的linux用户名}中, 然后运行解压指令。
cd ~
tar -xzf dl.tgz -C ~/rk3568_linux_sdk/buildroot/
解压后就会在~/rk3568_linux_sdk/buildroot/dl/中看到第三方源码了。

SDK源码根 目录下 包含 有 app、 buildroot、 debian、 device、 external、 tools、 u-boot、 yocto等 多个 目录 每个目录或其子目录会对应一个 git工程 ;因为 SDK的代码和相关文档被划分成了若干 git仓库分别进行版本管理( 所以 SDK实际上 包含 有 若干 git仓库) ),它们按照功能、所属模块划分
⚫ app:存放上层应用 app 包括 Qt应用程序,以及其它的 C/C++应用程序。
⚫ buildroot:基于 buildroot开发的根文件系统。
⚫ debian:基于 Debian开发的根文件系统。
⚫ device/rockchip 存放各芯片板级配置 文件 和 Parameter分区表 文件,以及一些编译与
打包固件的脚本和预备文件 。
⚫ docs:存放芯片模块开发指导文档、平台支持列表、芯片平台相关文档、 Linux开发指
南等。
⚫ external:存放 所需 的 第三方库 ,包括音频、视频、网络、 recovery等。
⚫ kernel Linux 4.19版本内核源码。
⚫ prebuilts:存放交叉编译工具链。
⚫ rkbin:存放 Rockchip相关的 Binary和工具。
⚫ rockdev:存放编译输出固件 ,编译 SDK后才会生成该文件夹 。
⚫ tools:存放 Linux和 Windows操作系统环境下常用 的 工具,包括镜像烧录工具、 SD卡
升级启动制作工具 、批量烧录工具等 ,譬如前面给大家介绍的 RKDevTool工具以及
Linux_Upgrade_Tool工具 都存放在该目录 。
⚫ u-boot:基于 v2017.09版本进行开发的 uboot源码。
⚫ yocto:基于 Yocto开发 的 根文件系统。

从下至上 分为 Bootloader、 Linux Kernel、 Libraries、 Ap-plications四个层次,各层次内容如下:
realpath .repo/manifests/rk3568_linux_release.xml
ls .repo/manifests/rk356x_linux/rk356x_linux_release*
执行编译指令
cd ~/rk3568_linux_sdk/
./build.sh lunch
这时,会让选择配置文件,选择第3个,BoardConfig-rk3568-atk-evb1-ddr4-v10.mk

build.sh 指令详情可以通过./build.sh -h查询。具体如下:
./build.sh -h
使用如下
Usage: build.sh [OPTIONS]
Available options:
BoardConfig*.mk -switch to specified board config
lunch -list current SDK boards and switch to specified board config
uboot -build uboot
uefi -build uefi
spl -build spl
loader -build loader
kernel -build kernel
modules -build kernel modules
toolchain -build toolchain
rootfs -build default rootfs, currently build buildroot as default
buildroot -build buildroot rootfs
ramboot -build ramboot image
multi-npu_boot -build boot image for multi-npu board
yocto -build yocto rootfs
debian -build debian rootfs
pcba -build pcba
recovery -build recovery
all -build uboot, kernel, rootfs, recovery image
cleanall -clean uboot, kernel, rootfs, recovery
firmware -pack all the image we need to boot up system
updateimg -pack update image
otapackage -pack ab update otapackage image (update_ota.img)
sdpackage -pack update sdcard package image (update_sdcard.img)
save -save images, patches, commands used to debug
allsave -build all & firmware & updateimg & save
check -check the environment of building
info -see the current board building information
app/<pkg> -build packages in the dir of app/*
external/<pkg> -build packages in the dir of external/*
createkeys -create secureboot root keys
security_rootfs -build rootfs and some relevant images with security paramter (just for dm-v)
security_boot -build boot with security paramter
security_uboot -build uboot with security paramter
security_recovery -build recovery with security paramter
security_check -check security paramter if it's good
Default option is 'allsave'.
执行以下命令进行SDK全编译
./build.sh all
接下来就是漫长的编译过程,编译结束后会出现以下输出

./build.sh firmware
./build.sh updateimg
这样,在rockdev文件夹生成update.img文件

编译后各个镜像如下表
| 名称 | 作用 |
|---|---|
| uboot.img | uboot.img是一种 FIT格式镜像,它 由多个镜像合并而成, 其中 包括trust镜像( ARM Trusted Firmware + OP-TEE OS 、 u-boot镜像、 u-boot dtb 编译 U-Boot时会将 这些镜像打包成 一个uboot.img。uboot.img会烧录到开发板 uboot分区 |
| boot.img | boot.img也是一种 FIT格式镜像, 它也是由多个镜像合并而成, 其中包括 内核镜像 、 内核 DTB、 资源镜像 resource.img。boot.img会烧录到开发板 boot分区 |
| MiniLoaderAll.bin | 该镜像是运行在 RK3568平台 U-Boot之前 的一段 Loader代码(也就是比 U-Boot更早阶段的 Loader MiniLoaderAll.bin由 TPL和 SPL两部分组成TPL用于初始化 DDR,运行在 SRAM 而 SPL运行在DDR,主要负责 加载 、 引导 uboot.img。 |
| misc.img | 包含BCB Bootloader Control Block 信息 ,该镜像会烧写到 开发板misc分区。misc分区是一个很重要的分区,其中存放了 BCB数据块,主要用于Android/Linux系统 、 U-Boot以及 recovery之间的通信 |
| oem.img | 给厂家使用,用于存放厂家的APP或数据,该镜像会烧写至开发板oem分区,系统启动之后会 将其 挂载到 /oem目录。 |
| parameter.txt | 一个txt文本文件,是 RK3568平台的分区表 文件 (记录分区名以及每个分区它的起始地址、结束地址);烧写镜像时,并不需要将parameter.txt文件 烧写 到 Flash 而是 会读取它的信息去定义分区。 |
| recovery.img | recovery模式 镜像, recovery.img用于进入 recovery模式 recovery.img会烧录到开发板 recovery分区 。recovery模式是一种用于对设备进行修复、升级更新的模式 。 recovery.img也是 FIT格式 镜像 也是由多个镜像合并而成,其中包括ramdisk(进入 recovery模式时 挂载 该 根文件系统 、内核镜像 (进入recovery模式时启动该内核镜像) 、 内核 DTB以及 resource.img。 |
| rootfs.img | 正常启动模式下对应的根文件系统镜像, 包含有大量的库文件、可执行文件等 |
| userdata.img | 给用户使用,可用于存放用户的App或数据; 该镜像会烧写至开发板 userdata分区,系统启动之后, 会 将其挂载到 /userdata目录 |
buildroot帮我们预置了N多有用的第三方库,我们可以根据自己的需求选择要打包的第三方库,具体做法执行以下指令:
cd rk3568_linux_sdk/buildroot/
make menuconfig
然后会出现图形化配置窗口

选择 Target Packages,就可以选择和删除第三方包了,完成后 保存。
继续运行编译指令即可
./build.sh
Linux系统 内存不足,问题如下图

解决方法:增加内存,一般来说,基于WSL的虚拟机不会遇到这个问题【前提是我们的win11电脑内存8个G以上】
Python语法问题,如下图所示

解决方法:修改对应代码,改为python3语法
修改 kernel/scripts/mkmultidtb.py 中的39行为
python(__doc__)
保存后重新运行编译代码。
还有个别需要修改 的地方,自行修改即可。
Debian SDK需要在buildroot的基础上编译,所以要先按照第2部分的指导编译Buildroot镜像
cd debian
sudo apt-get install binfmt-support qemu-user-static live-build
sudo dpkg -i ubuntu-build-service/packages/*
sudo apt-get install -f
./build.sh debian
打开windows 瑞芯微开发工具

右击列表中空白之处,选择导入配置菜单,选择config.cfg文件。

板子进入loader模式,与电脑连接的USB需要插入OTG端口,按住开发板 V+按键,然后开发板上电或复位,即可进入Loader模式
瑞芯微开发工具会显示“发现一个LOADDER”设备
点击升级固件Tab标签,选择固件编译好的update.img,点击升级即可。完成

./build.sh cleanall