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.
What's the point of having tvheadend without drivers?
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))