RK3576 开发板 Docker 编译实战|Ubuntu22.04 编译环境搭建方案

原创 作者 Forlinx 2026-03-10 13:04:00 RK3576 开发板 Docker 编译

作者简介

我是燕南无声,一名拥有12年嵌入式开发经验的工程师,长期专注于嵌入式开发板的源码编译、开发环境搭建及底层驱动开发,擅长运用容器技术高效解决嵌入式开发中的多环境冲突问题。

开发背景与环境冲突解决方案选型

我正在基于飞凌RK3576开发板(OK3576-C开发板)开展源码开发工作,当前开发虚拟机为Ubuntu 18.04系统。由于编译RK3576开发板源码必须依赖Ubuntu 22.04环境,且我需在该虚拟机上维护其他平台的源码,无法直接升级系统,因此面临编译环境与现有开发环境冲突的核心痛点。

RK3576开发板

嵌入式开发中,不同开发板的源码编译对系统版本、编译工具链有着严格要求,飞凌RK3576开发板的6.1.75 Forlinx Desktop24.04版本源码,仅能在Ubuntu 22.04环境下正常编译。若直接将虚拟机Ubuntu 18.04升级至22.04,会破坏原有其他平台的源码编译环境,增加后续维护成本;若重新搭建虚拟机,不仅造成开发资源冗余,还会降低跨虚拟机的源码文件管理效率,不利于多平台源码的同步维护与调试。

Docker作为轻量级容器技术,可实现完全的环境隔离,无需修改虚拟机系统,就能快速搭建指定版本的编译环境;同时其支持本地目录挂载功能,可直接调用虚拟机的源码文件,完美解决了本次开发中的环境冲突问题,这也是嵌入式多平台开发中解决环境兼容问题的常用高效方案。

具体实施步骤

为高效解决该环境冲突问题,我采用Docker搭建Ubuntu 22.04独立编译环境,全程操作基于虚拟机Ubuntu 18.04,具体实施步骤如下:

1. 配置网络环境

登录Docker Hub需科学上网,通过CLASH配置好代理及上网参数,确保镜像下载网络通畅,避免因网络问题导致镜像拉取失败。

2. 下载Ubuntu22.04 Docker镜像

访问Docker Hub官网(https://hub.docker.com/search?q=ubuntu22.04),该网站搜索结果有非常多的Ubuntu22.04相关镜像,主要包括homebrew/ubuntu22.04、openroad/ubuntu22.04、jharwell/ubuntu22.04等。其中homebrew/ubuntu22.04镜像内置Homebrew开源包管理器,更适合作为嵌入式编译基础环境,因此在虚拟机终端执行以下拉取命令,选择该镜像:

docker pull homebrew/ubuntu22.04

拉取完成后,执行sudo docker images命令,可查看已下载的镜像信息,确认目标镜像ID,本次拉取的homebrew/ubuntu22.04镜像ID为80fdda227e1a。查看结果示例如下:

forlinx@forlinx:/T_2T/forlinx/ok3576/docker$ sudo docker images
[sudo] password for forlinx:
REPOSITORY TAG IMAGE ID CREATED SIZE
#这是我们下拉取的镜像
homebrew/ubuntu22.04 latest 80fdda227e1a 7 days ago 1.58GB
ubuntu 22.04 5a81c4b8502e 8 months ago 77.8MB
<none> <none> 990c7d4bdad8 12 months ago 1.12GB
okt507-android7.1-docker18_09_3-ubuntu14_04_6_lts latest f4b83c391255 2 years ago 693MB
jianghaiyang/ubuntu12.04 static_web c3cbc44231c0 7 years ago 228MB

3. 启动容器并挂载源码路径

为满足飞凌RK3576开发板的源码编译需求,启动容器时需将虚拟机源码路径挂载至容器内,执行以下命令:

sudo docker run --privileged=True --rm \
--mount type=bind,source=/T_2T/forlinx/ok3588/Linux-code/OK3588_Linux_fs,target=/mnt \
-i -t 80fdda227e1a

命令中,source为虚拟机源码绝对路径,target为容器内挂载路径,80fdda227e1a为已下载的Ubuntu22.04镜像ID。进入容器后,执行cd /mnt/即可访问虚拟机源码并执行编译命令。需注意:直接拉取的原生镜像可能无法直接完成SDK编译,需补充后续依赖工具;且退出容器后,所有环境配置会全部丢失,后续将介绍环境留存方法。

4. 补充编译所需工具

原生Ubuntu22.04镜像缺少嵌入式源码编译所需的基础工具,需在容器内执行以下命令,安装所有必要依赖:

sudo apt-get install build-essential libncurses* lzop net-tools

5. 留存配置好的编译环境

补充依赖工具后,容器可正常编译飞凌RK3576开发板源码,但退出容器后,所有环境配置会丢失。为实现环境复用,需将配置好的容器保存为镜像,提供以下两种保存方式,适配不同使用场景:

方式一:云保存(需科学上网)

适用于跨设备远程复用环境,需提前在Docker Hub注册个人仓库(本次注册仓库为forlinx123/linux_3576),具体步骤如下:

① 查看运行中的容器ID(本次为dbd2586e6e36);

sudo docker run --privileged=True --rm --mount type=bind,source=/T_2T/forlinx/ok3588/Linux-code/OK3588_Linux_fs,target=/mnt -i -t 80fdda227e1a

② 在虚拟机打开1个新终端,执行以下命令将当前容器提交为本地镜像:

sudo docker commit -m="linux_3576" -a="forlinx123" dbd2586e6e36 forlinx123/linux_3576:v1

参数说明:-m:指定提交描述信息;-a:指定镜像作者;dbd2586e6e36:当前运行的容器ID;forlinx123/linux_3576:v1:目标镜像名(格式为“作者名/仓库名:标签”,需与Docker Hub注册的仓库信息一致)。

③ 执行以下命令登录Docker Hub,验证身份:

sudo docker login -u forlinx123 -p 这里换成自己的密码

④ 登录成功后,将本地镜像推送到远程仓库,完成云保存:

sudo docker push forlinx123/linux_3576:v1

后续跨设备使用时,直接执行docker pull forlinx123/linux_3576:v1命令,即可拉取配置好的编译环境镜像,无需重复配置。

方式二:本地保存(无需网络)

适用于局域网内设备间环境复用,无需网络,核心是将配置好的镜像打包为tar文件,具体步骤如下:

① 同云保存步骤①②,提交容器为本地镜像;

② 执行以下命令,将本地镜像打包为tar文件:

sudo docker save -o linux_3576_v1.tar forlinx123/linux_3576:v1

参数说明:-o:指定输出的tar文件名称;forlinx123/linux_3576:v1:需保存的本地镜像完整名称。

③ 其他设备需使用该环境时,执行以下命令加载tar包,即可快速恢复编译环境:

sudo docker load -i linux_3576_v1.tar

本次基于homebrew/ubuntu22.04镜像制作的飞凌RK3576 AMP编译容器,tar包大小约3.07G,建议开发者自行按步骤制作容器tar包。 如需压缩包请联系客服索取。

实践验证与开发总结

通过上述全部步骤,我成功在Docker中搭建了Ubuntu 22.04编译环境,挂载虚拟机源码后,可正常执行飞凌RK3576开发板源码的全编译命令;补充编译工具后,编译过程无任何环境相关报错,最终实现了在不修改虚拟机Ubuntu 18.04系统的前提下,完成OK3576源码编译,同时保留了原有其他平台源码的维护环境。

将配置好的容器保存为镜像后,我在另一台Ubuntu虚拟机中,分别通过Docker Hub拉取和本地tar包加载两种方式测试,均能快速恢复完整编译环境,无需重新安装依赖工具,大幅提升了开发效率。本次实践再次验证,在嵌入式多平台开发中,容器技术是解决环境隔离与环境复用问题的高效方案之一,通过标准化的镜像保存与分发,可有效降低跨设备、跨团队的开发环境搭建成本。

结合本次实践经验,使用Docker搭建嵌入式编译环境时,需重点注意三点:一是镜像基础版本的合理选择,优先选择内置必要工具(如Homebrew)的镜像,减少后续依赖安装工作量;二是源码路径的正确挂载,避免因路径错误导致无法访问源码;三是编译工具的完整安装,确保满足源码编译需求。同时建议及时将配置好的环境保存为镜像,避免重复进行环境配置。

Docker常用命令

1. 查看所有镜像:sudo docker images

2. 删除单个镜像:sudo docker rmi 镜像名:标签(示例:sudo docker rmi homebrew/ubuntu22.04、sudo docker rmi forlinx123/linux_3576:v1)

3. 查看正在运行的容器:sudo docker ps

咨询立即获得专属报价

华北区负责人二维码

华北区负责人

华东区负责人二维码

华东区负责人

华南区负责人二维码

华南区负责人

中西区负责人二维码

中西区负责人

相关产品 >

  • FET3576-C核心板

    飞凌嵌入式RK3576核心板集成了强大的处理器和丰富的接口,提供出色的计算能力和扩展性。RK3576核心板以其卓越的性能、低功耗和稳定性,成为工业、AIoT、边缘计算、智能移动终端等领域的理想选择。无论是数据处理还是边缘计算,RK3576都能为项目提供强大的硬件支持。核心板推荐选择飞凌嵌入式瑞芯微系列RK3576J业级核心板、RK3576高性能核心板 了解详情
    FET3576-C核心板
  • OK3576-C开发板

    RK3576开发板CPU选用瑞芯微RK3576,采用核心板+底板分体式设计,采用4个100Pin板对板连接器的方式将处理器的功能引脚以最便利的方式全部引出,并针对不同的功能做了深度优化,方便用户二次开发的同时简化用户设计,为您的项目提供良好的评估及设计依据。RK3576是瑞芯微专为AIoT市场打造的一款高算力、高性能、低功耗的国产化应用处理器,集成了4个ARM Cortex-A72和4个 ARM Cortex-A53高性能核;内置6TOPS超强算力NPU;嵌入式3D GPU加之带有MMU的专用2D硬件引擎,最大限度提升显示性能;H.265超清硬解码,最高支持8K分辨率。 了解详情
    OK3576-C开发板

推荐阅读 换一批 换一批