Welcome

How to install the DVB-USB Linux Drivers from LinuxTV HG (v4l-dvb)

This is a small HOWTO for using the DVB-USB devices with recent v4l-dvb from HG (note: not all current dvb usb devices are covered here, but the procedure for other drivers is similar).

At first you have to make sure your system runs a recent kernel (for v4l-dvb at least 2.6.12 is necessary). Activate module support and include i2c bitbanging, firmware loader and usb in your kernel. You don't need to and you should not activate DVB in the kernel, because everything you need is in v4l-dvb. If you never build your own kernel, you don't need to. Most recent distribution (Debian Sarge, SuSE 9.2 for what I know) have current kernels. Check with uname -a which kernel version you are running. Again, kernel version has to be equal to or higher as 2.6.12.

Some of you may have to install hg in order to checkout the latest source code.

After making sure your kernel is recent and the necessary software is installed, you can start with checking out the latest v4l-dvb source code:

~/devel$ hg clone http://linuxtv.org/hg/v4l-dvb

(If you are not able to do HG remove actions, linuxtv-HG has a download option. Follow the procedure at http://www.linuxtv.org/repo/

After that some lines appear describing the successful download. When this was successful you have an directory in the where you ran hg clone called 'v4l-dvb'. You now want to enter the v4l directory in the v4l-dvb path in order to do the driver-compiling. Just enter make to start the compilation. (it is now possible to customize the modules even in the hg checkout. Just run your favorite make *config to do that - by default all modules are selected for compilation)

~/devel$ cd v4l-dvb/v4l
~/devel/v4l-dvb/v4l$ make
 [...]
make -C /lib/modules/2.6.10/build  SUBDIRS=/home/pmp/devel/v4l-dvb/v4l AV7110_FIRMWARE= AV7110_OSD=y
make[1]: Entering directory `/usr/src/linux-2.6'
  CC [M] .....

When all this compiling was successful (i.e. no error occured) you are basicly ready to load the driver. Up to now this HOWTO is device-independent.
Next step for dvb-usb is to put the firmware files into place. Most distributions have their firmware loading path in /usr/lib/hotplug/firmware . Check README.dvb-usb or have a look at the firmware part of my website or have a look at the LinuxTV DVB USB Wiki page to find out which firmware you need for your device, if in doubt just copy all dvb-usb-firmware files to the firmware path. This copying has to be done as root.

When you migrated your system from kernel 2.4 to 2.6 make sure you have the appropriate modutils to load the modules. Furthermore it is necessary to mount the /sys-directory (sysfs). Please check if you have the /sys-directory...

When this is done the drivers can be loaded. Change back to the v4l directory, still as root. Depending on the driver you want to load you have to load some additional frontend-drivers as well.
I'm doing it like this (you probably don't need to load all of the dvb-usb-*-drivers), again have a look at the LinuxTV DVB USB Wiki page to get a list of which device needs which drivers:

~/devel/v4l-dvb/v4l# modprobe i2c-core
~/devel/v4l-dvb/v4l# modprobe firmware_class
~/devel/v4l-dvb/v4l# insmod ./dvb-core.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-pll.ko
~/devel/v4l-dvb/v4l# insmod ./dib3000mb.ko
~/devel/v4l-dvb/v4l# insmod ./dibx000_common.ko
~/devel/v4l-dvb/v4l# insmod ./dib3000mc.ko
~/devel/v4l-dvb/v4l# insmod ./mt2060.ko
~/devel/v4l-dvb/v4l# insmod ./mt352.ko
~/devel/v4l-dvb/v4l# insmod ./nxt6000.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-usb.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-usb-vp7045.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-usb-dtt200u.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-usb-dibusb-common.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-usb-dibusb-mb.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-usb-dibusb-mc.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-usb-digitv.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-usb-a800.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-usb-nova-t-usb2.ko
~/devel/v4l-dvb/v4l# insmod ./dvb-usb-umt-010.ko

In case your kernel has compiled in the firmware-loader and/or the i2c-core, one or all modprobe calls may fail, just ignore it in that case. When something is missing for the dvb-driver, they won't load and leave an error message like this:

insmod: error inserting 'dib3000-common.ko': -1 Unknown symbol in module

Then please check syslog by running dmesg to find out which symbol was not found. Did everything succeeded, no message will appear on the console but in syslog.

Now it's time to connect the device to the usb bus (of course the device may already have been connected to USB when loading the driver, but for this HOWTO I did it step-by-step). If everything is ok, the power led of the box should be turned on (i.e. the firmware is loaded successfully).
Syslog should say something like this:

Dec 29 14:01:05 localhost kernel: usb 4-3: new high speed USB device using ehci_hcd and address 14
Dec 29 14:01:05 localhost kernel: /home/pmp/devel/dvb-kernel/build-2.6/dvb-dibusb-core.c: found a 'DiBcom USB2.0 DVB-T reference design
(MOD3000P)' in cold state, will try to load a firmware
Dec 29 14:01:06 localhost kernel: /home/pmp/devel/dvb-kernel/build-2.6/dvb-dibusb-firmware.c: using firmware file (dvb-dibusb-6.0.0.5.fw
).
Dec 29 14:01:06 localhost kernel: /home/pmp/devel/dvb-kernel/build-2.6/dvb-dibusb-core.c: DiBcom USB2.0 DVB-T reference design (MOD3000P
) successfully initialized and connected.
Dec 29 14:01:06 localhost kernel: usb 4-3: USB disconnect, address 14
Dec 29 14:01:06 localhost kernel: /home/pmp/devel/dvb-kernel/build-2.6/dvb-dibusb-core.c: Driver for DiBcom based USB Budget DVB-T devic
e successfully deinitialized and disconnected.
Dec 29 14:01:08 localhost kernel: usb 4-3: new high speed USB device using ehci_hcd and address 15
Dec 29 14:01:08 localhost kernel: usb 4-3: Product: MOD3000
Dec 29 14:01:08 localhost kernel: usb 4-3: Manufacturer: STAE
Dec 29 14:01:08 localhost kernel: /home/pmp/devel/dvb-kernel/build-2.6/dvb-dibusb-core.c: found a 'DiBcom USB2.0 DVB-T reference design
(MOD3000P)' in warm state.
Dec 29 14:01:08 localhost kernel: /home/pmp/devel/dvb-kernel/build-2.6/dvb-dibusb-core.c: running at HIGH speed, will use pid_parsing an
yway.
Dec 29 14:01:08 localhost kernel: DVB: registering new adapter (Driver for DiBcom based USB Budget DVB-T device).
Dec 29 14:01:08 localhost kernel: /home/pmp/devel/dvb-kernel/build-2.6/dib3000mc.c: Found a DiBcom 3000-P.
Dec 29 14:01:08 localhost kernel: initializing 32 pids for the pid_list.
Dec 29 14:01:08 localhost kernel: initializing the demod the first time. Setting demod addr to 0x14
Dec 29 14:01:08 localhost kernel: /home/pmp/devel/dvb-kernel/build-2.6/dvb-dibusb-fe-i2c.c: found demodulator at i2c address 0x18
Dec 29 14:01:08 localhost kernel: DVB: registering frontend 0 (DiBcom 3000-MC/P DVB-T)...
Dec 29 14:01:08 localhost kernel: /home/pmp/devel/dvb-kernel/build-2.6/dvb-dibusb-remote.c: schedule remote query interval to 100000 mse
cs.
Dec 29 14:01:08 localhost kernel: /home/pmp/devel/dvb-kernel/build-2.6/dvb-dibusb-core.c: DiBcom USB2.0 DVB-T reference design (MOD3000P
) successfully initialized and connected.

If your syslog says something like this, you can start using dvb-applications. Please check if the /dev-nodes have been create either from your distribution or with udev. And ls -l /dev/dvb/adapter0/dvr0 should look like this;

crw-rw----  1 root video 212, 5 2004-12-29 09:21 /dev/dvb/adapter0/dvr0

If there is an 250 instead of the 212, then you have to run MAKEDEV-DVB.sh from wihtin the v4l-dvb-path.

If the line is shown as above, you can start doing dvb stuff. As an example we try to scan for channels. To have recent initial tuning data, you should use the dvb-apps module from LinuxTV HG. Therefore go to the parent directory of v4l-dvb (don't need to be the parent dir, just not being in v4l-dvb is sufficient) and do the following:

~/devel$ hg clone http://linuxtv.org/hg/dvb-apps

Again compiling the stuff after entering the newly created directory:

~/devel$ cd dvb-apps
~/devel/dvb-apps$ make

When compiling succeeded, enter the scan-application directory and initiate a scan:

~/devel/dvb-apps$ cd util/scan/
~/devel/dvb-apps/util/scan$ ./dvbscan dvb-t/de-Berlin
scanning dvb-t/de-Berlin
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
initial transponder 522000000 0 2 9 1 1 2 0
initial transponder 570000000 0 2 9 1 1 2 0
initial transponder 658000000 0 2 9 1 1 2 0
>>> tune to: 522000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_AUTO:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE
Network Name 'DVB-T Berlin/Brandenburg'
0x0000 0x000b: pmt_pid 0x0000 ARD -- rbb Brandenburg (running)
0x0000 0x000c: pmt_pid 0x0000 ARD -- rbb Berlin (running)
0x0000 0x0010: pmt_pid 0x0000 ARD -- ARD-MHP-Data (running)
0x0000 0x000e: pmt_pid 0x0000 ARD -- Das Erste (running)
0x0000 0x000d: pmt_pid 0x0000 ARD -- Phoenix (running)
[..]

Instead of dvb-t/de-Berlin you should use the initial tuning data from your region (have a look in dvb-t/ or use google find out the values). The successful scanning shows that the driver and your system is working well, now you can use more complex dvb-applications (like vdr and such).

If you find any error in this document, don't hesitate to contact me. I'll appreciate any comment. For problems with the driver please ask on the linux-dvb mailing list (linux-dvb@linuxtv.org).


last updated: 2006-08-09