I have the sources of the kernel of an embedded Linux box (specifically a QNAP NAS) which is running a 64-bit v3.12.6 Linux kernel, together with the kernel config files.
What I'm trying to do is adding DVB support to that kernel, by adding kernel modules which I can then add to the system using insmod. However, using this version, I'm unable to compile dvb-core.ko which is only available built-in (i.e. CONFIG_DVB_CORE=y instead of CONFIG_DVB_CORE=m).
I've looked at the config file that's related to my box model and there are no DVB config switches set:
# cat ../../kernel_cfg/TS-X53/linux-3.12.6-x86_64-hal.cfg | grep DVB
# CONFIG_DVB_DUMMY_FE is not set
So I've copied that file as .config in the kernel sources directory and run make menuconfig. I checked the option:
Device Drivers -> Multimedia Support -> Digital TV Support
It's not possible to hit M on that line so I hit Y; and after enabling it, if I search for DVB_CORE (using the / key), I get:
---------------------------- Search Results -----------------------------
| Symbol: DVB_CORE [=y] |
| Type : tristate |
| Defined at drivers/media/Kconfig:117 |
| Depends on: MEDIA_SUPPORT [=y] && MEDIA_DIGITAL_TV_SUPPORT [=y] |
| Selects: CRC32 [=y] |
-------------------------------------------------------------------------
So if then I enable the various tuner drivers as a module (such as dvb-usb-dib0700.ko), save, exit and then run make modules, I get all the tuner .ko files but not dvb-core.ko which is necessary to my system to load the other dependent .ko files. These are the config switches after exiting:
# cat .config | grep DVB
CONFIG_DVB_CORE=y
CONFIG_DVB_NET=y
CONFIG_DVB_MAX_ADAPTERS=8
# CONFIG_DVB_DYNAMIC_MINORS is not set
CONFIG_DVB_USB=m
# CONFIG_DVB_USB_DEBUG is not set
# CONFIG_DVB_USB_A800 is not set
# CONFIG_DVB_USB_DIBUSB_MB is not set
# CONFIG_DVB_USB_DIBUSB_MC is not set
CONFIG_DVB_USB_DIB0700=m
# CONFIG_DVB_USB_UMT_010 is not set
# CONFIG_DVB_USB_CXUSB is not set
# CONFIG_DVB_USB_M920X is not set
# CONFIG_DVB_USB_DIGITV is not set
# CONFIG_DVB_USB_VP7045 is not set
# CONFIG_DVB_USB_VP702X is not set
# CONFIG_DVB_USB_GP8PSK is not set
# CONFIG_DVB_USB_NOVA_T_USB2 is not set
# CONFIG_DVB_USB_TTUSB2 is not set
# CONFIG_DVB_USB_DTT200U is not set
# CONFIG_DVB_USB_OPERA1 is not set
# CONFIG_DVB_USB_AF9005 is not set
# CONFIG_DVB_USB_PCTV452E is not set
# CONFIG_DVB_USB_DW2102 is not set
# CONFIG_DVB_USB_CINERGY_T2 is not set
# CONFIG_DVB_USB_DTV5100 is not set
# CONFIG_DVB_USB_FRIIO is not set
# CONFIG_DVB_USB_AZ6027 is not set
# CONFIG_DVB_USB_TECHNISAT_USB2 is not set
# CONFIG_DVB_USB_V2 is not set
# CONFIG_DVB_TTUSB_BUDGET is not set
# CONFIG_DVB_TTUSB_DEC is not set
# CONFIG_DVB_B2C2_FLEXCOP_USB is not set
# DVB-S (satellite) frontends
# DVB-T (terrestrial) frontends
CONFIG_DVB_DIB3000MC=m
CONFIG_DVB_DIB7000M=m
CONFIG_DVB_DIB7000P=m
# DVB-C (cable) frontends
CONFIG_DVB_LGDT3305=m
CONFIG_DVB_S5H1411=m
CONFIG_DVB_DIB8000=m
CONFIG_DVB_TUNER_DIB0070=m
CONFIG_DVB_TUNER_DIB0090=m
# SEC control devices for DVB-S
# CONFIG_DVB_DUMMY_FE is not set
If I edit the .config file manually and put CONFIG_DVB_CORE=m save and then make modules nothing changes:
# make modules
scripts/kconfig/conf --silentoldconfig Kconfig
#
# configuration written to .config
#
make[1]: Nothing to be done for `relocs'.
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CALL scripts/checksyscalls.sh
Building modules, stage 2.
MODPOST 195 modules
The dvb-core.ko is still not compiled, and also the setting is reverted:
# cat .config | grep DVB_CORE
CONFIG_DVB_CORE=y
So my question is: how can I compile dvb-core.ko as a kernel module?
Be aware that using the previous kernel sources, which were using kernel 3.4.6, I could do this easily with the make menuconfig as there I was able to set M on the DVB setting. But the menu was different as DVB was here:
Device Drivers -> Multimedia Support -> DVB for Linux
And this was the result of the search for DVB_CORE:
---------------------------- Search Results -----------------------------
| Symbol: DVB_CORE [=m] |
| Type : tristate |
| Prompt: DVB for Linux |
| Defined at drivers/media/Kconfig:69 |
| Depends on: MEDIA_SUPPORT [=y] |
| Location: |
| -> Device Drivers |
| -> Multimedia support (MEDIA_SUPPORT [=y]) |
| Selects: CRC32 [=y] |
-------------------------------------------------------------------------
And the (old) config switches:
# cat .config | grep DVB
CONFIG_DVB_CORE=m
CONFIG_DVB_NET=y
CONFIG_VIDEO_BT848_DVB=y
CONFIG_DVB_MAX_ADAPTERS=8
# CONFIG_DVB_DYNAMIC_MINORS is not set
CONFIG_DVB_CAPTURE_DRIVERS=y
CONFIG_DVB_AV7110=m
# CONFIG_DVB_AV7110_OSD is not set
CONFIG_DVB_BUDGET_CORE=m
CONFIG_DVB_BUDGET=m
CONFIG_DVB_BUDGET_CI=m
CONFIG_DVB_BUDGET_AV=m
CONFIG_DVB_BUDGET_PATCH=m
CONFIG_DVB_USB=m
# CONFIG_DVB_USB_DEBUG is not set
CONFIG_DVB_USB_A800=m
CONFIG_DVB_USB_DIBUSB_MB=m
CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
CONFIG_DVB_USB_DIBUSB_MC=m
CONFIG_DVB_USB_DIB0700=m
... cut ...