【问题标题】:USB Device access from Docker从 Docker 访问 USB 设备
【发布时间】:2021-03-04 23:44:27
【问题描述】:

在我们的 CI 中,我们使用 Jenkins,在 jenkinfile 中,我运行了一个 docker 映像,该映像创建了要闪存到 stm32 核板上的二进制文件。更准确地说,闪烁过程是在 docker 映像中的 CMakeLists.txt 文件中作为后期构建过程完成的。我知道 stm32 板在 docker 映像中可用,因为我使用 lsusb 对其进行了测试。但是 openOCD 出现的错误是:

错误:libusb_open() 使用 LIBUSB_ERROR_NO_DEVICE 失败

我还尝试从 Jenkinfile 调用相同的 openOCD 命令(所以在 docker 映像之外),它给了我错误:

libusb_open() 因 LIBUSB_ERROR_ACCESS 而失败

如果我在终端中使用该命令,它就可以工作。我认为这与 udev 和访问规则有关。但我不知道它们是如何使用或生成的。

问题:

  • 为什么openOCD在docker镜像中找不到设备,即使它 调用 lsusb 时是否列出?
  • 为什么 openOCD 在从 Jenkinsfile 即使在同一台机器上使用相同的命令 终端工作?
  • 如果第二题的问题是缺少udev规则 openocd,我如何以脚本方式生成它们,以便它们 在码头工作?

非常感谢您提前提供的帮助。

【问题讨论】:

    标签: docker jenkins stm32 openocd


    【解决方案1】:

    这是我在 docker 中运行 OpenOCD 以对 Xilinx FPGA 进行编程的方法:

    docker run --rm -it \
      --device-cgroup-rule='c 189:* rmw' \
      -v /dev:/dev \
      docker.lan:5000/openocd \
      openocd -f /opt/openocd/arty_a7.cf
    

    --device-cgroup-rule 选项用于设置对主编号为 189 的字符设备的 cgroup 访问权限,可以在您尝试访问的设备的设备节点上找到 /dev。

    另外,-v /dev:/dev 提供对容器内设备树的访问。这可能只是您要使用的特定设备,这需要 udev 规则为其提供一个永久名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 2012-09-05
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多