【问题标题】:Raspberry Pi "tools" (raspistill, vcgencmd, ...) not included with buildrootRaspberry Pi“工具”(raspistill、vcgencmd、...)不包含在 buildroot 中
【发布时间】:2021-07-11 21:00:41
【问题描述】:

我已经使用 buildroot (buildroot-2021.02.1) 创建了一个基本映像,其中包含一些软件,并且还选择了 RPI 固件以使用相机和一些 Raspberry Pi 工具:Target packages --> Hardware handling --> Firmware --> ([x] rpi-firmware) --> Firmware to boot 如上所述 here

但工具raspistill, vcgencmd, ... 不包括在内。问题是如何包含它们以及为什么不包含它们?

在某个时间点它一定一直在工作,请参阅:RaspberryPi camera with buildroot

更多细节:

在 buildroot 的日志中显示以下几行:

>>> rpi-firmware d016a6eb01c8c7326a89cb42809fed2a21525de5 Installing to target
comm: /home/ich/br/buildroot/output/build/rpi-firmware-d016a6eb01c8c7326a89cb42809fed2a21525de5/.files-list.before: No such file or directory
comm: /home/ich/br/buildroot/output/build/rpi-firmware-d016a6eb01c8c7326a89cb42809fed2a21525de5/.files-list-staging.before: No such file or directory
comm: /home/ich/br/buildroot/output/build/rpi-firmware-d016a6eb01c8c7326a89cb42809fed2a21525de5/.files-list-host.before: No such file or directory

并且在这个包中二进制文件是存在的。它们是从http://sources.buildroot.net/rpi-firmware/ 下载的,其中 tar 包含实际工具。但是它们不会被 buildroot 复制到最终映像中,而只是下载。正如错误消息所指出的那样,可能是因为缺少某些 files-list.txt 文件。也许这些文件将要复制的文件列入白名单。但我找不到有关此的文档。

对于 64 位构建,无法执行(然后手动下载的)tar 文件中的二进制文件,因为它们是 32 位可执行文件:firmware-d016a6eb01c8c7326a89cb42809fed2a21525de5/opt/vc/bin/vcgencmd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.1.9, not stripped;在使用 buildroot 的 32 位构建上,它也不起作用,因为缺少共享库,即使存档中的完整结构已像标准 RPI 映像一样放在 /opt/vc/{bin|lib|...} 下。

我不确定如何处理、诊断和修复问题。

编辑:也许这是两个不同的问题;我再次阅读了链接的 SO 问题,并将构建图像的 boot.vfat 中的文件 fixup.datstart.elf(其中包含使工具工作的 RPI 硬件)与 buildroot/output/build/rpi-firmware-d016a6eb01c8c7326a89cb42809fed2a21525de5/boot 中的图像和文件fixup_x.datstart_x.elf 是从那里获取的。根据提到的SO问题也是如此。并且在任何地方都没有表明 Raspberry Pi 的工具已编译。它们在此 tar 存档中。也许需要额外编译它们,而这个包并不是为了集成这些工具而设计的。

【问题讨论】:

    标签: raspberry-pi camera raspberry-pi3 embedded-linux buildroot


    【解决方案1】:

    我想出了解决方案,这可能对将来的参考有用,所以我把解决方案放在这里。

    必须区分:

    • “固件”(即问题中提到的 tar),在 buildroot 中使用 BR2_PACKAGE_RPI_FIRMWARE=y 打开。这会导致 start.elffixup.dat 包含来自此 tar 的正确数据。焦油还包含所需的二进制文件这一事实只是“巧合”
    • 所需的应用程序被打包为“userland”(参见here),如果在buildroot 项目的根目录中的.config 中找到# BR2_PACKAGE_RPI_USERLAND is not set 行并将此行替换为BR2_PACKAGE_RPI_USERLAND=y,则应用程序(@987654330 @, raspistill, ...) 正在构建并包含在最终图像中(我无法在 make menuconfig 中找到位置,但这没问题,如果你直接修改 vars)

    因此,问题得到了回答。 但是:您可能会遇到一些问题 ;-) :


    问题 1:运行raspistill时出现“Segmentation fault”@

    对于raspistill -o i.jpg,你可能会退出:

    mmal: mmal_vc_shm_init: could not initialize vc shared memory service
    mmal: mmal_vc_component_create: failed to initialise shm for 'vc.camera_info' (7:EIO)
    mmal: mmal_component_create_core: could not create component 'vc.camera_info' (7)
    mmal: Failed to create camera_info component
    Segmentation fault
    

    (带有空图像文件),详情请参阅here

    答案:这与缺少用于相机控制/视频解码“东西”的/dev/vcsm(或/dev/vcsm-csa)有关。如网络某处所述,符号链接到/dev/vc-mem 并没有帮助。

    解决方案:我使用的是最新的 BR 和内核 5.10.x(buildroot-2021.02.1 并简单地“降级”到buildroot-2020.02.1,重建它并出现/dev/vcsm,一切正常。

    问题2:我想在docker容器中做

    回答:没问题。我使用了balenalib/rpi-raspbian:latest(如建议的here)并通过运行docker run --privileged --device=/dev/vchiq --rm -it balenalib/rpi-raspbian:latest 完美运行。为此,只需要适当的设备和支持。所以包BR2_PACKAGE_RPI_USERLAND=y可以完全省略。

    问题 3:它适用于 64 位吗?

    答案: 不。我试用了 buildroot 的最新版本 (raspberrypi3_64_defconfig) 和提到的 2020 年 2 月的版本,并且缺少 /dev/vcsm(或 /dev/vcsm-csa)。 Linux cpi64 4.19.97-v8 #1 SMP PREEMPT Sat Apr 17 14:13:11 CEST 2021 aarch64 GNU/Linux

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-23
      • 2015-04-17
      • 1970-01-01
      • 2017-11-17
      • 2016-07-03
      • 2014-11-13
      • 1970-01-01
      • 2013-03-07
      相关资源
      最近更新 更多