我们选择使用 RK3576 作为主控芯片,因为后边会需要计算双目深度,所以对CPU性能有所要求,但也不用到 RK3588 这种程度。
它的核心板长这样:

我们采用核心板+载板的形式,目前载板采用开发板,生产时会再画一张载板:

如果买板子是个人或者学生研究和学习的话,大概会给资料,然后自生自灭。
但是如果是公司研发买板子的话,会给拉一个技术交流群。
品牌是定昌的,官方给的资料还是非常全的。核心板的文档里面提供了Linux源码、编译后的固件。
由于我们需要做的工作还是比较底层的,所以我们从源码开始。
开始之前
牵扯到Linux的编译,使用Windows可能也未必不行,但是最好有一个Ubuntu能减少麻烦,如果有双系统或者物理机最好了,WSL也不是不行。
接下来我将使用 WSL Ubuntu 24.04
在一个能用WSL后端的Docker Desktop的机器上,WSL2是已经装好了的,直接使用wsl命令安装一个Ubuntu即可。
如果使用WSL,建议把WSL的存储挪一下位置,不要放在系统盘。
无论是正在使用原生的VS Code,还是使用Antigravity之类的衍生VS Code,都可以连接到远程Linux做开发,由于我用不习惯Linux写代码,所以我会使用VS Code连接WSL远程开发。
后续编译有一个环节要求PATH中不能有空白字符,WSL默认会把Windows的PATH注入进来,可以选择后续临时修改,也可以事先禁止WSL的PATH注入:
在 /etc/wsl.conf 添加:
[interop]
appendWindowsPath = false然后重启WSL
解压
从官方文档拿到 repo_rk3576_sdk_open_250903.tar.gz ,据测试 BandiZip 是无法解压这个 .tar.gz 文件的,而且不可以在Windows文件系统中解压(也就是不可以使用WSL的 /mnt 分区,也不可以使用w64devkit之类工具提供的tar命令),在Windows文件系统中解压会报错~
WSL使用解压命令进行解压 tar -xzvf repo_rk3576_sdk_open_250903.tar.gz -C /目标路径
Hello World
先不管其他的,先按照官方文档,编译一次固件吧~
安装工具链
apt-get install -y gcc g++ make build-essential libssl-dev libncurses5-dev libncursesw5-dev bc rsync cpio u-boot-tools pkg-config libelf-dev lz4 flex libgmp-dev libmpc-dev bison gettext unzip首次全量编译
按照官方的文档,执行 ./build.sh 会进行一次全量编译,第一次执行需要选择配置文件,按照官方选择 ztl_rk3576_cm_defconfig
编译可能会失败,网络错误则重试,提示缺什么就装什么。
编译好的固件会放在 output/firmware ,Windows直接访问的话需要注意这里面都是软链接。
从来没有人告诉我,固件是一堆文件,我一直以为是一个文件,因为以前见的都是只有一个文件,事实上如果希望把固件都变成一个文件,需要再进行一步,把固件打包。
烧录
官方提供了 tools/windows/RKDevTool_Release_v3.37.zip 用于烧录。
使用之前应当先安装 tools/windows/DriverAssitant_v5.13.zip 驱动。
我手上的这块开发板上有两个按钮,PWR和UP/RST
板子出厂时应该是已经刷入 Android 了,直接上电芯片会比较热,如果是空白的板子,可以直接开机进入烧录,在已经有固件的情况下,据测试,需要在上电的时候按下UP/RST。
烧录模式下 RKDevTool 会自动检测到板子。
每个固件文件的偏移量在编译固件的时候就已经确定好了,使用 RKDevTool 工具需要先右键点击固件列表,选择 导入配置( parameter.txt) 然后再依次选择并勾选每个固件的位置,其中 backup 不勾选也选择。
烧录完成后板子会自动重启。
不出意外的话,操作系统上会带 adb 可以直接 adb shell 打开终端。
定制
既然每一步都是在我们的机器上编译打包的,那也就意味着我们有任何权限,可以随意定制这个操作系统。
从上电到引导进入 Linux 内核这一块我们先不操心,设备树也是官方配好了的,我们就先看看怎么删减和增加 Linux 内的软件吧。
目前是带了桌面的,接下来我希望不要有桌面,并安装Docker。
至于为什么装Docker,因为编译 ROS2 非常麻烦,不如干脆直接在docker中跑。
在 buildroot/configs 中有很多配置文件,我这里使用的是 rockchip_rk3576_defconfig ,具体使用的哪一个,在 build 的时候日志里面会有。
我注释掉了这些:
// #include "tools/benchmark.config"
// #include "tools/test.config"
// #include "network/chromium.config"
// #include "gui/weston.config"然后创建了一个新的文件并导入#include "ffeng/docker.config"
# docker
BR2_PACKAGE_AUDIT=y
BR2_PACKAGE_DOCKER_CLI=y
BR2_PACKAGE_DOCKER_CLI_STATIC=y
BR2_PACKAGE_DOCKER_COMPOSE=y
BR2_PACKAGE_DOCKER_ENGINE=y
BR2_PACKAGE_DOCKER_ENGINE_DRIVER_BTRFS=y
BR2_PACKAGE_DOCKER_ENGINE_DRIVER_DEVICEMAPPER=y
BR2_PACKAGE_DOCKER_ENGINE_DRIVER_VFS=y
BR2_PACKAGE_DOCKER_ENGINE_EXPERIMENTAL=y编译后,系统就去掉了多余的图形界面,docker命令也能用了。
虽然不是自己动手移植的,但编译Linux,这也将是我的里程碑




















