I was able to build the module and install it to the kernel without error, but it’s hard to test without the hardware.
There are two options; “in tree” and “out of tree”, “in tree” when the module is being included in a big kernel with everything else, and “out of tree” when you want to build just these few modules.
identify the card (guessing from the lscpi output above)
EM2880_BOARD_PINNACLE_PCTV_HD_PRO, Pinnacle PCTV HD Pro Stick, 0x2304:0x0227, Analog/DVB
As standard user
extract source code from linux-5.14.0-570.32.1.el9_6 to
/data/build
find media_build_em28xx/ -type d
media_build_em28xx/
media_build_em28xx/linux
media_build_em28xx/linux/drivers
media_build_em28xx/linux/drivers/media
media_build_em28xx/linux/drivers/media/usb
media_build_em28xx/linux/drivers/media/usb/em28xx
media_build_em28xx/linux/drivers/media/dvb-core
media_build_em28xx/linux/drivers/media/dvb-frontends
media_build_em28xx/linux/drivers/media/dvb-frontends/cxd2880
media_build_em28xx/linux/drivers/media/dvb-frontends/drx39xyj
media_build_em28xx/linux/drivers/media/tuners
delete all Kconfig and Makefiles
create the Makefiles using these symbols
CONFIG_DVB_CORE := m
CONFIG_VIDEO_EM28XX := m
CONFIG_VIDEO_EM28XX_ALSA := m
CONFIG_VIDEO_EM28XX_DVB := m
CONFIG_DVB_ZL10353 := m
CONFIG_MEDIA_TUNER_XC2028 := m
(very messy makefiles created by me that somehow work)
find media_build_em28xx/ -type f -iname 'Makefile'
media_build_em28xx/linux/drivers/media/usb/em28xx/Makefile
media_build_em28xx/linux/drivers/media/dvb-core/Makefile
media_build_em28xx/linux/drivers/media/dvb-frontends/Makefile
media_build_em28xx/linux/drivers/media/tuners/Makefile
media_build_em28xx/linux/Makefile
start the build
make -C media_build_em28xx/linux
I end up with six modules
find media_build_em28xx/ -type f -iname '*.ko'
media_build_em28xx/linux/drivers/media/usb/em28xx/em28xx-alsa.ko
media_build_em28xx/linux/drivers/media/usb/em28xx/em28xx-dvb.ko
media_build_em28xx/linux/drivers/media/usb/em28xx/em28xx.ko
media_build_em28xx/linux/drivers/media/dvb-core/dvb-core.ko
media_build_em28xx/linux/drivers/media/dvb-frontends/zl10353.ko
media_build_em28xx/linux/drivers/media/tuners/xc2028.ko
sign the modules if you’re on secure boot
get info about the em28xx module
modinfo media_build_em28xx/linux/drivers/media/usb/em28xx/em28xx.ko
srcversion: 4B27FD1111F47F8DAAC9A78
depends: mc,videodev,tveeprom
load two dependencies
modprobe tveeprom
modprobe videodev
now load the new module into the kernel
sudo insmod media_build_em28xx/linux/drivers/media/usb/em28xx/em28xx.ko
we see all three modules loaded
lsmod
em28xx 114688 0
videodev 385024 1 em28xx
tveeprom 28672 1 em28xx
in real life, we’d install all six modules, and use depmod