TBS 6281 Driver

Next step was to get the TBS card working. First problem: it wasn’t recognised; there was nothing under lspci at all. You should see this:

lspci
05:00.0 Multimedia controller: Philips Semiconductors SAA7160 (rev 03)

Taking the card out and re-seating it fixed that issue. Phew!

I then followed these instruction to download and compile the drivers:

http://linuxtv.org/wiki/index.php/TBS6280

They compiled OK, but after the make install and a reboot there were no devices in /dev/dvb.

I was getting the following error in /var/log/kern.log

[ 1.666293] saa716x_tbs_dvb: disagrees about version of symbol stv090x_attach

After a bit of Googling, the consensus seemed to be that it was an error with compiling against the wrong kernel headers and that deleting the following modules should sort it out:

rm /lib/modules/$(uname -r)/kernel/drivers/media

There were some old kernel headers installed, so I removed that package leaving only the correct headers. Still, it didn’t seem quite right to me. There are a lot of other modules under there and, also, why did recompiling against the correct headers and re-installing not overwrite the old modules? In the end, despite my concerns, I went ahead and deleted the module directory and recompiled and it all burst into life. Oh well, as long as it works I’m happy.

UPDATE
Niel C has kindly commented below with a method of identifying the offending module, so the following should be enough:

rm /lib/modules/3.13.0-39-generic/kernel/drivers/media/dvb-frontends/stv090x.ko
(Note that I haven’t tested it myself yet)

3 thoughts on “TBS 6281 Driver”

  1. rm /lib/modules/$(uname -r)/kernel/drivers/media

    With a little testing, it appears uncessary to delete everything under drivers/media

    Just delete, as one would expect to be necessary the dvb related subdirectories, namely drivers/media/dvb -core and drivers/media/dvb-frontends.

    And of course do a depmod -a for good measure.

    The reason for the symbol conflict is that something in these directories also defines and/or uses the symbol which the TBS code redefines. If one did a test, removing one by one every file in these sub-directories, it may be possible to limit the deletion even further.

    1. Thanks for the tip.

      I wasn’t in the mood to narrow down the files when I did this (I just wanted to get my new build working) and planned to do more investigation next time I loaded a new kernel. I’ve not had to do that yet, but I’ll be sure to use a less heavy handed approach next time!

  2. Niel C has had problems posting a comment, so has asked me to post it here. Thanks Niel!

    You can use nm to find the cause of the multiply defined symbol – on a Ubuntu 14.04.1 LTS box it comes from /lib/modules/3.13.0-39-generic/kernel/drivers/media/dvb-frontends/stv090x.ko. Moving that one file out of the way solves the problem. I haven’t written a script, but the transcript below gives the idea. Symbols marked “T” in nm output are defined in the corresponding driver. The dpkg-query identifies which module is the stock (i.e. Ubuntu provided) driver. Since TBS effectively release their own version of the stock driver, its probably better to use their version than than the stock one – as that is what they will have tested.

    Edited transcript is:

    $ f=`find /lib/modules/3.13.0-39-generic/kernel/drivers/media -name '*ko' -print`
    $ for i in $f; do
    > echo $i
    > nm $i | grep stv090x_attach
    > done
    ...
    /lib/modules/3.13.0-39-generic/kernel/drivers/media/dvb-frontends/stv090x.ko
    00000000080670ff A __crc_stv090x_attach
    0000000000005e40 r __kcrctab_stv090x_attach
    0000000000000000 r __kstrtab_stv090x_attach
    0000000000005e20 R __ksymtab_stv090x_attach
    00000000000014f0 T stv090x_attach
    ...
    /lib/modules/3.13.0-39-generic/kernel/drivers/media/dvb/frontends/stv090x.ko
    00000000f6d73009 A __crc_stv090x_attach
    0000000000005b80 r __kcrctab_stv090x_attach
    0000000000000000 r __kstrtab_stv090x_attach
    0000000000005b60 R __ksymtab_stv090x_attach
    00000000000015c0 T stv090x_attach
    /lib/modules/3.13.0-39-generic/kernel/drivers/media/common/saa716x/saa716x_tbs-dvb.ko
    U stv090x_attach

    $ dpkg-query -S /lib/modules/3.13.0-39-generic/kernel/drivers/media/dvb-frontends/stv090x.ko
    linux-image-extra-3.13.0-39-generic: /lib/modules/3.13.0-39-generic/kernel/drivers/media/dvb-frontends/stv090x.ko

    $ dpkg-query -S /lib/modules/3.13.0-39-generic/kernel/drivers/media/dvb/frontends/stv090x.ko
    dpkg-query: no path found matching pattern /lib/modules/3.13.0-39-generic/kernel/drivers/media/dvb/frontends/stv090x.ko

Comments are closed.