Raspberry Pi camera support with libcamera

I'm trying to build a custom openwrt with the kernel module required for the support of IMX219 camera on Raspberry Pi 5 with libcamera.

I listed these modules that doesn't appears in OpenWrt configuration menus and I think would be necessary:

  • bcm2835-unicam
  • pisp-be
  • rp1-cfe
  • v4l2-cci
  • imx219

I tried to add stanzas for theses modules in the makefiles by following this example.

Here my patch for the 24.10 version.

I'm facing 2 problems, first if I don't select the camera-bcm2835 packages, I get this error:

ERROR: module '/home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/linux-6.6.73/drivers/media/common/videobuf2/videobuf2-vmalloc.ko' is missing.
make[3]: *** [modules/video.mk:681: /home/ubuntu/openwrt/bin/targets/bcm27xx/bcm2712/packages/kmod-video-videobuf2_6.6.73-r1_aarch64_cortex-a76.ipk] Error 1
make[3]: Leaving directory '/home/ubuntu/openwrt/package/kernel/linux'
time: package/kernel/linux/compile#0.95#0.17#1.10
    ERROR: package/kernel/linux failed to build.

I don't understand because I added the dependency kmod-video-videobuf2 for unicam-bcm2835.

Second, I didn't find workaround, it looks like v4l2-cci is not compiled, but it is selected in menuconfig:

ERROR: module '/home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/linux-6.6.73/drivers/media/v4l2-core/v4l2-cci.ko' is missing.
make[3]: *** [modules/video.mk:715: /home/ubuntu/openwrt/bin/targets/bcm27xx/bcm2712/packages/kmod-video-cci-i2c_6.6.73-r1_aarch64_cortex-a76.ipk] Error 1
make[3]: Leaving directory '/home/ubuntu/openwrt/package/kernel/linux'
time: package/kernel/linux/compile#0.95#0.15#1.08
    ERROR: package/kernel/linux failed to build.

I don't really know how to "debug" makefiles, so I'm currently stuck.

Real errors are earlier.

I've seen those sorts of, random, package errors while building when the server is saturated.

And it has been a heavy couple days.
Everything else being equal and 'why now?'.

But let's show @brada4 as much of the output as you can.

1 Like

Bro is building out of the tree kmods, not clouds

1 Like

Logs related to v4l2-cci:

SHELL= flock /home/ubuntu/openwrt/tmp/.root-copy.flock -c 'cp -fpR /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/.pkgdir/kernel/. /home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/root-bcm27xx/'
touch /home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/root-bcm27xx/stamp/.kernel_installed
rm -rf /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c

mkdir -p /home/ubuntu/openwrt/bin/targets/bcm27xx/bcm2712/packages /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c /home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/pkginfo
for mod in /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/linux-6.6.73/drivers/media/v4l2-core/v4l2-cci.ko; do if grep -q "${mod##/home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/linux-6.6.73/}" "/home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/linux-6.6.73/modules.builtin"; then echo "NOTICE: module '$mod' is built-in."; elif [ -e $mod ]; then mkdir -p /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c/lib/modules/6.6.73 ; cp -fpR -L $mod /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c/lib/modules/6.6.73/ ; else echo "ERROR: module '$mod' is missing." >&2; exit 1; fi; done;
mkdir -p /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c/etc/modules.d; ( echo "v4l2-cci"; ) > /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c/etc/modules.d/video-cci-i2c; 



find /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c -name 'CVS' -o -name '.svn' -o -name '.#*' -o -name '*~'| xargs -r rm -rf
( find /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c -name lib\*.so\* -or -name \*.ko | awk -F/ '{ print $NF }'; for file in /home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/pkginfo/kmod-video-core.provides /home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/pkginfo/kmod-regmap-i2c.provides; do if [ -f "$file" ]; then cat $file; fi; done;  ) | sort -u > /home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/pkginfo/kmod-video-cci-i2c.provides

( rm -f /home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/pkginfo/kmod-video-cci-i2c.missing; ( export READELF=aarch64-openwrt-linux-musl-readelf OBJCOPY=aarch64-openwrt-linux-musl-objcopy XARGS="xargs -r"; /home/ubuntu/openwrt/scripts/gen-dependencies.sh "/home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c"; ) | while read FILE; do grep -qxF "$FILE" /home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/pkginfo/kmod-video-cci-i2c.provides || echo "$FILE" >> /home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/pkginfo/kmod-video-cci-i2c.missing; done; if [ -f "/home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/pkginfo/kmod-video-cci-i2c.missing" ]; then echo "Package kmod-video-cci-i2c is missing dependencies for the following libraries:" >&2; cat "/home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/pkginfo/kmod-video-cci-i2c.missing" >&2; false; fi; )
export CROSS="aarch64-openwrt-linux-musl-"  NO_RENAME=1 ; NM="aarch64-openwrt-linux-musl-nm" STRIP="/home/ubuntu/openwrt/staging_dir/host/bin/sstrip -z" STRIP_KMOD="/home/ubuntu/openwrt/scripts/strip-kmod.sh" PATCHELF="/home/ubuntu/openwrt/staging_dir/host/bin/patchelf" /home/ubuntu/openwrt/scripts/rstrip.sh /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c
install -d -m0755 /home/ubuntu/openwrt/bin/targets/bcm27xx/bcm2712/packages/tmp
mkdir -p /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c/CONTROL
(cd /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c/CONTROL; ( echo "$CONTROL"; printf "Description: "; echo "$DESCRIPTION" | sed -e 's,^[[:space:]]*, ,g'; ) > control; chmod 644 control; ( echo "#!/bin/sh"; echo "[ \"\${IPKG_NO_SCRIPT}\" = \"1\" ] && exit 0"; echo "[ -s "\${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; echo ". \${IPKG_INSTROOT}/lib/functions.sh"; echo "default_postinst \$0 \$@"; ) > postinst; ( echo "#!/bin/sh"; echo "[ -s "\${IPKG_INSTROOT}/lib/functions.sh" ] || exit 0"; echo ". \${IPKG_INSTROOT}/lib/functions.sh"; echo "default_prerm \$0 \$@"; ) > prerm; chmod 0755 postinst prerm;  )
/home/ubuntu/openwrt/staging_dir/host/bin/fakeroot /home/ubuntu/openwrt/staging_dir/host/bin/bash /home/ubuntu/openwrt/scripts/ipkg-build -m "" /home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/packages/ipkg-aarch64_cortex-a76/kmod-video-cci-i2c /home/ubuntu/openwrt/bin/targets/bcm27xx/bcm2712/packages
[ -f /home/ubuntu/openwrt/bin/targets/bcm27xx/bcm2712/packages/kmod-video-cci-i2c_6.6.73-r1_aarch64_cortex-a76.ipk ]
ERROR: module '/home/ubuntu/openwrt/build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/linux-6.6.73/drivers/media/v4l2-core/v4l2-cci.ko' is missing.
make[3]: *** [modules/video.mk:715: /home/ubuntu/openwrt/bin/targets/bcm27xx/bcm2712/packages/kmod-video-cci-i2c_6.6.73-r1_aarch64_cortex-a76.ipk] Error 1
make[3]: Leaving directory '/home/ubuntu/openwrt/package/kernel/linux'
time: package/kernel/linux/compile#0.98#0.13#1.10
    ERROR: package/kernel/linux failed to build.
make[2]: *** [package/Makefile:179: package/kernel/linux/compile] Error 1
make[2]: Leaving directory '/home/ubuntu/openwrt'
make[1]: *** [package/Makefile:173: /home/ubuntu/openwrt/staging_dir/target-aarch64_cortex-a76_musl/stamp/.package_compile] Error 2
make[1]: Leaving directory '/home/ubuntu/openwrt'
make: *** [/home/ubuntu/openwrt/include/toplevel.mk:233: world] Error 2