sophpi 编译完成发现 SDK 中的 sample 已经编译出来,但是没有包含在根文件系统中。
问题定位
查看 cvi_mpi/Makefile 文件,发现
makefile
install:
@mkdir -p $(DESTDIR)/usr/bin
@mkdir -p $(DESTDIR)/usr/lib/3rd
ifneq ($(FLASH_SIZE_SHRINK),y)
# copy sample_xxx
@cp -f sample/mipi_tx/sample_dsi $(DESTDIR)/usr/bin
@cp -f sample/cipher/sample_cipher $(DESTDIR)/usr/bin
@cp -f sample/cvg/sample_cvg $(DESTDIR)/usr/bin
@cp -f sample/venc/sample_venc $(DESTDIR)/usr/bin
@cp -f sample/venc/sample_vcodec $(DESTDIR)/usr/bin
@cp -f sample/vdec/sample_vdec $(DESTDIR)/usr/bin
endif
ifneq ($(FLASH_SIZE_SHRINK),y)
# copy venc
@cp -f modules/venc/vc_lib/bin/cvi_h265_enc_test $(DESTDIR)/usr/bin
@cp -f modules/venc/vc_lib/bin/cvi_h265_dec $(DESTDIR)/usr/bin
@cp -f modules/venc/vc_lib/bin/cvi_h264_dec $(DESTDIR)/usr/bin
@cp -f modules/venc/vc_lib/bin/cvi_jpg_codec $(DESTDIR)/usr/bin
endif
ifneq ($(FLASH_SIZE_SHRINK),y)
# copy audio libs and elf
@cp -f sample/audio/sample_audio* $(DESTDIR)/usr/bin
@if [ -e "sample/audio/cvi_mp3player" ]; then cp -f sample/audio/cvi_mp3player $(DESTDIR)/usr/bin; fi
endif
# copy mw lib
@cp -a lib/*.so* $(DESTDIR)/usr/lib
@cp -a lib/3rd/*.so* $(DESTDIR)/usr/lib/3rd
发现 sample_xxx 复制受 FLASH_SIZE_SHRINK
影响,而 FLASH_SIZE_SHRINK
默认为 y,所以 sample_xxx 没有复制到根文件系统中。
取消 FLASH_SIZE_SHRINK
在 build/boards/cv181x/sg2002_wevb_riscv64_sd/sg2002_wevb_riscv64_sd_defconfig 文件中,找到 CONFIG_FLASH_SIZE_SHRINK=y
,将其删除。
可以使用 build_middware
命令单独编译 sample。
编译过程中,会出现以上 copy 出错,需要将部分没有的 sample 删除。
shell
# copy sample_xxx
cp: cannot stat 'sample/mipi_tx/sample_dsi': No such file or directory
make: *** [Makefile:61: install] Error 1
修改后的 Makefile 如下:
makefile
install:
@mkdir -p $(DESTDIR)/usr/bin
@mkdir -p $(DESTDIR)/usr/lib/3rd
ifneq ($(FLASH_SIZE_SHRINK),y)
# copy sample_xxx
# @cp -f sample/mipi_tx/sample_dsi $(DESTDIR)/usr/bin
# @cp -f sample/cipher/sample_cipher $(DESTDIR)/usr/bin
# @cp -f sample/cvg/sample_cvg $(DESTDIR)/usr/bin
@cp -f sample/venc/sample_venc $(DESTDIR)/usr/bin
@cp -f sample/venc/sample_vcodec $(DESTDIR)/usr/bin
@cp -f sample/vdec/sample_vdec $(DESTDIR)/usr/bin
endif
# ifneq ($(FLASH_SIZE_SHRINK),y)
# # copy venc
# @cp -f modules/venc/vc_lib/bin/cvi_h265_enc_test $(DESTDIR)/usr/bin
# @cp -f modules/venc/vc_lib/bin/cvi_h265_dec $(DESTDIR)/usr/bin
# @cp -f modules/venc/vc_lib/bin/cvi_h264_dec $(DESTDIR)/usr/bin
# @cp -f modules/venc/vc_lib/bin/cvi_jpg_codec $(DESTDIR)/usr/bin
# endif
ifneq ($(FLASH_SIZE_SHRINK),y)
# copy audio libs and elf
@cp -f sample/audio/sample_audio* $(DESTDIR)/usr/bin
@if [ -e "sample/audio/cvi_mp3player" ]; then cp -f sample/audio/cvi_mp3player $(DESTDIR)/usr/bin; fi
endif
# copy mw lib
@cp -a lib/*.so* $(DESTDIR)/usr/lib
@cp -a lib/3rd/*.so* $(DESTDIR)/usr/lib/3rd
编译成功后,sample_xxx 会先 copy 至 buildroot-2021.05/board/cvitek/CV181X/overlay/mnt/system/usr/bin,然后再打包进 rootfs 中。