This is a confusing TV card. It is (more or less) two WinTV NOVA T usb2 chipsets combined on a pci card with a VIA USB controller. All the kernel sees is the USB controller, so when you plug it in and run lspci, what you see is something like
Drivers for the Hauppauge WinTV Nova t 500 were added to the 2.6.19 kernel. To enable support for the Nova T 500, compile a 2.6.19 (or later) kernel. Run make menuconfig and enable support for these options
Notice the <M> next to `DiBcom DiB0700 USB DVB devices'. It's important to compile the dvb-usb-dib0700 driver as a module because it needs to load firmware into the TV card. If you build it into the kernel, when you reboot it will attempt to load the firmware before the kernel has mounted the root partition, udev will not be able to read the (as yet) unmounted filesystem so the attempt to load the firmware will fail. If you build the dvb-usb-dib0700 driver as module and enable `automatic module loading' the kernel will load it after the root filesystem has been mounted. Compile your kernel, don't forget to run `make modules_install' to save the dvb-usb-dib0700 module and install your new kernel (I'll leave that bit to you as it's very dependent on your distro).
For some reason udev and dvb modules don't get along (I know it's got something to do with files in /sys but the details are beyond me) so you'll need to create the necessary /dev nodes by hand. There are two ways you can go with this, on some distros, a boot script copies the contents of /lib/udev/devices into /dev during the boot process. If your distro works like this, create the nodes you need in /lib/udev/devices and you can forget about it. As root, run these commands (cpy and paste)
function create_udev_nodes() {
mkdir -p /lib/udev/devices/dvb/adapter$1
mknod /lib/udev/devices/dvb/adapter$1/frontend0 c $2 $(( $3 + 3 ))
mknod /lib/udev/devices/dvb/adapter$1/demux0 c $2 $(( $3 + 4 ))
mknod /lib/udev/devices/dvb/adapter$1/dvr0 c $2 $(( $3 + 5 ))
mknod /lib/udev/devices/dvb/adapter$1/net0 c $2 $(( $3 + 7 ))
}
create_udev_nodes 0 212 0
create_udev_nodes 1 212 64
chmod 755 /lib/udev/devices/dvb/adapter*
chmod 660 /lib/udev/devices/dvb/adapter*/*
chown root:video /lib/udev/devices/dvb/adapter*/*
If your distro doesn't work like that, you may need to create the nodes in /dev with a bootscript. I'll leave you to figure out how the bootscripts of your distro work. This script should create the nodes you need. If you run it by hand you'll need to use su to become root to have permission to write in /dev
#!/bin/bash
function create_dvb_nodes() {
mkdir -p /dev/dvb/adapter$1
mknod /dev/dvb/adapter$1/frontend0 c $2 $(( $3 + 3 ))
mknod /dev/dvb/adapter$1/demux0 c $2 $(( $3 + 4 ))
mknod /dev/dvb/adapter$1/dvr0 c $2 $(( $3 + 5 ))
mknod /dev/dvb/adapter$1/net0 c $2 $(( $3 + 7 ))
}
create_dvb_nodes 0 212 0
create_dvb_nodes 1 212 64
chmod 755 /dev/dvb/adapter*
chmod 660 /dev/dvb/adapter*/*
chown root:video /dev/dvb/adapter*/*
Download the dvb-usb-dib0700-01.fw firmware I mentioned earlier and save it in /lib/firmware (or wherever udev looks for firmware on your system). When you reboot the kernel should print some reassuring messages like this in your system log (check dmesg)
dib0700: loaded with support for 2 different device-types
dvb-usb: found a 'Hauppauge Nova-T 500 Dual DVB-T' in cold state, will try to load a firmware
dvb-usb: downloading firmware from file 'dvb-usb-dib0700-01.fw'
dib0700: firmware started successfully.
dvb-usb: found a 'Hauppauge Nova-T 500 Dual DVB-T' in warm state.
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (Hauppauge Nova-T 500 Dual DVB-T).
DVB: registering frontend 0 (DiBcom 3000MC/P)...
MT2060: successfully identified (IF1 = 1220)
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (Hauppauge Nova-T 500 Dual DVB-T).
DVB: registering frontend 1 (DiBcom 3000MC/P)...
MT2060: successfully identified (IF1 = 1220)
If you see something similar it means the kernel driver is working and you're well on the way to getting the card to work. Now you need to install some stuff into userspace so you can tune the card into your local transmitter.
Download linuxtv-dvb-apps-1.1.1.tar.bz2 and compile it
tar xf linuxtv-dvb-apps-1.1.1.tar.bz2 &&
cd linuxtv-dvb-apps-1.1.1/util &&
make &&
su
The channels that are available may change over time so it makes sense to install the things you need into /usr as you may need them again in a couple of months. Enter root's password then install scan and some files it needs with these commands
install -m 755 scan/scan /usr/bin &&
install -m 755 -d /usr/share/scan &&
cp scan/dvb-t/* /usr/share/scan &&
chmod 644 /usr/share/scan/* &&
exit
Now use scan to find out the details of the channels that are available from your local transmitter. Choose the right file from the contents of /usr/share/scan
ls /usr/share/scan
Then scan for channels like this (I'm just using Winter Hill as an example because it's my local transmitter)
scan /usr/share/scan/uk-WinterHill > ~/channels.conf
If all is well you should be seeing some familiar channel names listed in the terminal.
Dvbstream is a very useful application that allows you to stream the output of your TV card to a file. You can also use it to stream video over a local area network, but I won't be detailing how to do that. You don't need to install dvbstream to watch TV, you could just use xawtv, but if you use that you won't be able to pause the video so you'll have to sit through the adverts. If you use dvbstream you can stream the video to a file then watch it with xine or mplayer, pause it when you want to get a drink, check your email, fast forward through a dull bit or go back and pause to study an important frame. Use cvs to get the dvbstream code (just press enter when it asks for your password)
cvs -d:pserver:anonymous@dvbtools.cvs.sourceforge.net:/cvsroot/dvbtools login
cvs -z3 -d:pserver:anonymous@dvbtools.cvs.sourceforge.net:/cvsroot/dvbtools co -P dvbstream &&
cd dvbstream &&
make &&
su
Enter root's password and then install dvbstream in /usr/bin
install -m 755 dvbstream /usr/bin &&
exit
You can get all the details you need to run dvbstream from the channels.conf file you made earlier. Extract the info you want with awk and sed. This is all one command, so copy and paste it as one block
awk -F : '{ gsub(/ /,"-"); gsub(/FEC_/,"-cr "); gsub(/QAM_/,"-qam ");\
print "dvbstream -f",$2,$5,$7,"-ps",$11,$12,"-o >","\""$1"-chip1-\
$(date +%a-%k-%M).mpeg\"" }' ~/channels.conf | sed '/-ps 0/d' > ~/chip-one.txt
The contents of ~/chip-one.txt should be lines like this
dvbstream -f 834166670 -cr 2_3 -qam 64 -ps 590 591 -o > "More-4-chip1-$(date +%a-%k-%M).mpeg"
If you copy and paste a line from dvbstream.txt into a terminal it should stream your chosen channel to a file until you stop it with ctrl-c. To record from the second chip on the card, pass the option -c 1 to dvbstream like this
dvbstream -c 1 -f 754166670 -cr 3_4 -qam 16 -ps 600 601 -o > "BBC-ONE-chip2-$(date +%a-%k-%M).mpeg"
Create a file of commands to record the output of the second chip with these commands
awk -F : '{ gsub(/ /,"-"); gsub(/FEC_/,"-cr "); gsub(/QAM_/,"-qam ");\
print "dvbstream -c 1 -f",$2,$5,$7,"-ps",$11,$12,"-o >","\""$1"-chip2-\
$(date +%a-%k-%M).mpeg\"" }' ~/channels.conf | sed '/-ps 0/d' > ~/chip-two.txt
If you don't like all that messing about with commands and just want a relatively straightforward application that allows you to watch TV, install xawtv. Xawtv depends on libmpeg2 so install that first. Download mpeg2dec-0.4.1.tar.gz and install it
tar xf mpeg2dec-0.4.1.tar.gz &&
cd mpeg2dec-0.4.1 &&
./configure --prefix=/usr --enable-shared &&
make &&
su
Enter roots password and then
make install &&
exit
Now do the same for Xawtv. Download xawtv-20061123-095905.tar.gz and install it
tar xf xawtv-20061123-095905.tar.gz &&
cd xawtv &&
./autogen.sh &&
./configure --prefix=/usr &&
make &&
su
Enter roots password and then
make install &&
install -m 644 contrib/xawtv48x48.xpm /usr/share/pixmaps/xawtv.xpm &&
cat > /usr/share/applications/xawtv.desktop << "EOF"
[Desktop Entry]
Encoding=UTF-8
Name=Xawtv
Comment=Watch TV
Exec=xawtv
Type=Application
Icon=xawtv.xpm
Terminal=false
Categories=Application;Multimedia;AudioVideo;Video;
EOF
exit
When you first run xawtv it will not have any channels set so right click on it to open the control window, on that window, click Edit > Scan DVB ... to open the DVB channels window and on that window, click tune to open yet another window, the Tune DVB frontend window. Enter a frequency (one of the nine digit numbers in the second field, just after the channel name) from the channels.conf file you made earlier into the frequency box at the top, click Apply, OK and it should then start to scan the tv channels automagically.
When it's done scanning, go back to the control window and click Edit > Add station ... and add some of the stations you want to watch. Make sure you save them before you shutdown by clicking Edit > Save stations
Any questions or comments about this? Email me