S100能用docker的方式来编译吗,这一块有什么介绍文档吗,包括bootloader/kernel的编译,以及上层ros应用的编译
我来帮你搜索一下 S100 Docker 编译相关的社区资源。
你好,@TonyYan!关于 S100 使用 Docker 进行编译的问题,社区已有相关讨论和官方文档支持。
核心结论
可以,官方推荐使用 Docker 进行 S100 的交叉编译。
Docker 环境主要用于 PC 端(x86 架构) 进行 交叉编译,而不是直接在 S100 板子上编译。这适用于 TROS 应用开发。对于 Bootloader 和 Kernel 的编译,通常有独立的工具链和流程,Docker 主要用于上层应用(TROS/ROS)的构建。
1. TROS/ROS 应用编译(Docker 方式)
这是官方推荐的标准流程,用于在 PC 上交叉编译 S100 可运行的 TROS 应用。
操作步骤
第一步:准备 Docker 环境
# 1. 创建工作目录
mkdir -p ~/s100_build_ws
cd ~/s100_build_ws
# 2. 下载官方提供的 S100 交叉编译 Docker 镜像
# 注意:请根据官方文档确认最新镜像地址,以下为示例
wget http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 3. 加载镜像
sudo docker load --input pc_tros_ubuntu22.04_v1.0.0.tar.gz
# 4. 查看镜像 ID
sudo docker images | grep pc_tros
第二步:启动容器并获取源码
# 1. 启动容器,挂载本地目录
# 将 <IMAGE_ID> 替换为上一步查到的实际镜像 ID
sudo docker run -it --entrypoint="/bin/bash" \
-v ~/s100_build_ws:/mnt/ws \
<IMAGE_ID>
# 2. 在容器内操作 (以下命令在容器内执行)
cd /mnt/ws
# 3. 创建工程目录
mkdir -p tros_ws/src
cd tros_ws
# 4. 获取编译配置文件
git clone https://github.com/D-Robotics/robot_dev_config.git -b develop
# 5. 拉取 TROS 源码
vcs-import src < ./robot_dev_config/ros2_release.repos
第三步:执行交叉编译
# 在容器内的 /mnt/ws/tros_ws 目录下执行
# 指定平台为 S100
bash ./robot_dev_config/build.sh -p S100
编译成功后,install 目录即为可部署到 S100 的产物。
详细文档参考: RDK S100 交叉编译官方文档
2. Bootloader / Kernel 编译
Docker 通常不用于 Bootloader 和 Kernel 的编译。 这部分属于系统底层开发,有独立的 SDK 和编译工具链。
- 现状: 社区中关于 S100 底层编译的讨论多集中在 SDK 包的使用和烧录,较少提及用 Docker 封装底层编译环境。
- 建议路径:
- 查看 RDK S100 的 SDK 文档,通常提供独立的
build.sh或 Makefile。 - 如果需要隔离环境,可以自行构建包含底层工具链的 Docker 镜像,但官方目前主要提供应用层(TROS)的 Docker 镜像。
- 参考社区相关帖子:
- S100P linux-header 不匹配问题(涉及内核驱动编译)
- 请问 RDK S100 启动到底用的是哪个 dtb 文件?(涉及 U-Boot 和内核启动)
- 查看 RDK S100 的 SDK 文档,通常提供独立的
3. 板端 Docker 部署(进阶)
如果你是想在 S100 板子上运行 Docker 容器(而不是编译):
- 结论: 可行,但需注意架构。
- 要点:
- S100 是 ARM64 架构,必须使用
arm64v8基础镜像。 - 需确保 Docker 容器能访问 BPU 等硬件设备(使用
--privileged或映射/dev/bpu)。 - 参考社区讨论:s100 开发板能用 docker 部署 ros2 么
- S100 是 ARM64 架构,必须使用
建议
- 应用开发: 直接使用官方提供的 Docker 镜像进行 PC 端交叉编译(如上步骤 1)。
- 系统开发(Bootloader/Kernel): 建议先在本地 Ubuntu 环境按照 SDK 文档编译,熟悉流程后再考虑是否容器化。
- 文档查阅: 建议优先阅读 RDK DOC 中的 “Robot_development” 章节。
如果有具体的编译报错或环境配置问题,欢迎提供详细日志,我们可以进一步排查。
你好,@TonyYan!
关于 S100 使用 Docker 进行编译的问题,社区已有明确方案和官方文档支持。核心结论如下:
核心结论
可以,官方推荐使用 Docker 进行 S100 的交叉编译。
但需区分编译对象:
- 上层 ROS/TROS 应用:完全支持 Docker,这是官方推荐的标准开发流程(在 PC x86 环境交叉编译)。
- Bootloader / Kernel:官方文档未提供 Docker 镜像,通常建议在 Ubuntu 主机直接搭建环境编译,或自行封装 Docker。
1. TROS/ROS 应用编译(Docker 方式)
这是最成熟、文档最全的部分。官方提供了预置好工具链的 Docker 镜像。
操作步骤(基于最新文档 v4.0.5)
第一步:下载并加载 Docker 镜像
根据你的 Ubuntu 版本选择镜像:
# Ubuntu 22.04 主机
wget http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu22.04_v1.0.0.tar.gz
sudo docker load --input pc_tros_ubuntu22.04_v1.0.0.tar.gz
# Ubuntu 24.04 主机 (Jazzy)
wget http://archive.d-robotics.cc/TogetheROS/cross_compile_docker/pc_tros_ubuntu24.04_v1.0.1.tar.gz
sudo docker load --input pc_tros_ubuntu24.04_v1.0.1.tar.gz
第二步:启动容器并获取源码
# 启动容器,挂载本地工作目录
sudo docker run -it --entrypoint="/bin/bash" \
-v ~/s100_ws:/mnt/ws \
<IMAGE_ID> # 替换为 docker images 查到的实际 ID
# --- 以下在容器内执行 ---
cd /mnt/ws
mkdir -p tros_ws/src
cd tros_ws
# 获取编译配置 (S100 通常使用 develop 或 jazzy 分支)
git clone https://github.com/D-Robotics/robot_dev_config.git -b develop
# 拉取源码
vcs-import src < ./robot_dev_config/ros2_release.repos
第三步:执行交叉编译
# 在容器内的 /mnt/ws/tros_ws 目录下
bash ./robot_dev_config/build.sh -p S100
编译产物在 install 目录,拷贝到 S100 的 /opt/tros 即可使用。
完整文档: TROS 交叉编译指南
2. Bootloader / Kernel 编译 
这部分属于系统底层开发,官方目前未提供专用的 Docker 镜像。
- 现状:Bootloader (U-Boot) 和 Kernel 编译依赖特定的 BSP SDK,通常需要在 Ubuntu 主机上直接安装交叉编译工具链(如
gcc-aarch64-linux-gnu)。 - 建议方案:
- 首选:按照官方 BSP 文档在 Ubuntu 主机搭建环境编译。
参考文档:S100 Linux 开发环境搭建
- 进阶:如果你熟悉 Docker,可以自行构建包含底层工具链的镜像(基于 Ubuntu + 交叉编译工具链 + SDK 源码),但这需要你自己维护镜像。
- 社区参考:
- S100P linux-header 不匹配问题(内核驱动编译)
- 请问 RDK S100 启动到底用的是哪个 dtb 文件?(U-Boot/DTB 相关)
- 首选:按照官方 BSP 文档在 Ubuntu 主机搭建环境编译。
3. 板端运行 Docker(非编译)
如果你是想在 S100 板子上跑 Docker 容器(部署应用):
- 可行,但必须使用 ARM64 架构 的基础镜像(如
arm64v8/ubuntu)。 - 关键点:需映射 BPU 设备节点(
--privileged或-v /dev/bpu:/dev/bpu)。
参考讨论:s100 开发板能用 docker 部署 ros2 么
总结建议
| 编译对象 | 是否推荐 Docker | 说明 |
|---|---|---|
| TROS/ROS 应用 | 官方提供镜像,环境隔离,避免污染主机 | |
| Bootloader/Kernel | 官方无现成镜像,建议直接在 Ubuntu 主机编译 | |
| 板端部署运行 | 需 ARM64 镜像,注意设备映射和性能开销 |
建议先按官方文档完成 TROS 应用的 Docker 交叉编译流程,底层编译如有需要再单独搭建环境。遇到具体报错欢迎贴日志!