Jump to: navigation, search

This page will undergo a transition to move all the legacy driver instructions to new page. For more info see the new legacy page.



This is a (hopefully) distribution neutral guide for compiling and running ivtv from source, using the latest driver. Although this guide should work in general, if you like, you can choose to work with one of our distribution-specific HOWTOs:

Basic Requirements

  • Supported hardware
  • GCC. A similar version to the one used to compile the kernel is recommended (and mostly neccessary).
  • Kernel headers or source
  • Anything else here?

Kernel configuration

This sections is split in 2 sections as ivtv was merged in mainling kernel in version 2.6.22. Because of this kernel confirguration got a whole lot simpler. The ivtv-fb module for the pvr-350 has not been merged into mainline yet. And will have to be compiled from source.

It is recommended to compile all as modules. Ivtv will not be able to load the firmware (yet) if it is build in!!

For kernel >=2.6.22

  • Loadable module support -> Automatic kernel module loading (CONFIG_KMOD)
  • Device Drivers -> Multimedia Devices -> Video For Linux (CONFIG_VIDEO_DEV)
  • Device Drivers -> I2C support (CONFIG_I2C)
  • Device Drivers -> Multimedia Devices -> Enable Video For Linux API 1 (DEPRECATED) (CONFIG_VIDEO_V4L1)
  • Conexant cx23416/cx23415 MPEG encoder/decoder support (CONFIG_VIDEO_IVTV)

For kernel <=2.6.21

As of kernel 2.6.16 with ivtv-0.6 and up the ivtv specific modules are being merged into mainline kernel. This process ended with kernel version 2.6.18 and only ivtv and ivtv-fb remain. Recommended is to use kernel version <=2.6.15 with ivtv 0.4.x or kernel versions >= 2.6.18 with ivtv >= 0.10.x. Please check the README file for specific kernel version information.

Most stock kernels have these enabled by default, this section is only relevant if you build your own kernel.

Enable the following general options valid for all ivtv cards
  • Loadable module support -> Automatic kernel module loading (CONFIG_KMOD)
  • Device Drivers -> Multimedia Devices -> Video For Linux (CONFIG_VIDEO_DEV)
  • Device Drivers -> I2C support (CONFIG_I2C)
  • Device Drivers -> Multimedia Devices -> Enable Video For Linux API 1 compatible Layer (CONFIG_VIDEO_V4L1_COMPAT)
    • NOTE: For kernel 2.6.19, the option CONFIG_VIDEO_BT848 (along with many other V4L1-only drivers and options) is unavailable when CONFIG_VIDEO_V4L1_COMPAT is selected. You must select CONFIG_VIDEO_V4L1 (Enable Video For Linux API 1 (DEPRECATED)) instead.
Under Device Drivers -> Multimedia Devices -> Video Capture Adapters Encoders and Decoders

The PVR-150/PVR500 needs the following modules

  • Conexant CX2584x audio/video decoders (CONFIG_VIDEO_CX25840)
  • Conexant CX2341x MPEG encoders (CONFIG_VIDEO_CX2341X)
  • Wolfson Microelectronics WM8775 (CONFIG_VIDEO_WM8775)
  • BT848 Video For Linux (CONFIG_VIDEO_BT848)

PVR-350/250 need the following options:

  • Conexant CX2341x MPEG encoders (CONFIG_VIDEO_CX2341X)
  • Philips SAA7113/4/5 video decoders (CONFIG_VIDEO_SAA711X)
  • Philips SAA7127/9 digital video encoders (CONFIG_VIDEO_SAA7127)
  • Micronas MSP34xx audio decoders (CONFIG_VIDEO_MSP3400)
  • BT848 Video For Linux (CONFIG_VIDEO_BT848)

The AOpen VA2000 needs the following options

  • Conexant CX2341x MPEG encoders (CONFIG_VIDEO_CX2341X)
  • Philips SAA7113/4/5 video decoders (CONFIG_VIDEO_SAA711X)
  • NEC Electronics uPD64083 3-Dimensional Y/C separation (CONFIG_VIDEO_UPD64083)
  • BT848 Video For Linux (CONFIG_VIDEO_BT848)

Download and install

IVTV is part of kernel 2.6.22 so you will only have to download the userspace tools. No instalation of modules is needed except for ivtv-fb and saa717x if you need them.

The first step is to Download the latest stable release of the driver.
0.4.X for kernels <=2.6.15 See also Choosing the correct modules
0.6.X for kernel = 2.6.16
0.7.X for kernel = 2.6.17
0.10.X for kernel > =2.6.18 and <= 2.6.21
1.0.x for kernel >= 2.6.22

Once you have done that, then unpack and compile:

tar -zxf ivtv-0.10.0.tar.gz
cd ivtv-0.10.0/
su -c "make install" or sudo make install

This will build and install the kernel modules and also the ivtv utilities.

Choose the Correct Kernel modules

For kernels <= 2.6.15 When you run a 'make install', you may have noticed that there are warning messages about moving some modules.There are duplicate modules for tveeprom, tda9887, tuner and msp3400. One set is provided with the kernel (originating from from the v4l project, and merged with the dvb project), and the other is from ivtv itself. Please see below how to install the modules and which one will have to be used.

The v4l and dvb projects have already merged and the dvb module is included in the kernel tree. There is ongoing work to merge the conflicting dvb and ivtv versions. This was completed with kernel version >=2.6.16.

How do you know which tveeprom module to choose to use? As of January 2006, this is still an experiment in progress as the kernel dvb module is still new.

The ivtv tveeprom module only works with ivtv type hardware. The ivtv tveeprom module does not work with dvb cards. The kernel dvb version tveeprom module however can substitute for the ivtv tveeprom module in most cases.

If you are installing only a PVR card, use the ivtv tveeprom-ivtv and the other ivtv modules. If you are installing a dvb card together with a PVR card, try using the kernel tveeprom instead of the ivtv tveeprom-ivtv module. Numerous users have reported this combination enables the use of PVR cards and dvb cards together. Known combinations include Hauppauge PVR350 and 500 with the pcHD3000. Continue to use the other ivtv modules, using their extended name forms tda9887-vtv.ko etc. If your ivtv based card does not work with the kernel tveeprom module, you will be limiteed to using only one card at a time.


Rename the kernel modules.

cd /lib/modules/`uname -r`/kernel/drivers/media/video/
mv msp3400.ko msp3400.ko.old 
mv tveeprom.ko tveeprom.ko.old
mv tuner.ko tuner.ko.old
mv tda9887.ko tda9887.ko.old

Some distributions put the modules in strange places, so you might want to look for them with

find /lib/modules/`uname -r`/kernel/ -name tuner.ko

and rename the kernel versions as above. Do the same for tda9887, tveeprom and msp3400.

Next step is to copy the ivtv modules in your module tree:

cd <whereever/the/source/is>/ivtv-0.4.0/driver
cp *.ko /lib/modules/`uname -r`/kernel/drivers/media/video/

Mandriva linux distribution has gzip'ed modules in /lib/modules. So instead of the above commands do:

cd /lib/modules/`uname -r`/kernel/drivers/media/video/
mv msp3400.ko.gz msp3400.ko.gz.old 
mv tveeprom.ko.gz tveeprom.ko.gz.old
mv tuner.ko.gz tuner.ko.gz.old
mv tda9887.ko.gz tda9887.ko.gz.old
cd <whereever/the/source/is>/ivtv-0.4.0/driver
gzip *.ko
cp *.gz /lib/modules/`uname -r`/kernel/drivers/media/video/


This choice is much simpler to enable. We just want to make the kernel look for the dvb version module, instead of the ivtv version module when it looks for 'tveeprom.ko'. After installing the ivtv software and editing your /etc/modprobe.conf for your particular hardware (see below), you will need to make one more change: Your modprobe.conf file may or may not have a line: "alias tveeprom tveeprom-ivtv"

If it does, comment that line out, so it reads: "#alias tveeprom tveeprom-ivtv" If it has lines such as 'alias tda9887 tda9887-ivtv', leave those lines alone.

If your distribution uses an 'install cx88_dvb' line in modprobe.conf, it should probably come before the ivtv section. For Fedora 4 with 2.6.12+ kernels, the kernel loads modules in the order listed in the modules.pcimap file and the first listed module in each group will be loaded by default. If you intend to receive ATSC broadcasts, them the cx88_dvb module should be listed first. No entry is then needed in modprobe.conf.


Once that has been done you need to update module dependencies

depmod -a

Module options

Previous versions of the driver have needed module options in modules.conf, but the current versions should auto-detect all settings for everyone. If this fails for some reason please e-mail ivtv-devel with the ivtv init kernel message, see Asking for help.

People who don't have udev or devfs may need to modify modules.conf. How do you know if you have devfs or udev?

/dev/.devfsd exists
< 1000 files in /dev
> 1000 files in /dev (created at installation by MAKEDEV)

Add the following lines to /etc/modules.conf if you don't have devfs or udev. Sometimes the file /etc/modules.conf is created at boot time from files in /etc/modutils/, read carefully the file /etc/modules.conf for instructions:

alias char-major-81 videodev
alias char-major-81-0 ivtv

This tells the kernel where to find the first card, if you have more than one card (or a PVR500, which looks like two cards), you will need to add an extra line for each card.

alias char-major-81-x ivtv

For every card you have add a new line, incrementing x by 1 .

Howto use udev rules!

Determining your udev version

Boot up your system, and run udevinfo --version to find out the version of udev you are using. The key names used in udev rules changed at udev-098; see the appropriate subsection here for instructions depending on which version of udev you run. Using the older key names still works as of udev-103, although it logs warnings. However, the old key names are deprecated, and support for them will eventually be removed. Logged warnings are also bad.

For all udev versions, begin by finding out where the card currently is in the /dev/videoN numbers. Run udevinfo -a -p /class/video4linux/videoN and it will give you a spew of information. All versions of udevinfo should give the correct key names in their output for the version of udev that they came with.

udev versions before 098

You're looking for the ID parameter (if you're clever you can just use lspci to get this). Write your udev rule as follows

DRIVER=="ivtv", SYSFS{name}=="ivtv? encoder MPEG", ID=="id", SYMLINK+="name" 


DRIVER=="ivtv", SYSFS{name}=="ivtv? encoder MPEG", ID=="0000:02:08.0", SYMLINK+="pvr_500_1"

This creates /dev/pvr_500_1 for the first head of my PVR-500 (i also have pvr_500_2) To symlink other parts of the same device like the audio line (/dev/video24) you change the SYSFS name appropriately such as follows

DRIVER=="ivtv", SYSFS{name}=="ivtv? encoder PCM audio", ID=="0000:02:08.0", SYMLINK+="pvr_500_1_audio"

udev version 098 and later

These versions of udev use KERNEL or KERNELS instead of ID, DRIVERS instead of DRIVER, and ATTR or ATTRS instead of SYSFS. Using the plural version of the key names tells udev to walk up the device path (that is, the same path that udevinfo follows) when doing its search for a matching value; using the singular form only searches in the current sysfs directory. Note: in the future, DRIVER may be redefined to be the singular form of DRIVERS, so that DRIVER/DRIVERS work like all the other keys. But for now, DRIVER should not be used.

Write your udev rule as follows:

DRIVERS=="ivtv", ATTR{name}=="ivtv? encoder MPEG", KERNELS=="id", SYMLINK+="name"


DRIVERS=="ivtv", ATTR{name}=="ivtv? encoder MPEG", KERNELS=="0000:02:08.0", SYMLINK+="pvr_500_1"

This creates /dev/pvr_500_1 for the first head of a PVR-500 (you can also create pvr_500_2). To symlink other parts of the same device like the audio line (/dev/video24), change the ATTR{name} key:

DRIVERS=="ivtv", ATTR{name}=="ivtv? encoder PCM audio", KERNELS=="0000:02:08.0", SYMLINK+="pvr_500_1_audio"

PS: This can work for non-ivtv cards as well (under both udev versions) if you use the appropriate DRIVER or DRIVERS value.


There is a tar archive with all the required firmware files available from If you need an older version or want to extract it from the windows driver see firmware. We recommend using the tar archive!

Load the modules

If you have an older version of ivtv loaded, you need to remove the modules before you can load the new modules. You also have to stop the application that's using the tuner cards before you can remove the modules.

/sbin/rmmod ivtv cx25840 tuner tveeprom msp3400 wm8775 tda9887 saa7115 saa7127

Once this is done, you should be able to load the module with

/sbin/modprobe ivtv

Test the card

You can use ivtv-tune to tune the tuner to a channel, or ivtvctl to switch inputs. To test the card, it should be a matter of

cat /dev/video0 > test.mpg

which will produce an MPEG2 file that you can play with mplayer.

If you have a PVR-350, which has a tv-out, test it with.

dd if=/dev/video of=/dev/video16 bs=64k

If you have any problems, see troubleshooting


What client software is supported besides MythTV?
infirit 14:56, 16 December 2006 (CET) Anything that can read mpeg files can open the device directly. If you want to do more fancy stuff it will have to support the encoder api.

At the moment the only software that is capable of using the new encoder api is mplayer 1.0 rc1 and mythtv 0.20.

What about VLC? pvr: access module.

Personal tools