Help needed to compile dvb-usb for DVB-T (TV tuner) support

I wanted to use tvheadend on a goflexnet running LEDE (headless TV recorder/stream server that will stream the TV over the LAN to clients that have a screen).

But i quickly found out that LEDE has no DVB drivers to run the DVB-T dongles, and there is no feed with such drivers.

:crazy_face: What's the point of having tvheadend without drivers? :crazy_face:

Nevermind. I googled around and scavenged a makefile used by old projects from 2008 and 2012.

Of course most of the kernel configuration options didn't work anymore, but at least I had a structure to guide me.

I managed to fix it enough to compile dvb-core, but I can't get it to compile dvb-usb, I get the following error:

ERROR: module '/run/media/alby/data_xeon_btrfs/source_code/my_LEDE_fork/source/build_dir/target-arm_xscale_musl_eabi/linux-kirkwood/linux-4.9.45/drivers/media/usb/dvb-usb/dvb-usb.ko' is missing.

I selected dvb-core, dvb-usb and dvb-usb-a800 (a random dvb-usb driver I had in the original files, after I removed the legacy parts about downloading firmwares, will deal with making proper firmware packages later, if I get this to compile at all).

If I get this thing to work, I will submit it to openwrt packages repo (and probably become its maintainer).

I'm pasting the full file below, I named it /dvb.mk and dropped in source/package/kernel/linux/modules/. Yes it has a ton of commented code, it's stuff from the original files I scavenged and I don't want it to interfere.

Then its options will appear under menuconfig, in Kernel modules -> DVB support

# sources for this file
# https://github.com/braice/MuMuDVB/blob/mumudvb2/openwrt/package/kernel/modules/dvb.mk
# https://code.google.com/archive/p/mediawrt/

# Copyright (C) 2009 Brice DUBOST
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#


DVB_MENU:=DVB support


define KernelPackage/dvb-core
  SUBMENU:=$(DVB_MENU)
  TITLE:=DVB core support
  DEPENDS:= +kmod-i2c-core +kmod-input-core
  KCONFIG:= \
	CONFIG_MEDIA_SUPPORT=m \
	CONFIG_MEDIA_ANALOG_TV_SUPPORT=y \
	CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y \
	CONFIG_DVB_CORE=m \
	CONFIG_DVB_NET=y \
	CONFIG_DVB_MAX_ADAPTERS=8 \
	CONFIG_DVB_DYNAMIC_MINORS=n \
	CONFIG_DVB_PLATFORM_DRIVERS=y \
	CONFIG_DVB_C8SECTPFE \
	CONFIG_SMS_SDIO_DRV \
	CONFIG_MEDIA_SUBDRV_AUTOSELECT=y \

  FILES:=$(LINUX_DIR)/drivers/media/dvb-core/dvb-core.$(LINUX_KMOD_SUFFIX)
  AUTOLOAD:=$(call AutoLoad,50,dvb-core)
endef

define KernelPackage/dvb-core/description
 Kernel module for DVB support
endef

$(eval $(call KernelPackage,dvb-core))

define KernelPackage/dvb-usb
  SUBMENU:=$(DVB_MENU)
  TITLE:=DVB USB Support
  DEPENDS:=@USB_SUPPORT +kmod-dvb-core +kmod-usb-core
  KCONFIG:= \
	CONFIG_DVB_USB=m \
	CONFIG_INPUT=m \
	CONFIG_RC_CORE=m

  FILES:=$(LINUX_DIR)/drivers/media/usb/dvb-usb/dvb-usb.$(LINUX_KMOD_SUFFIX)
  AUTOLOAD:=$(call AutoLoad,55,dvb-usb)
endef

#

define KernelPackage/dvb-usb/description
 Kernel module for DVB USB devices. Note you have to select a device.
endef

$(eval $(call KernelPackage,dvb-usb))

#########
#DEVICES#
#########

#most used firmware download link
LINUX_TV_ORG:=http://www.linuxtv.org/downloads/firmware/

define KernelPackage/dvb-usb-a800
  SUBMENU:=$(DVB_MENU)
  TITLE:=AVerMedia AverTV DVB-T USB 2.0 (A800) receiver
  KCONFIG:= \
	CONDIG_DVB_USB_A800=m \
	CONFIG_DVB_DIB3000MC=m \

  DEPENDS:=@USB_SUPPORT +kmod-dvb-core +kmod-dvb-usb +kmod-usb-core
  FILES:= \
	$(LINUX_DIR)/drivers/media/dvb-frontends/dvb-pll.$(LINUX_KMOD_SUFFIX) \
	$(LINUX_DIR)/drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common.$(LINUX_KMOD_SUFFIX) \
	$(LINUX_DIR)/drivers/media/dvb/dvb-usb/dvb-usb-a800.$(LINUX_KMOD_SUFFIX) \
	$(LINUX_DIR)/drivers/media/dvb-frontends/dibx000_common.$(LINUX_KMOD_SUFFIX) \
	$(LINUX_DIR)/drivers/media/dvb-frontends/dib3000mc.$(LINUX_KMOD_SUFFIX) \
	$(LINUX_DIR)/drivers/media/tuners/mt2060.$(LINUX_KMOD_SUFFIX)
endef

$(eval $(call KernelPackage,dvb-usb-a800))

####OLD STUFF, DISABLED FOR NOW

# define KernelPackage/dvb-usb-a800
#   SUBMENU:=$(DVB_MENU)
#   TITLE:=AVerMedia AverTV DVB-T USB 2.0 (A800) receiver
#   KCONFIG:= \
# 	CONFIG_DVB_USB_A800\
# 	CONFIG_DVB_DIB3000MC \
# 	CONFIG_MEDIA_TUNER_MT2060
#   DEPENDS:=@USB_SUPPORT +kmod-dvb-core +kmod-dvb-usb +kmod-usb-core
#   FILES:= \
# 	$(LINUX_DIR)/drivers/media/dvb-frontends/dvb-pll.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/dvb-usb/dvb-usb-a800.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb-frontends/dibx000_common.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb-frontends/dib3000mc.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/tuners/mt2060.$(LINUX_KMOD_SUFFIX)
# endef

# A800_FW:=dvb-usb-avertv-a800-02.fw
#
# define KernelPackage/dvb-usb-a800/description
# Supports the AVerMedia AverTV DVB-T USB 2.0 (A800) receiver.
# The firmware $(A800_FW) will be downloaded from
# $(LINUX_TV_ORG)
# endef
#
# define Download/dvb-usb-a800
#   FILE:=$(A800_FW)
#   URL:=$(LINUX_TV_ORG)
# endef
#
#
# define KernelPackage/dvb-usb-a800/install
# 	$(INSTALL_DIR) $(1)/lib/firmware
# 	$(INSTALL_DATA) $(DL_DIR)/$(A800_FW) $(1)/lib/firmware/
# endef

#$(eval $(call Download,dvb-usb-a800))
#$(eval $(call KernelPackage,dvb-usb-a800))

#
#
# define KernelPackage/dvb-usb-af9015
#   SUBMENU:=$(DVB_MENU)
#   TITLE:=Afatech AF9015 DVB-T USB2.0 support
#   KCONFIG:= \
# 	CONFIG_DVB_USB_AF9015 \
# 	CONFIG_DVB_AF9013 \
# 	CONFIG_DVB_PLL \
# 	CONFIG_MEDIA_TUNER_MT2060 \
# 	CONFIG_MEDIA_TUNER_QT1010 \
# 	CONFIG_MEDIA_TUNER_TDA18271 \
# 	CONFIG_MEDIA_TUNER_MXL5005S
#   DEPENDS:=@USB_SUPPORT +kmod-dvb-core +kmod-dvb-usb +kmod-usb-core +kmod-i2c-core
#   FILES:= \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dvb-pll.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/dvb-usb/dvb-usb-af9015.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/af9013.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/mt2060.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/qt1010.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/tda18271.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/mxl5005s.$(LINUX_KMOD_SUFFIX)
# endef
#
# AF9015_FW:=dvb-usb-af9015.fw
#
# define KernelPackage/dvb-usb-af9015/description
#  Supported devices :
# *  Afatech AF9015 DVB-T USB2.0 stick
# *  Leadtek WinFast DTV Dongle Gold
# *  Pinnacle PCTV 71e
# *  KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)
# *  DigitalNow TinyTwin DVB-T Receiver
# *  TwinHan AzureWave AD-TU700(704J)
# *  TerraTec Cinergy T USB XE
# *  KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T)
# *  AVerMedia AVerTV DVB-T Volar X
# *  Xtensions XD-380
# *  MSI DIGIVOX Duo
# *  Fujitsu-Siemens Slim Mobile USB DVB-T
# *  Telestar Starstick 2
# *  AVerMedia A309
# *  MSI Digi VOX mini III
#
# See also the linuxtv wiki article for this chip
# https://www.linuxtv.org/wiki/index.php/Afatech_AF9015
#
# The $(AF9015_FW) firmware will be downloaded from
# http://palosaari.fi/linux/v4l-dvb/firmware/af9015/ version 5.24
#
# there are firmware versions available and their creation date (as of October 2017)
# 4.65.0.0/	2008-09-20 18:56
# 4.71.0.0/	2008-09-20 18:56
# 4.73.0.0/	2008-09-20 18:56
# 4.95.0.0/	2008-09-20 18:56
# 5.1.0.0/	2010-05-14 20:12
# 5.24.0.0/	2013-12-24 02:37
# endef
#
#
# define Download/dvb-usb-af9015
#   FILE:=$(AF9015_FW)
#   URL:=http://palosaari.fi/linux/v4l-dvb/firmware/af9015/5.24.0.0/
#   #MD5SUM:=532b8e1eabd3b4e9f8ca084b767e4470
#   PKG_HASH:=2e734fa15da07ac75a9ae8aabd766c2b1e36cf10441077597b37f98e50188a71
# endef
#
# define KernelPackage/dvb-usb-af9015/install
# 	$(INSTALL_DIR) $(1)/lib/firmware
# 	$(INSTALL_DATA) $(DL_DIR)/$(AF9015_FW) $(1)/lib/firmware/
# endef
#
# $(eval $(call Download,dvb-usb-af9015))
# $(eval $(call KernelPackage,dvb-usb-af9015))
#
#
#
# define KernelPackage/dvb-usb-dibusb-mc
#   SUBMENU:=$(DVB_MENU)
#   TITLE:=DiBcom USB DVB-T (DiB3000M-C/P based devices)
#   KCONFIG:= \
# 	CONFIG_DVB_USB_DIBUSB_MC \
# 	CONFIG_DVB_DIB3000MC \
# 	CONFIG_MEDIA_TUNER_MT2060
#   DEPENDS:=@USB_SUPPORT +kmod-dvb-core +kmod-dvb-usb +kmod-usb-core +kmod-i2c-core
#   FILES:= \
# 	$(LINUX_DIR)/drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/dvb-usb/dvb-usb-mc.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dibx000_common.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dib3000mc.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/mt2060.$(LINUX_KMOD_SUFFIX)
# endef
#
# DIBUSB-MC_FW:=dvb-usb-dibusb-6.0.0.8.fw
#
# define KernelPackage/dvb-usb-dibusb-mc/description
#  Supported devices :
# *  DiBcom USB2.0 DVB-T reference design (MOD3000P)
# *  Artec T1 USB2.0 TVBOX (please check the warm ID)
# *  LITE-ON USB2.0 DVB-T Tuner
# *  MSI Digivox Mini SL
# *  GRAND - USB2.0 DVB-T adapter
# *  Artec T14 - USB2.0 DVB-T
# *  Leadtek - USB2.0 Winfast DTV dongle
#
# The firmware $(DIBUSB-MC_FW) will be downloaded from
# $(LINUX_TV_ORG)
# endef
#
#
# define Download/dvb-usb-dibusb-mc
#   FILE:=$(DIBUSB-MC_FW)
#   URL:=$(LINUX_TV_ORG)
#   PKG_HASH:=c87e2e78240e13649e8bdc42f94502699a4448cfa2ac9b137f1d9d70686f3faa
# endef
#
# define KernelPackage/dvb-usb-dibusb-mc/install
# 	$(INSTALL_DIR) $(1)/lib/firmware
# 	$(INSTALL_DATA) $(DL_DIR)/$(DIBUSB-MC_FW) $(1)/lib/firmware/
# endef
#
# $(eval $(call Download,dvb-usb-dibusb-mc))
# $(eval $(call KernelPackage,dvb-usb-dibusb-mc))
#
#
#
# define KernelPackage/dvb-usb-dibusb-mb
#   SUBMENU:=$(DVB_MENU)
#   TITLE:=DiBcom USB DVB-T (DiB3000M-B based devices)
#   KCONFIG:= \
# 	CONFIG_DVB_USB_DIBUSB_MB \
# 	CONFIG_DVB_PLL \
# 	CONFIG_DVB_DIB3000MB \
# 	CONFIG_MEDIA_TUNER_MT2060
#   DEPENDS:=@USB_SUPPORT +kmod-dvb-core +kmod-dvb-usb +kmod-usb-core +kmod-i2c-core
#   FILES:= \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dvb-pll.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/dvb-usb/dvb-usb-mb.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dib3000mb.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/mt2060.$(LINUX_KMOD_SUFFIX)
# endef
#
# DIBUSB-MB_FW1:=dvb-usb-dibusb-5.0.0.11.fw
# DIBUSB-MB_FW2:=dvb-usb-dibusb-6.0.0.8.fw
#
# define KernelPackage/dvb-usb-dibusb-mb/description
#  Supported devices :
# *  AVerMedia AverTV DVBT USB1.1
# *  Compro Videomate DVB-U2000 - DVB-T USB1.1 (please confirm to linux-dvb)
# *  DiBcom USB1.1 DVB-T reference design (MOD3000)
# *  KWorld V-Stream XPERT DTV - DVB-T USB1.1
# *  Grandtec USB1.1 DVB-T
# *  TwinhanDTV USB-Ter USB1.1 / Magic Box I / HAMA USB1.1 DVB-T device
# *  Artec T1 USB1.1 TVBOX with AN2135
# *  VideoWalker DVB-T USB
# *  Artec T1 USB2.0
#
# The firmwares $(DIBUSB-MB_FW1) $(DIBUSB-MB_FW2) will be downloaded from
# $(LINUX_TV_ORG)
# endef
#
# # Supported but you have to add the firmware by hand :
# # *  KWorld Xpert DVB-T USB2.0
# # *  KWorld/ADSTech Instant DVB-T USB2.0
# # *  Artec T1 USB1.1 TVBOX with AN2235
#
#
# define Download/dvb-usb-dibusb-mb1
#   FILE:=$(DIBUSB-MB_FW1)
#   URL:=$(LINUX_TV_ORG)
#   PKG_HASH:=790e48e555550c175a0c8ca1d0c4ba988e88e7832593aeb5e022344779d3d5f9
# endef
# define Download/dvb-usb-dibusb-mb2
#   FILE:=$(DIBUSB-MB_FW2)
#   URL:=$(LINUX_TV_ORG)
#   PKG_HASH:=c87e2e78240e13649e8bdc42f94502699a4448cfa2ac9b137f1d9d70686f3faa
# endef
#
# define KernelPackage/dvb-usb-dibusb-mb/install
# 	$(INSTALL_DIR) $(1)/lib/firmware
# 	$(INSTALL_DATA) $(DL_DIR)/$(DIBUSB-MB_FW1) $(1)/lib/firmware/
# 	$(INSTALL_DATA) $(DL_DIR)/$(DIBUSB-MB_FW2) $(1)/lib/firmware/
# endef
#
# $(eval $(call Download,dvb-usb-dibusb-mb1))
# $(eval $(call Download,dvb-usb-dibusb-mb2))
# $(eval $(call KernelPackage,dvb-usb-dibusb-mb))
#
# define KernelPackage/dvb-usb-dib0700
#   SUBMENU:=$(DVB_MENU)
#   TITLE:=DiBcom DiB0700 USB DVB devices
#   KCONFIG:= CONFIG_DVB_USB_DIB0700 \
# 	CONFIG_DVB_DIB7000P \
# 	CONFIG_DVB_DIB7000M \
# 	CONFIG_DVB_DIB8000 \
# 	CONFIG_DVB_DIB9000 \
# 	CONFIG_DVB_DIB3000MC \
# 	CONFIG_DVB_S5H1411 \
# 	CONFIG_DVB_LGDT3305 \
# 	CONFIG_DVB_TUNER_DIB0070 \
# 	CONFIG_DVB_TUNER_DIB0090 \
# 	CONFIG_MEDIA_TUNER_MT2060 \
# 	CONFIG_MEDIA_TUNER_MT2266 \
# 	CONFIG_MEDIA_TUNER_XC2028 \
# 	CONFIG_MEDIA_TUNER_XC5000 \
# 	CONFIG_MEDIA_TUNER_MXL5007T
#   DEPENDS:=+kmod-dvb-usb
#   FILES:= $(LINUX_DIR)/drivers/media/dvb/dvb-usb/dvb-usb-dib0700.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dib7000p.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dibx000_common.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dib7000m.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dibx000_common.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dib8000.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dib9000.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dibx000_common.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dib3000mc.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dibx000_common.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/s5h1411.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/lgdt3305.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dib0070.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/dvb/frontends/dib0090.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/mt2060.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/mt2266.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/tuner-xc2028.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/xc5000.$(LINUX_KMOD_SUFFIX) \
# 	$(LINUX_DIR)/drivers/media/common/tuners/mxl5007t.$(LINUX_KMOD_SUFFIX)
#   AUTOLOAD:=$(call AutoLoad,65,mxl5007t xc5000 tuner-xc2028 mt2266 mt2060 dib0090 dib0070 lgdt3305 s5h1411 dibx000_common dib3000mc dib7000m dib7000p dib8000 dib9000 dvb-usb-dib0700/force_lna_activation=1)
# endef
#
# define KernelPackage/dvb-usb-dib0700/description
#  Say Y here to support the DiBcom DiB0700 USB DVB devices .
# The following modules will be compiled for this device :  mxl5007t xc5000 tuner-xc2028 mt2266 mt2060 dib0090 dib0070 lgdt3305 s5h1411 dibx000_common dib3000mc dibx000_common dib8000 dibx000_common dib7000m dibx000_common dib7000p dvb-usb-dib0700
# You have to put the firmware files in the download dir : dvb-usb-dib0700-1.20.fw
# They can be found in the package http://packages.ubuntu.com/jaunty/linux-firmware .
# endef
#
# DVB_USB_DIB0700_1_20_FW:=dvb-usb-dib0700-1.20.fw
#
# define Download/dvb_usb_dib0700_1_20
#     FILE:=$(DVB_USB_DIB0700_1_20_FW)
#     URL:=http://code.google.com/p/mediawrt/source/browse/trunk/firmware/
# endef
#
#
# define KernelPackage/dvb-usb-dib0700/install
# 	$(INSTALL_DIR) $(1)/lib/firmware
# 	$(INSTALL_DATA) $(DL_DIR)/$(DVB_USB_DIB0700_1_20_FW) $(1)/lib/firmware/
# endef
#
# $(eval $(call Download,dvb_usb_dib0700_1_20))
#
# $(eval $(call KernelPackage,dvb-usb-dib0700))

Hi it's been 4 years since you wrote this post, I don't know if you will answer
i wanted to ask you if you managed to compile the dvb-core module as a package? if so for which architecture? do you have an ipk file to share?

no I abandoned the project long ago, sorry

1 Like

I'm using tvheadend now.
My solution is to download / git clone the openwrt source, install feeds, install the default config for the router, run make kernel_menuconfig and select required drivers and build the firmware image.

1 Like

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.