当前位置: 首页 > news >正文

【瑞芯微】【rk3128】【01.使用docker搭建rk3128 编译烧录环境】

一、引言

作为一名嵌入式开发人员, 看到好多同僚 一直习惯于 在 windows 下安装一个虚拟机。虚拟机里面跑 ubuntu; 然后在里面搭建各种开发环境。里面各种操作,让我有点眼花缭乱。不能说他们的方式不好,只能说 我个人能力不足,驾驭不了这么复杂的工况。

嵌入式开发中不同的平台要求的编译环境可能都不一样。例如同样的 瑞芯微家的 rk3128 和 rk3399 他们编译所要求的环境也不一样。 如果每个平台都需要装一个虚拟机,是不是 磁盘空间首先就让人抓狂啊。而且由于虚拟机会消耗一部分cpu. 这样也加大了 cpu 的负载。

那有没有一种其他的思路呢? 答案肯定是有的。

  • 我们可以使用 docker, 来搭建我们的开发环境。
  • 首先声明一下,我这里不使用windows.
  • 目前我的 host os : ubuntu 24.04

二、docker 环境

1. docker 安装

docker 如何在 ubuntu 上安装, 网上有大量教程。请自行查阅,这里不再废话。

2. docker 换源

2.1 创建/编辑

  • /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.1ms.run","https://docker-0.unsee.tech","https://docker.m.daocloud.io"],"live-restore": true,"features": { "buildkit": true }
}

2.2 重置并重启

sudo systemctl daemon-reload
sudo systemctl restart docker

3. 编写docker 配置文件

  • Dockerfile.enhanced
FROM ubuntu:18.04USER root# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive \LANG=C.UTF-8 \LC_ALL=C.UTF-8 \TZ=Asia/Shanghai# 设置构建时参数,允许在容器内创建硬链接
ARG DOCKER_BUILDKIT=1# 使用国内镜像源加速下载
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && \sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list# 更新软件列表并安装所有必要的包(一次性安装,减少层数)
RUN apt-get update && apt-get install -y \git-core \gnupg \flex \bison \gperf \build-essential \zip \unzip \curl \zlib1g-dev \gcc-multilib \g++-multilib \libc6-dev-i386 \lib32ncurses5-dev \x11proto-core-dev \libx11-dev \lib32z-dev \ccache \libgl1-mesa-dev \libxml2-utils \xsltproc \tzdata \locales \sudo \gawk bc python libssl-dev time\git-core gnupg flex bison gperf build-essential zip \curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev \ccache libgl1-mesa-dev libxml2-utils xsltproc unzip \expect moreutils  coreutils expect-dev\wget cpio rsync patchelf \&& rm -rf /var/lib/apt/lists/*# 设置时区
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \echo "Asia/Shanghai" > /etc/timezone && \dpkg-reconfigure -f noninteractive tzdata# 配置 locale
RUN locale-gen en_US.UTF-8 && \update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8# 创建开发用户
RUN useradd -m -s /bin/bash developer && \echo 'developer:password' | chpasswd && \usermod -aG sudo developer && \echo 'developer ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers# 设置工作目录
WORKDIR /workspace# 创建一些必要的目录并设置权限
RUN mkdir -p /workspace && \chown developer:developer /workspace# 切换用户
USER developer# 设置默认命令
CMD ["/bin/bash"]

4. 编译docker 镜像

docker build -f Dockerfile.enhanced -t hai_zhuo_rk3128_ubuntu18-dev .# 进入该镜像
docker run -it --name hai_zhuo_rk3128 hai_zhuo_rk3128_ubuntu18-dev

5. 保存镜像为 tar 文件

# 查看现有镜像
docker images# 或者使用更高效的压缩
docker save hai_zhuo_rk3128_ubuntu18-dev:latest | xz -z > rk3128-build-env.tar.xz

6. 打包发布

将 rk3128-build-env.tar.xz 和下面的命令 需要得人,就可以直接用。

# 创建运行脚本
cat > run.sh << 'EOF'
#!/bin/bashecho "=== RK3128 开发环境 ==="# 检查 Docker 是否安装
if ! command -v docker &> /dev/null; thenecho "错误: 请先安装 Docker"echo "安装命令: curl -fsSL https://get.docker.com | sh"exit 1
fi# 加载镜像
echo "正在加载开发环境镜像..."
docker load -i rk3128-build-env.tar.xz# 创建项目目录
mkdir -p workspace# 运行开发环境
echo "正在启动 RK3128 开发环境..."
echo "项目文件保存在 ./workspace 目录中"cd workspacedocker run -it --privileged \--tmpfs /tmp:exec \--mount type=tmpfs,destination=/var/tmp \-v $(pwd):/workspace:rshared \-w /workspace \hai_zhuo_rk3128_ubuntu18-devecho "开发环境已退出"
EOF

7. 创建快捷进入 docker 脚本

#!/bin/bash
CONTAINER_NAME="my_rk3128_dev"# 检查容器是否存在
if docker ps -a | grep -q $CONTAINER_NAME; thenecho "进入已存在的开发环境..."docker start $CONTAINER_NAMEdocker exec -it $CONTAINER_NAME bash
elseecho "创建新的开发环境..."docker run -it \--name $CONTAINER_NAME \--privileged \--tmpfs /tmp:exec \--mount type=tmpfs,destination=/var/tmp \-v $(pwd):/workspace:rshared \-w /workspace \hai_zhuo_rk3128_ubuntu18-dev
fi

运行:

chmod +x enter_dev.sh
./enter_dev.sh

8. 完整清理流程

docker 如果不想用,可以将其清掉

# 查看所有镜像
docker images# 查看详细镜像信息
docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedSince}}"# 查看镜像磁盘使用情况
docker system df

# 1. 停止所有容器
docker stop $(docker ps -aq) 2>/dev/null# 2. 删除所有容器
docker rm $(docker ps -aq) 2>/dev/null# 3. 删除所有悬空镜像
docker images -f "dangling=true" -q | xargs docker rmi -f 2>/dev/null# 4. 删除所有镜像
docker rmi -f $(docker images -aq) 2>/dev/null# 5. 清理构建缓存
docker builder prune -f# 6. 清理所有未使用的资源
docker system prune -a -f --volumes

三、编译 / 烧录 rk3128

1. 编译打包镜像


# 进入 docker 环境
(base) leo@leo:~/sda_1.6TB/hai_zhuo/rk3128$ ./docker_env/init.sh 
进入已存在的开发环境...
my_rk3128_dev
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.# 进入 源码目录
developer@c8aa26115a95:/workspace$ cd RK3128/# 导入环境变量
developer@c8aa26115a95:/workspace/RK3128$ ./build.sh lunchprocessing option: lunchYou're building on LinuxLunch menu...pick a combo:1. default BoardConfig.mk2. BoardConfig.mk3. BoardConfig_debian.mk4. BoardConfig_rp3128_buildroot.mkWhich would you like? [0]: 3switching to board: /workspace/RK3128/device/rockchip/rk3128/BoardConfig_rp3128_buildroot.mk
# 开始编译
developer@c8aa26115a95:/workspace/RK3128$ ./build.sh
Make firmware OK!
------ OK ------
********RKImageMaker ver 1.66********
Generating new image, please wait...
Writing head info...
Writing boot file...
Writing firmware...
Generating MD5 data...
MD5 data generated successfully!
New image generated successfully!
Making update.img OK.
/workspace/RK3128
Make update image ok!# 打包镜像
developer@c8aa26115a95:/workspace/RK3128$ ./build.sh  updateimg
processing option: updateimg
Make update.img
start to make update.img...
Android Firmware Package Tool v1.66
------ PACKAGE ------
Add file: ./package-file
Add file: ./package-file done,offset=0x800,size=0x28f,userspace=0x1
Add file: ./Image/MiniLoaderAll.bin
...
Add CRC...
Make firmware OK!
------ OK ------
********RKImageMaker ver 1.66********
Generating new image, please wait...
Writing head info...
Writing boot file...
Writing firmware...
Generating MD5 data...
MD5 data generated successfully!
New image generated successfully!
Making update.img OK.
/workspace/RK3128
Make update image ok!

2. 烧录

在这里插入图片描述

在这里插入图片描述

首先按住 MASKROM 升级按键 不松开, 按一下 复位按键 , 进入 MASKROM 模式。

lsusbBus 001 Device 011: ID 2207:310c Fuzhou Rockchip Electronics Company RK3126/RK3128 in Mask ROM mode
(base) leo@leo:~/sda_1.6TB/hai_zhuo/rk3128/RK3128$ sudo ./rkflash.sh 
[sudo] leo 的密码: 
flash all images as default
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
Loading loader...
Support Type:RK312A	Loader ver:2.56	Loader Time:2025-10-26 15:51:30
Upgrade loader ok.
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
directlba=1,first4access=1,gpt=1
Write gpt...
Write gpt ok.
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
directlba=1,first4access=1,gpt=1
Download uboot start...(0x00002000)
Download image ok.
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
directlba=1,first4access=1,gpt=1
Download trust start...(0x00003000)
Download image ok.
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
directlba=1,first4access=1,gpt=1
Download boot start...(0x00004800)
Download image ok.
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
directlba=1,first4access=1,gpt=1
Download recovery start...(0x00008800)
Download image ok.
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
directlba=1,first4access=1,gpt=1
Download misc start...(0x00004000)
Download image ok.
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
directlba=1,first4access=1,gpt=1
Download oem start...(0x00012800)
Download image ok.
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
directlba=1,first4access=1,gpt=1
Download userdata start...(0x0021c800)
Download image ok.
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
directlba=1,first4access=1,gpt=1
Download rootfs start...(0x0001c800)
Download image ok.
Program Data in /home/leo/sda_1.6TB/hai_zhuo/rk3128/RK3128/tools/linux/Linux_Upgrade_Tool/Linux_Upgrade_Tool
Reset Device OK.
(base) leo@leo:~/sda_1.6TB/hai_zhuo/rk3128/RK3128$
http://www.dtcms.com/a/532982.html

相关文章:

  • 企业官网网站优化公司现在网站给源码
  • 知春路网站建设网站建设网络推广柯
  • 002-Spring AI Alibaba Prompt 功能完整案例
  • 网站栏目设计优化方案驾校网站源码下载
  • 大模型-模型压缩:量化、剪枝、蒸馏、二值化 (2)
  • 做文章网站汕尾建设网站首页
  • 数据结构<C++>——链表
  • 数据结构-并查集
  • 该如何建设和优化一个网站网页设计与制作工资多少
  • 建设自己的网站有什么wordpress radiate
  • Peppa Pig - Gardening
  • 蒙文门户网站建设淘宝seo搜索优化工具
  • html基本标签
  • 肇庆网站制作软件枫林seo
  • 网站地址申请极简网站模板
  • 《首屏加载优化手册:Vue3+Element Plus项目提速的技术细节》
  • typora1.9.5安装与激活
  • 自适应网站模板企业网站建设一般步骤
  • 我在高职教STM32(新07)——按键输入实验
  • Rust 与 WebAssembly:构建高效前端应用的全流程复盘
  • 网站百度搜索情况和反链接优化建议哪里有营销型网站最新报价
  • 设计模式-备忘录模式(Memento)
  • 河南建设厅特种工报考网站网站管理与建设总结
  • 烟台网站建设推广网站建设交印花税嘛
  • 魔兽做宏网站qq登录网页版一键登录
  • 做问卷调查的网站挣钱安徽城乡建设厅网站
  • 设计模式-装饰模式(Decorator)
  • Linux内核驱动开发 - 字符设备驱动深度解析
  • kafka高可靠性
  • 个人网站怎么制作成图片如何在WordPress添加内容