x86上通过docker编译s100需要编译dnn_node吗?可以把dnn_node的CMakeList贴出来吗

你好,@ximenqin

你观察得很仔细!这确实是一个版本差异问题。让我帮你理清原因和解决方案:


:white_check_mark: 核心结论

你拉取的 GitHub 源码可能是旧版本或 master 分支,而 S100 的适配是在较新的分支/版本中加入的。

S100 的 PLATFORM_S100 编译支持不是通过修改 CMakeLists.txt 硬编码实现的,而是通过以下方式:

  1. 依赖库版本:需要匹配 S100 的 hobot_dnn 库版本
  2. Docker 镜像环境:S100 的交叉编译 Docker 中已预置了正确的配置
  3. 分支选择:GitHub 上可能有专门的 S100 分支或 Tag

:mag: 排查步骤

步骤 1: 确认你使用的 Docker 镜像版本

首先在 S100 的 Docker 环境中检查已安装的 hobot_dnn 版本:

# 进入 S100 交叉编译 Docker 后
dpkg -l | grep hobot-dnn
# 或
apt list --installed | grep hobot

关键:确保你使用的 Docker 镜像是 S100 专用的,例如:

  • registry.d-robotics.cc/deliver/ai_toolchain_ubuntu_22_s100_cpu:v3.7.0
  • registry.d-robotics.cc/deliver/ai_toolchain_ubuntu_22_s100_gpu:v3.7.0

步骤 2: 检查 Docker 环境中的 hobot_dnn 源码

不要从 GitHub 拉取,直接使用 Docker 环境中预置的源码:

# 在 S100 Docker 内部
find /opt -name "hobot_dnn" -type d 2>/dev/null
# 或
find /root -name "hobot_dnn" -type d 2>/dev/null

# 查看 CMakeLists.txt
cat /path/to/hobot_dnn/dnn_node/CMakeLists.txt | grep -i s100

Docker 环境中预置的源码已经包含了 S100 的适配配置。

步骤 3: 如果必须从 GitHub 拉取

请检查正确的分支或 Tag:

# 查看仓库的 branches 和 tags
git clone https://github.com/D-Robotics/hobot_dnn.git
cd hobot_dnn
git branch -a
git tag -l | grep -i s100

# 可能需要切换到特定分支
git checkout s100_develop  # 示例分支名,需确认实际存在

:clipboard: 实际可用的编译方案

推荐方案:直接使用 Docker 环境中的源码,不要自己拉取 GitHub。

完整编译流程(在 S100 Docker 中)

# 1. 启动 S100 交叉编译 Docker
docker run -it --rm \
    -v /path/to/your/workspace:/root/tros_ws \
    registry.d-robotics.cc/deliver/ai_toolchain_ubuntu_22_s100_cpu:v3.7.0 \
    bash

# 2. 在 Docker 内部,使用环境预置的 hobot_dnn
cd /root/tros_ws

# 3. 编译 dnn_node(Docker 中已有正确的 CMake 配置)
colcon build --packages-select dnn_node --cmake-args -DPLATFORM_S100=ON

# 4. 验证编译结果
ls -l install/dnn_node/lib/dnn_node/

:question: 为什么 GitHub 源码没有 S100 配置?

可能的原因:

原因 说明
版本滞后 GitHub master 分支可能还未合并 S100 的适配代码
分支管理 S100 的适配可能在独立分支(如 s100_develop
内部版本 完整的 S100 支持可能只在官方 Docker 镜像中提供
依赖库决定 S100 适配主要由 libhb_dnn.so 库决定,而非 CMakeLists.txt

:bulb: 建议操作

  1. 优先使用 Docker 预置源码:不要从 GitHub 拉取,直接用 Docker 环境中的
  2. 检查 OE 版本:确认你的 OE 工具链版本与板端系统版本匹配(参考 34462
  3. 查看官方文档:S100 的编译说明可能在 RDK DOC 中有详细记录

如果你能提供以下信息,我可以更精准地帮你定位:

  • 你使用的 Docker 镜像版本(docker images 输出)
  • 你从 GitHub 拉取的具体分支/commit
  • 编译时的具体报错信息

需要我帮你查找 S100 专用的 Docker 镜像下载链接或 OE 版本对应关系吗?