Raspberry pi 树莓皮“;工具“;(raspistill、vcgencmd等)未包含在buildroot中

Raspberry pi 树莓皮“;工具“;(raspistill、vcgencmd等)未包含在buildroot中,raspberry-pi,camera,raspberry-pi3,embedded-linux,buildroot,Raspberry Pi,Camera,Raspberry Pi3,Embedded Linux,Buildroot,我用buildroot(buildroot-2021.02.1)创建了一个基本映像,其中包含一些软件,还选择了RPI固件以使用摄像头和一些Raspberry Pi工具:目标包-->硬件处理-->固件-->([x]RPI固件-->要引导的固件,如前所述 但是工具raspistill,vcgencmd。。。不包括在内。问题是如何包含它们以及为什么不包含它们? 在某个时间点,它一定一直在工作,请参阅: 更多详情: 在buildroot的日志中显示以下行: >>> rpi-firmwa

我用buildroot(
buildroot-2021.02.1
)创建了一个基本映像,其中包含一些软件,还选择了RPI固件以使用摄像头和一些Raspberry Pi工具:
目标包-->硬件处理-->固件-->([x]RPI固件-->要引导的固件,如前所述

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

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

更多详情:

在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
在这个包中,二进制文件是存在的。它们是从TAR包含实际工具的地方下载的。但是buildroot不会将它们复制到最终映像中,而只是下载它们。可能是因为一些
文件list.txt
文件丢失,错误消息指出了这一点。可能这些文件正在将要复制的文件列为白名单。但是我找不到关于这个的文档

对于64位构建,无法执行(然后手动下载)tar文件中的二进制文件,因为它们是32位可执行文件:
firmware-d016a6eb01c8c7326a89cb42809fed2a21525de5/opt/vc/bin/vcgencmd:ELF 32位LSB可执行文件,ARM,EABI5版本1(SYSV),动态链接,解释器/lib/ld linux.so.3,适用于GNU/linux 3.1.9,未剥离
;在具有buildroot的32位构建上,它也不起作用,因为缺少共享库,即使归档的完整结构已放置在标准RPI映像上的
/opt/vc/{bin | lib |…}

我不确定如何处理这个问题,如何诊断和修复它

编辑:也许这是两个不同的问题;我再次阅读了链接的SO问题,并比较了文件
fixup.dat
start.elf
(其中包含使工具工作的RPI硬件内容)在内置映像的
boot.vfat
中,带有
buildroot/output/build/rpi-firmware-d016a6eb01c8c7326a89cb42809fed2a21525de5/boot
中的映像,文件
fixup_x.dat
start_x.elf
从那里获取。因此,这与上述问题是一致的。而且在任何地方都没有指出Raspberry Pi的工具是编译的。它们只在这个tar档案中。可能需要额外编译它们,而此软件包不是为集成这些工具而设计的。

我找到了解决方案,这可能有助于将来的参考,因此我将解决方案放在这里

我们必须区分:

  • “固件”(即问题中提到的tar),在buildroot中使用
    BR2\u PACKAGE\u RPI\u firmware=y打开。这会导致
    start.elf
    fixup.dat
    包含来自此tar的正确数据。TAR还包含所需的二进制文件这一事实只是“巧合”
  • 所需的应用程序打包为“userland”(请参阅),如果发现buildroot项目根目录中的
    .config
    行中未设置
    BR2#u PACKAGE_RPI_userland=y
    该应用程序(
    vcgencmd
    raspistill
    ,…)正在构建并包含在最终图像中(我无法在
    make menuconfig
    中找到位置,但是如果直接修改变量,这没有问题)
因此,问题得到了回答但是:您可能会遇到一些问题;-):


问题1:我在运行
raspistill

对于
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
(对于空图像文件),请参阅以了解详细信息

回答:这与
/dev/vcsm
(或
/dev/vcsm csa
)缺失有关,该缺失用于摄像头控制/视频解码“东西”。网络上的某些地方所说的符号链接到
/dev/vc mem
是没有帮助的

解决方案:我在内核5.10.x中使用了最新的BR(
buildroot-2021.02.1
,并简单地“dowgrade”到
buildroot-2020.02.1
,重新构建它,然后出现
/dev/vcsm
,一切正常

问题2:我想在docker容器中进行

回答:没问题。我使用了
balenalib/rpi-raspbian:latest
(根据建议)通过运行docker run--privileged--device=/dev/vchiq--rm-it-balenalib/rpi-raspbian:latest
,它工作得非常完美。为此,只需要适当的设备和支持。因此包
BR2\u-package\u-rpi\u-USERLAND=y
可以完全省略

问题3:它是否适用于64位?

回答:没有。我试用了buildroot的最新版本(
raspberrypi3_64_defconfig
)和上面提到的2020年2月的版本,这两个版本的
/dev/vcsm
(或
/dev/vcsm csa
)都丢失了。
LinuxCPI64 4.19.97-v8#1 SMP抢占时间:4月17日14:13:11 CEST 2021 AARC64 GNU/Linux