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 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/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.
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?