Raspberry pi 树莓皮“;工具“;(raspistill、vcgencmd等)未包含在buildroot中
我用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-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