Unable to build video modules

I am building from openwrt/master (r28354-31e45f62cafb) using the below diffconfig. I want to have some of the kernel video modules included (kmod-video-videobuf2 for example) but they are not. What happens is their respective apk packages get built, but they are empty. Is this is a bug with the module definitions or the build system or some poor assumption on my part?

diffconfig
CONFIG_TARGET_bcm27xx_bcm2712=y
CONFIG_TARGET_bcm27xx_bcm2712_DEVICE_rpi-5=y
CONFIG_DEVEL=y
CONFIG_TOOLCHAINOPTS=y
CONFIG_BUSYBOX_CUSTOM=y
# CONFIG_BINUTILS_USE_VERSION_2_42 is not set
CONFIG_BINUTILS_USE_VERSION_2_43=y
CONFIG_BINUTILS_VERSION="2.43.1"
CONFIG_BINUTILS_VERSION_2_43=y
CONFIG_BUSYBOX_CONFIG_EXTRA_CFLAGS="-mcpu=cortex-a76 -O2 -pipe"
# CONFIG_GCC_USE_VERSION_13 is not set
CONFIG_GCC_USE_VERSION_14=y
CONFIG_GCC_VERSION="14.2.0"
CONFIG_GCC_VERSION_14=y
CONFIG_HTOP_LMSENSORS=y
CONFIG_KERNEL_PSI=y
# CONFIG_LUA_ECO_MBEDTLS is not set
CONFIG_LUA_ECO_OPENSSL=y
CONFIG_OPENSSH_LIBFIDO2=y
CONFIG_OPENSSL_ENGINE=y
CONFIG_OPENSSL_OPTIMIZE_SPEED=y
CONFIG_OPENSSL_WITH_ASM=y
CONFIG_OPENSSL_WITH_CHACHA_POLY1305=y
CONFIG_OPENSSL_WITH_CMS=y
CONFIG_OPENSSL_WITH_DEPRECATED=y
CONFIG_OPENSSL_WITH_ERROR_MESSAGES=y
CONFIG_OPENSSL_WITH_IDEA=y
CONFIG_OPENSSL_WITH_MDC2=y
CONFIG_OPENSSL_WITH_PSK=y
CONFIG_OPENSSL_WITH_SEED=y
CONFIG_OPENSSL_WITH_SRP=y
CONFIG_OPENSSL_WITH_TLS13=y
CONFIG_OPENSSL_WITH_WHIRLPOOL=y
# CONFIG_PACKAGE_apk-mbedtls is not set
CONFIG_PACKAGE_apk-openssl=y
CONFIG_PACKAGE_attendedsysupgrade-common=y
CONFIG_PACKAGE_attr=y
CONFIG_PACKAGE_blkid=y
CONFIG_PACKAGE_block-mount=y
CONFIG_PACKAGE_blockdev=y
CONFIG_PACKAGE_cgi-io=y
# CONFIG_PACKAGE_dropbear is not set
# CONFIG_PACKAGE_hostapd-common is not set
CONFIG_PACKAGE_htop=y
CONFIG_PACKAGE_ip-full=y
CONFIG_PACKAGE_kmod-crypto-sha256=y
CONFIG_PACKAGE_kmod-dma-buf=m
CONFIG_PACKAGE_kmod-fs-ext4=y
CONFIG_PACKAGE_kmod-ifb=y
CONFIG_PACKAGE_kmod-ikconfig=y
CONFIG_PACKAGE_kmod-ipt-core=y
CONFIG_PACKAGE_kmod-ipt-ipopt=y
CONFIG_PACKAGE_kmod-lib-crc16=y
CONFIG_PACKAGE_kmod-libphy=y
CONFIG_PACKAGE_kmod-macvlan=y
CONFIG_PACKAGE_kmod-media-controller=m
CONFIG_PACKAGE_kmod-mii=y
CONFIG_PACKAGE_kmod-nf-conntrack-netlink=y
CONFIG_PACKAGE_kmod-nf-ipt=y
CONFIG_PACKAGE_kmod-nfnetlink-queue=y
CONFIG_PACKAGE_kmod-nft-compat=y
CONFIG_PACKAGE_kmod-nft-queue=y
CONFIG_PACKAGE_kmod-sched-core=y
CONFIG_PACKAGE_kmod-scsi-core=y
CONFIG_PACKAGE_kmod-usb-net=y
CONFIG_PACKAGE_kmod-usb-net-asix-ax88179=y
CONFIG_PACKAGE_kmod-usb-net-cdc-ether=y
CONFIG_PACKAGE_kmod-usb-net-cdc-ncm=y
CONFIG_PACKAGE_kmod-usb-net-rtl8150=y
CONFIG_PACKAGE_kmod-usb-net-rtl8152=y
CONFIG_PACKAGE_kmod-veth=y
CONFIG_PACKAGE_kmod-video-async=m
CONFIG_PACKAGE_kmod-video-core=m
CONFIG_PACKAGE_kmod-video-fwnode=m
CONFIG_PACKAGE_kmod-video-videobuf2=m
CONFIG_PACKAGE_libattr=y
CONFIG_PACKAGE_libbpf=y
CONFIG_PACKAGE_libcap=y
CONFIG_PACKAGE_libcbor=y
CONFIG_PACKAGE_libelf=y
CONFIG_PACKAGE_libevdev=y
# CONFIG_PACKAGE_libf2fs is not set
CONFIG_PACKAGE_libfdisk=y
CONFIG_PACKAGE_libfido2=y
CONFIG_PACKAGE_liblucihttp=y
CONFIG_PACKAGE_liblucihttp-ucode=y
CONFIG_PACKAGE_libmount=y
CONFIG_PACKAGE_libncurses=y
CONFIG_PACKAGE_libopenssl=y
CONFIG_PACKAGE_libpcre2=y
CONFIG_PACKAGE_libsysfs=y
CONFIG_PACKAGE_libudev-zero=y
CONFIG_PACKAGE_luci=y
CONFIG_PACKAGE_luci-app-firewall=y
CONFIG_PACKAGE_luci-app-package-manager=y
CONFIG_PACKAGE_luci-base=y
CONFIG_PACKAGE_luci-light=y
CONFIG_PACKAGE_luci-mod-admin-full=y
CONFIG_PACKAGE_luci-mod-network=y
CONFIG_PACKAGE_luci-mod-status=y
CONFIG_PACKAGE_luci-mod-system=y
CONFIG_PACKAGE_luci-proto-ipv6=y
CONFIG_PACKAGE_luci-proto-ppp=y
CONFIG_PACKAGE_luci-theme-bootstrap=y
# CONFIG_PACKAGE_mkf2fs is not set
CONFIG_PACKAGE_mount-utils=y
CONFIG_PACKAGE_openssh-client=y
CONFIG_PACKAGE_openssh-keygen=y
CONFIG_PACKAGE_openssh-moduli=y
CONFIG_PACKAGE_openssh-server=y
CONFIG_PACKAGE_pciids=y
CONFIG_PACKAGE_psmisc=y
CONFIG_PACKAGE_r8152-firmware=y
CONFIG_PACKAGE_resolveip=y
CONFIG_PACKAGE_rng-tools=y
CONFIG_PACKAGE_rpcd=y
CONFIG_PACKAGE_rpcd-mod-file=y
CONFIG_PACKAGE_rpcd-mod-iwinfo=y
CONFIG_PACKAGE_rpcd-mod-luci=y
CONFIG_PACKAGE_rpcd-mod-rpcsys=y
CONFIG_PACKAGE_rpcd-mod-rrdns=y
CONFIG_PACKAGE_rpcd-mod-ucode=y
CONFIG_PACKAGE_sysfsutils=y
CONFIG_PACKAGE_tc-tiny=y
CONFIG_PACKAGE_terminfo=y
CONFIG_PACKAGE_ucode-mod-html=y
CONFIG_PACKAGE_ucode-mod-math=y
# CONFIG_PACKAGE_ucode-mod-uloop is not set
CONFIG_PACKAGE_uhttpd=y
CONFIG_PACKAGE_uhttpd-mod-ubus=y
CONFIG_PACKAGE_usbids=y
CONFIG_PACKAGE_vim-fuller=y
# CONFIG_PACKAGE_wpad-basic-mbedtls is not set
CONFIG_PACKAGE_wsdd2=y
CONFIG_PACKAGE_zsh=y
CONFIG_TARGET_KERNEL_PARTSIZE=32
CONFIG_TARGET_OPTIMIZATION="-mcpu=cortex-a76 -O2 -pipe"
CONFIG_TARGET_OPTIONS=y
CONFIG_TARGET_ROOTFS_PARTSIZE=512
# CONFIG_TARGET_ROOTFS_SQUASHFS is not set
CONFIG_KERNEL_WERROR=y

In my bin dir, you see tiny apk package for these:

% ls -lh bin/targets/bcm27xx/bcm2712/packages/|grep video
-rw-r--r-- 1 facade users  714 Dec 20 07:55 kmod-video-async-6.6.66-r1.apk
-rw-r--r-- 1 facade users  851 Dec 20 07:55 kmod-video-core-6.6.66-r1.apk
-rw-r--r-- 1 facade users  740 Dec 20 07:55 kmod-video-fwnode-6.6.66-r1.apk
-rw-r--r-- 1 facade users  762 Dec 20 07:55 kmod-video-videobuf2-6.6.66-r1.apk

And you see none of them in the build_dir:

% find build_dir/target-aarch64_cortex-a76_musl/linux-bcm27xx_bcm2712/ -name '*video*.ko'

And not surprisingly, you have none on the image:

cat /lib/modules/6.6.66/modules.builtin|sort

8021q.ko
8250.ko
8250_base.ko
8250_bcm2835aux.ko
8250_bcm7271.ko
8250_fsl.ko
8250_of.ko
aead.ko
aer_inject.ko
aes-arm64.ko
aes-ce-blk.ko
aes-ce-ccm.ko
aes-ce-cipher.ko
aes-neon-blk.ko
aes-neon-bs.ko
aes_generic.ko
af_packet.ko
amba-pl011.ko
bcm-asp.ko
bcm-phy-lib.ko
bcm2708-dmaengine.ko
bcm2708_fb.ko
bcm2711_thermal.ko
bcm2835-dma.ko
bcm2835-mailbox.ko
bcm2835-mmc.ko
bcm2835-sdhost.ko
bcm2835_smi.ko
bcm2835_thermal.ko
bcm2835_wdt.ko
bcm7xxx.ko
bcma.ko
binfmt_script.ko
brcmstb-avs-cpufreq.ko
brcmstb-usb-pinmap.ko
brcmstb_dpfe.ko
brcmstb_memc.ko
brd.ko
bridge.ko
broadcom.ko
cbc.ko
ccm.ko
cfbcopyarea.ko
cfbfillrect.ko
cfbimgblt.ko
cfi_cmdset_0001.ko
cfi_cmdset_0002.ko
cfi_probe.ko
cfi_util.ko
chipreg.ko
clk-bcm2711-dvp.ko
clk-raspberrypi.ko
clk-rp1.ko
configfs.ko
cpufreq-dt-platdev.ko
cpufreq-dt.ko
cpufreq_conservative.ko
cpufreq_ondemand.ko
cpufreq_performance.ko
cpufreq_powersave.ko
cpufreq_userspace.ko
cqhci.ko
crc16.ko
crc32.ko
crc32_generic.ko
crc32c_generic.ko
cryptd.ko
crypto.ko
crypto_algapi.ko
crypto_hash.ko
crypto_null.ko
cryptomgr.ko
ctr.ko
cts.ko
dma-shared-buffer.ko
drbg.ko
dwc3.ko
dwc_common_port_lib.ko
dwc_otg.ko
ecb.ko
exportfs.ko
ext4.ko
extcon-core.ko
f2fs.ko
fb.ko
fb_io_fops.ko
firmware_class.ko
fixed.ko
fixed_phy.ko
font.ko
fwnode_mdio.ko
gcm.ko
gen_probe.ko
genet.ko
geniv.ko
gf128mul.ko
ghash-ce.ko
ghash-generic.ko
glob.ko
gpio-bcm-virt.ko
gpio-brcmstb.ko
gpio-generic.ko
gpio-raspberrypi-exp.ko
gpio-regulator.ko
hmac.ko
hwmon.ko
i2c-algo-bit.ko
i2c-bcm2835.ko
i2c-brcmstb.ko
i2c-core.ko
i2c-designware-core.ko
i2c-designware-platform.ko
input-core.ko
iova.ko
iproc-rng200.ko
ipv6.ko
irq-bcm7038-l1.ko
irq-bcm7120-l2.ko
irq-brcmstb-l2.ko
jbd2.ko
jffs2.ko
jitterentropy_rng.ko
led-class-multicolor.ko
led-class.ko
leds-gpio.ko
leds-pwm.ko
ledtrig-actpwr.ko
ledtrig-default-on.ko
ledtrig-heartbeat.ko
ledtrig-input.ko
ledtrig-netdev.ko
ledtrig-timer.ko
libaes.ko
libarc4.ko
libcryptoutils.ko
libphy.ko
libsha1.ko
libsha256.ko
linear_ranges.ko
llc.ko
loop.ko
macb.ko
macb_pci.ko
map_funcs.ko
mbcache.ko
mc.ko
mdio-bcm-unimac.ko
mdio_devres.ko
mfd-core.ko
microchip.ko
mii.ko
mmc_block.ko
mmc_core.ko
mmc_hsq.ko
mousedev.ko
mtd.ko
mtd_blkdevs.ko
mtdblock.ko
n_null.ko
nls_ascii.ko
nls_base.ko
nvme-core.ko
nvme.ko
nvmem-raspberrypi-otp.ko
of_mdio.ko
ofpart.ko
overlay.ko
p8022.ko
pci-host-common.ko
pci-host-generic.ko
pci-stub.ko
pcie-brcmstb.ko
pcie-microchip-host.ko
pcrypt.ko
phy-brcm-usb-dvr.ko
phy-generic.ko
phylink.ko
pinctrl-bcm2835.ko
pinctrl-single.ko
pps_core.ko
psnap.ko
ptp.ko
pwm-bcm2835.ko
pwm-brcmstb.ko
pwm-rp1.ko
pwrseq_emmc.ko
pwrseq_simple.ko
raspberrypi-cpufreq.ko
raspberrypi-gpiomem.ko
raspberrypi-hwmon.ko
raspberrypi.ko
rational.ko
regmap-core.ko
regmap-mmio.ko
reset-brcmstb-rescal.ko
reset-brcmstb.ko
reset-raspberrypi.ko
rng-core.ko
rng.ko
rp1-adc.ko
rp1.ko
rtc-brcmstb-waketimer.ko
rtc-rpi.ko
sch_fq_codel.ko
scsi_common.ko
scsi_mod.ko
sd_mod.ko
sdhci-brcmstb.ko
sdhci-iproc.ko
sdhci-of-dwcmshc.ko
sdhci-pltfm.ko
sdhci.ko
selftests.ko
seqiv.ko
serdev.ko
serial_base.ko
serial_mctrl_gpio.ko
sha1-ce.ko
sha1_generic.ko
sha2-ce.ko
sha256-arm64.ko
sha256_generic.ko
sha3-ce.ko
sha3_generic.ko
sha512-arm64.ko
sha512-ce.ko
sha512_generic.ko
simplefb.ko
skcipher.ko
sm3-ce.ko
sm3.ko
sm4-ce-cipher.ko
sm4-ce.ko
sm4.ko
smsc.ko
squashfs.ko
stp.ko
tcp_cubic.ko
uas.ko
udc-core.ko
unix.ko
usb-common.ko
usb-storage.ko
usbcore.ko
v4l2-dv-timings.ko
vc_mem.ko
vchiq.ko
vcio.ko
videodev.ko
virt-dma.ko
watchdog.ko
xhci-hcd.ko
xhci-pci.ko
xhci-plat-hcd.ko
xts.ko
xz_dec.ko

EDIT: https://github.com/openwrt/openwrt/issues/17315

Just in general, I'm on my phone and can't check the details (nor have any experience with the RPi).

Empty kmod packages can be normal, if the functionality is built statically, into the kernel by the (sub-)target kernel config. In that case the kmod package remains empty and only serves to fullfil the package dependencies.

Thanks for the reply. I do not believe that is to blame here, but I would be happy to be proven mistaken :smiley:

When I ssh into the device, I expect to see some kernel config options in /proc/config.gz which get set by package/kernel/linux/modules/video.mk that are simply not there. For example: CONFIG_VIDEOBUF2_VMALLOC should be pulled when building with my diffconfig but:

# zgrep CONFIG_VIDEOBUF2_VMALLOC /proc/config.gz
#

@slh - can you point me to an example of this? Is the only requirement that the corresponding kernel config options are set to =y within the respective config-6.6 for example?

For the options enabled by kmod-video-videobuf2 none of them are in any of the configs:

#!/bin/bash
opts=(
  CONFIG_VIDEOBUF2_CORE
  CONFIG_VIDEOBUF2_MEMOPS
  CONFIG_VIDEOBUF2_V4L2
  CONFIG_VIDEOBUF2_VMALLOC
)

for i in "${opts[@]}"; do
  grep "$i" target/linux/generic/config-6.6 target/linux/bcm27xx/config-6.6 target/linux/bcm27xx/bcm2712/config-6.6
done

When I run that little script, I get no matches for any of the files :confused:

AFAIK that should be the only potential reason, as I mentioned, I was just talking in general, without being able to check the source on my phone.