当前位置:   article > 正文

在docker容器中编译 rk3588 ubuntu固件

在docker容器中编译 rk3588 ubuntu固件

文件准备

  • Linux SDK ---- rk3588_linux_release_20230114_v1.0.6c_0*
  • Ubuntu根文件系统 ---- Ubuntu22.04-Xfce_RK3588_v3.11-27_20240410.img.7z

硬件环境

  • 一个可联网的linux机器,并且装有docker

打包一个docker编译环境

Dockerfile内容

直接通过dockerfile构建方便快捷

  1. # Base Image
  2. from ubuntu:18.04
  3. # Author
  4. LABEL maintainer="huangjiaobai <huangjiaobai@demo.com>"
  5. # expect
  6. RUN apt-get update && apt-get install -y \
  7. build-essential \
  8. cmake \
  9. git \
  10. libcurl4-openssl-dev \
  11. libgtest-dev \
  12. libxml2-dev \
  13. pkg-config repo ssh make gcc libssl-dev liblz4-tool \
  14. g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
  15. qemu-user-static live-build bison flex fakeroot gcc-multilib g++-multilib \
  16. unzip device-tree-compiler ncurses-dev p7zip bc tree
  17. # workspace
  18. WORKDIR /app

构建并启动容器

  1. docker build -t huangjiaobai/uos:1.0.0 .
  2. docker run --privileged --runtime=nvidia --gpus all --name uos -tid -v /dev/mem:/dev/mem -v /home/demo/work/uos:/app/uos --rm huangjiaobai/uos:1.0.0

进入容器

我们所有的操作都在挂载的文件夹里边进行防止数据丢失

docker exec -ti uos /bin/bash

下载文件

SDK 源码存放于 gitlab,国内用户可能下载完整的 SDK 仓库速度比较慢,所以FireFly提供了一个 SDK 基础包Linux SDK,国内用户只需要在此基础包上同步 gitlab 上的代码就可以了,本人使用的linux sdk基础包
下载完毕后得到6个压缩包文件

  1. c3bcb3f92bd139f72551c89f75d39bfa rk3588_linux_release_20230114_v1.0.6c_00
  2. ebb658571a645d4af1e2b569709480b7 rk3588_linux_release_20230114_v1.0.6c_01
  3. 9761cc324e9f7133500b590c441b0307 rk3588_linux_release_20230114_v1.0.6c_02
  4. 7adc9fe2158d7681554dce1def238f49 rk3588_linux_release_20230114_v1.0.6c_03
  5. 3d9201e3849b8a523c05920bebe28b39 rk3588_linux_release_20230114_v1.0.6c_04
  6. 6faaee006fe60fc9be60a64a01506cb6 rk3588_linux_release_20230114_v1.0.6c_05

解压文件,并同步

  1. # 解压
  2. mkdir -p rk3588_sdk
  3. cd rk3588_sdk
  4. cat path/to/rk3588_linux_release_20230114_v1.0.6c_0* | tar -xv
  5. # 导出数据
  6. .repo/repo/repo sync -l

同步代码

  1. # 同步
  2. .repo/repo/repo sync -c --no-tags
  3. .repo/repo/repo start firefly --all
  4. # 更新SDK
  5. .repo/repo/repo sync -c --no-tags

因为网络环境等原因,.repo/repo/repo sync -c --no-tags 命令更新代码可能会失败,可多次反复执行。

下载根文件系统

Ubuntu根文件系统(64位)

下载完毕后,计算md5值
61451fa7e4fe36a6bda8df81265661d9  Ubuntu22.04-Xfce_RK3588_v3.11-27_20240410.img.7z
解压文件重命名,复制到指定位置
  1. 7z x Ubuntu22.04-Xfce_RK3588_v3.11-27_20240410.img.7z
  2. cd rk3588_sdk
  3. mkdir ubuntu_rootfs
  4. mv ubuntu-aarch64-rootfs.img ubuntu_rootfs/rootfs.img

完整目录树

  1. |-- app # 上层应用
  2. |-- build.sh -> device/rockchip/common/build.sh # 编译脚本
  3. |-- buildroot # Buildroot 根文件系统编译目录
  4. |-- device # 编译相关配置文件
  5. |-- docs # 文档
  6. |-- envsetup.sh -> buildroot/build/envsetup.sh
  7. |-- external # 第三方库
  8. |-- firefly-update.sh -> device/rockchip/common/firefly-update.sh
  9. |-- kernel
  10. |-- mkfirmware.sh -> device/rockchip/common/mkfirmware.sh # 链接脚本
  11. |-- prebuilts # 交叉编译工具链
  12. |-- rkbin
  13. |-- rkflash.sh -> device/rockchip/common/rkflash.sh # 烧写脚本
  14. |-- rockdev # 打包好的固件目录
  15. |-- tools # 工具目录
  16. |-- u-boot
  17. |-- ubuntu_rootfs # ubuntu根文件系统
  18. |-- uefi
  19. `-- yocto

执行编译命令

  1. ## 选择配置
  2. ./build.sh device/rockchip/rk3588/itx-3588j-BE45-A1-ubuntu.mk
  3. ## 编译
  4. ./build.sh

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/518528
推荐阅读
相关标签
  

闽ICP备14008679号