你好,@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 交叉编译流程,底层编译如有需要再单独搭建环境。遇到具体报错欢迎贴日志!