Sample Header Ad - 728x90

Discover needed tuner/frontends kernel modules for a DVB device

1 vote
0 answers
720 views
I'm trying to compile loadable kernel modules (.ko files) to support different USB DVB tuners on a Linux embedded system (a QNAP NAS specifically) with **kernel 4.2.8**. This system doesn't have udev (or better, it has, but basically you cannot touch it) so I need to build the kernel modules and then **insmod** them one after another. I've managed to build the .ko files which load correctly but I need to know which modules are needed for a specific DVB tuner **without having it** in hand. With some devices it's easy, for example Hauppauge `2040:7070 which uses dvb-usb-dib0700.ko` I can examine the module dependencies: [~] # modinfo dvb-usb-dib0700.ko | grep depends depends: dib7000m,dib9000,dibx000_common,dvb-usb,dib0090,dib0070,dib3000mc,rc-core and I can insmod all the different frontends like `dib7000m.ko`, etc. and the tuner is perfectly detected (reported by **dmesg**) with the **/dev/dvb** node created accordingly. Some other devices, instead, are more difficult and this raises my question. Consider for example Pinnacle PCTV DVB-S2 `2013:024c`: the dmesg log reported on [its LinuxTV page](https://www.linuxtv.org/wiki/index.php/Pinnacle_PCTV_DVB-S2_Stick_(460e)) suggests it may use **em28xx**, **a8293** and **TDA10071** but **modinfo** doesn't help in this case: # modinfo em28xx-dvb.ko | grep depends depends: em28xx # modinfo em28xx.ko | grep depends depends: As you can see, there are no references here to the frontends a8293 and TDA10071 (which exist on kernel 4.2.8 as loadable kernel modules), so how can I know without having the phisical device which tuners and frontends kernel modules it needs? I'm asking because a friend with that tuner tried to insmod `dvb-frontends/a8293.ko and dvb-frontends/tda10071.ko` but still dmesg doesn't say **Successfully loaded em28xx-dvb** and neither **/dev/dvb** is created, so I think another kernel module is missing. But what module? Kernel modules also change with kernel versions, so the LinuxTV page may not be correct for our kernel 4.2.8. When connecting an USB tuner to a Debian virtual machine, the system automatically loads the required kernel modules for tuners and frontends using **udev**. Where does the OS find this information about the tuner? If it's hardcoded somewhere, can I extract it to understand which are the correct kernel modules for a tuner by its lsusb ID? I would like to replicate on the embedded system the exact procedure that Debian does. EDIT: By continuing to search on the net, I found that **udev** may use **modalias** to match the available kernel modules and see if they're needed. But even if I have the tuner attached on the embedded system (which doesn't use udev) how can I "inspect" the different i2c aliases?
Asked by virtualdj (177 rep)
Oct 30, 2017, 09:03 AM
Last activity: Nov 4, 2017, 09:08 AM