Kworld UB499-2T
Vendor Device/Model |
Supported | ID on Interface |
Hardware | Firmware | Comment / Pictures | URL | E |
---|---|---|---|---|---|---|---|
KWorld UB499-2T | See Device page. IT9135 ✔ Yes from Kernel 3.2 | 048d:9135 USB2.0 | ITE IT9135 | dvb-usb-it9135-01.fw | |||
KWorld UB499-2T T09 | ✔ Yes, in kernel since 3.2 | 1b80:e409 USB2.0 | IT9137 | dvb-usb-it9137-01.fw |
V4L Version
The KWorld UB499-2T series are dual DVB-T tuners USB 2.0 device. It contains the Afatech/ITE IT9135 or IT9137 hardware. It is supported directly by V4L through the following modules.
dvb-usb-it913x
it913x-fe
Firmware Instructions
Locate file get_dvb_firmware in Documentation/dvb of Kernel 3.2 and above.
Run the perl script.
./get_dvb_firmware it9135
Manual extraction of firmware from Driver_V10.323.1.0412.100412.zip
in path
Driver_V10.323.1.0412.100412/Data/x86/
extract IT9135BDA.sys Dated Mon 22 Mar 2010 10:20
dd if=IT9135BDA.sys ibs=1 skip=69632 count=5731 of=dvb-usb-it9137-01.fw
This will produce the dvb-usb-it9137-01.fw file, copy this to your default firmware location. Usually /lib/firmware.
Installation Instructions
Kernels 2.6.31 to 3.1 and updates
Go to the How to Obtain, Build and Install V4L-DVB Device Drivers page and download and build the lastest media_build.
Changes in 3.3 for IT9135 Devices only ITE IT9135
Other Issues
IT9135 Dual Partial/Not confirmed
Dual IT9135(id 048d:9135) devices are not confirmed as working with this driver. Single Devices with this id are working.
Remote Control
Only the 32 button remote control supplied with UB499 2T T09 works.
Limitation
Does not pass the full MPEG2 transport stream to the software demuxer: has a hardware PID filter with a table count of 31. MythTV backend log shows error messages (failed to open demux device) about once a second while recording from BBC ONE. The recordings play OK and Project-X reports only a small proportion of packets out of order. Can make simultaneous recordings on two different muxes.
PID Filter can be turned off with module option
dvb-usb-it913x pid=1
Observations made using Scientific Linux 6 i686 and modules from the media_build script.
dmesg extract to identify version:
it913x: Chip Version=01 Chip Type=9135 it913x: Dual mode=3 Remote=5 Tuner Type=38 IR JVC protocol handler initialized IR Sony protocol handler initialized IR SANYO protocol handler initialized IR MCE Keyboard/mouse protocol handler initialized lirc_dev: IR Remote Control driver registered, major 248 IR LIRC bridge handler initialized it913x: Chip Version=01 Chip Type=9135 dvb-usb: found a 'Kworld UB499-2T T09(IT9137)' in cold state, will try to load a firmware usb 1-4: firmware: requesting dvb-usb-it9137-01.fw dvb-usb: downloading firmware from file 'dvb-usb-it9137-01.fw' it913x: FRM Starting Firmware Download it913x: FRM Firmware Download Completed - Resetting Device it913x: Chip Version=01 Chip Type=9135 it913x: Firmware Version 204147968 dvb-usb: found a 'Kworld UB499-2T T09(IT9137)' in warm state. dvb-usb: will use the device's hardware PID filter (table count: 31). DVB: registering new adapter (Kworld UB499-2T T09(IT9137)) DVB: registering adapter 0 frontend 0 (Kworld UB499-2T T09(IT9137)_1)... dvb-usb: will use the device's hardware PID filter (table count: 31). DVB: registering new adapter (Kworld UB499-2T T09(IT9137)) DVB: registering adapter 1 frontend 0 (Kworld UB499-2T T09(IT9137)_2)... Registered IR keymap rc-kworld-315u input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:1d.7/usb1/1-4/rc/rc0/input8 rc0: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:1d.7/usb1/1-4/rc/rc0 dvb-usb: schedule remote query interval to 250 msecs. dvb-usb: Kworld UB499-2T T09(IT9137) successfully initialized and connected. it913x: DEV registering device driver usbcore: registered new interface driver it913x
Non V4L Version
The KWorld UB499-2T is a USB dual tuner. It contains the Afatech/ITE IT9135 hardware. It is not supported directly by V4L, however, a driver is available along with instructions for installation from http://wasietsmet.nl/linux/zolid-usb-dvb-t-tuner-van-de-aldi-linux-drivers/. This page is in Dutch, however English installation instructions for Ubuntu are provided below.
I have tested the driver on Mythbuntu 10.04 with kerner version 2.6.32. The dual tunar appears to function perfectly, however, I have not made any attept to get the included IR receiver and remote working.
The IT9137 version (packaged as KWorld UB499-2T) tested and both tuners working with the 9135 driver above with Mythtv 0.23 on Ubuntu 10.04 kernel 2.6.32-24-generic.
Installation Instructions
These instructions have been written after my work colleague Axel pointed me to the Dutch page http://wasietsmet.nl/linux/zolid-usb-dvb-t-tuner-van-de-aldi-linux-drivers/ which contains a link to the drivers and installation instructions in Dutch. Although it is relatively easy to translate the page using an online translator I thought it sensible to add a section here in the v4l wiki in English for completeness.
Again thanks to those mentioned above.
If you don't allready have them install linux headers for your kernel and gcc
sudo apt-get install linux-headers-$(uname -r) gcc
Create a folder for the source code (for example in your Documents folder) and cd into it.
mkdir IT9135_SRC_i686_patch cd IT9135_SRC_i686_patch
Download the driver source code from http://wasietsmet.nl/wp-content/uploads/2010/07/IT9135_SRC_i686_patch.tar.gz to your new folder either using your browser or using
wget http://wasietsmet.nl/wp-content/uploads/2010/07/IT9135_SRC_i686_patch.tar.gz
Unpack the sourcecode and run the install script. Follow the onscreen instructions entering option 1 to install the module
tar xvzf IT9135_SRC_i686_patch.tar.gz ./installer.sh
Load the module
sudo modprobe dvb-usb-it9135
Test the tuner is working by scanning for channels. First find the correct file for your transmitter then scan. The example below lists all files for uk transmitters then uses uk-EmleyMoor. Modify the ls command to list all transmitters or those in your country and replace uk-EmleyMoor with the file for the transmitter you use. If the scan succeeds you have successfully installed the tuner.
ls /usr/share/dvb/dvb-t | grep uk- scan /usr/share/dvb/dvb-t/uk-EmleyMoor
Ensure that the module is loaded on reboot by adding it to your /etc/modules file using your favourite text editor, eg to use nano
sudo nano /etc/modules
then add the line
dvb-usb-it9135
to the file.
Supporting Newer Kernels
The driver linked above only supports kernels up to 2.6.33. For newer kernels please follow the instructions below.
Updating for the 2.6.34 & 2.6.35 kernels
just use the new driver that was recently posted on the same dutch forum (http://wasietsmet.nl/linux/zolid-usb-dvb-t-tuner-van-de-aldi-linux-drivers/)
http://wasietsmet.nl/wp-content/uploads/2010/07/V10.12.30.1.zip
just read the read me in the file and follow it's instructions.
Note: I could not make this driver (10.12.30.1) or the old one (10.04.19.1) work in Fedora 14. Fedora 14 uses kernel 2.6.35. I had to upgrade the kernel to 2.6.37 and it worked following the procedures described below for kernel 2.6.37, but I had to use version 10.12.30.1, the earlier version (10.04.19.1) didn't work for me on kernel 2.6.37.
Updating for the 2.6.36, 2.6.37, 2.6.38 and 2.6.29 kernels
I have created two 10.12.30.1 versions (i686 and x64) that work up to kernel 2.6.39 following the procedure below.
You can download them here:
http://www.omcentre.com.au/fileadmin/user_upload/kworld_UB499-2T/IT9135-10.12.30.1_i686.tar.bz2
http://www.omcentre.com.au/fileadmin/user_upload/kworld_UB499-2T/IT9135-10.12.30.1_x64.tar.bz2
To install the i686 as root:
wget http://www.omcentre.com.au/fileadmin/user_upload/kworld_UB499-2T/IT9135-10.12.30.1_i686.tar.bz2 tar xvfj IT9135-10.12.30.1_i686.tar.bz2 cd IT9135_SRC make make install
To install the x64 one follow the same procedure replacing i686 with x64.
The 2.6.36 kernel introduced a big change towards removing the Big Kernel Lock, which was finally removed in 2.6.37. As a result the module mentioned above wouldn't build.
At the bottom of the Cellie's post there is a link to an updated source package that is supposed to work with the 2.6.36 kernel, however I wasn't able to make this work. The Release Notes indicate an updated firmware in that package, but a cmp between the firmware in the initially posted v10.04.19.1 and the updated v10.12.30.1 for x86 & amd64 appear to be identical. The notes also indicate better support for PIP so I'd like to get this going at some point.
I'm no C programmer, and much less a kernel hacker, but I found enough info to be able to patch the v10.04.19.1 module to build and fully function on these kernels. The following patch includes the necessary ioctl change for kernels >= 2.6.36, along with the other changes for kernels > 2.6.33.
To use the patch
- Enter the unpacked source folder for the IT9135_SRC_i686_patch.tar.gz package
- Save the following patch to patch_file
- Use "patch -p0 < patch_file" to apply the changes to the source
- Run the helper script below to populate the necessary sources from the kernel tree
- Use the installer as instructed in the source to build & install the module
--- IT9135_SRC/Makefile 2011-02-05 23:26:01.000000000 +0000 +++ IT9135_SRC.orig/Makefile 2010-04-19 01:11:40.000000000 +0100 @@ -106,6 +106,9 @@ ifneq (,$(findstring 2.6.33,$(CURRENT))) @cp -f v4l/kernel-2.6.33/* ./ endif +ifneq (,$(findstring 2.6.36,$(CURRENT))) + @cp -f v4l/kernel-2.6.36/* ./ +endif @(cp DemodAPI/*.* ./; cp src/*.* ./) #make -C $(KSRC) SUBDIRS=$(PWD) modules --- IT9135_SRC/src/it9135-core.c 2011-02-05 23:26:23.000000000 +0000 +++ IT9135_SRC.orig/src/it9135-core.c 2010-04-19 01:11:40.000000000 +0100 @@ -63,7 +63,7 @@ .owner = THIS_MODULE, .open = it9135_usb_open, .release = it9135_usb_release, - .ioctl = it9135_usb_ioctl, + .unlocked_ioctl = it9135_usb_ioctl, }; /* --- IT9135_SRC/src/usb2impl.c 2011-02-05 23:26:32.000000000 +0000 +++ IT9135_SRC.orig/src/usb2impl.c 2010-04-19 01:11:40.000000000 +0100 @@ -1,6 +1,6 @@ /*#define __USB2IMPL_C__ for Linux */ // all for Linux -#include <linux/autoconf.h> +#include <generated/autoconf.h> #include <linux/kernel.h> #include <linux/errno.h> #include <linux/init.h>
The following script will create the necessary headers folder in the unpacked source so you can compile the module. This script assumes you have the kernel sources unpacked to /usr/src/linux
#!/bin/bash KERNEL_VERSION=$(uname -r | cut -d. -f1-3) if [ -d "IT9135_SRC/v4l/kernel-${KERNEL_VERSION}" ]; then echo "Looks like this kernel has already been configured. Exiting." exit 1 else mkdir IT9135_SRC/v4l/kernel-${KERNEL_VERSION} fi REQD="dvb_frontend.h dmxdev.h dvb_ringbuffer.h dvb_demux.h dvb-pll.h dvb-usb.h dvb_net.h dvbdev.h demux.h dvb-usb-ids.h" for x in $REQD; do echo -n "Processing $x: " find /usr/src/linux/drivers/media/dvb/ -name "$x" -print0 -exec cp "{}" IT9135_SRC/v4l/kernel-${KERNEL_VERSION} \; echo done
Updating for the 2.6.38 and Beyond
Ugh, this is pain, but will probably need to be done each time there is a new kernel version.
- Download V10.12.30.1.zip and extract it
- Run the installer based on your system (i686 or x64)
- When it's asking you to install / remove the driver fire up another terminal, and copy folder /tmp/ite-install somewhere (I copy it to my home folder)
- quit the installer (it won't work any way)
- go to ite-install/installer/IT9135_SRC/
- You'll have to manually patch Makefile to add support for your new kernel (replace xx with your installed kernel version)
ifneq (,$(findstring 2.6.xx,$(CURRENT))) @cp -f v4l/kernel-2.6.xx/* ./ endif
- You'll have to manually patch src/it9135-core.c and change the line:
.ioctl = it9135_usb_ioctl,
to
.unlocked_ioctl = it9135_usb_ioctl,
- download your kernel sources and extract it somewhere. Make sure it has the file /drivers/media/dvb/dvb-usb/dvb-usb.h
for ubuntu/mythbuntu type the following (for the tar command, make sure the file name matches what you downloaded): sudo apt-get source linux-image-$(uname -r) tar -jxvf linux-source-2.6.38.tar.bz2
- run the script posted for v2.6.36/37 but make sure you edit it so it points to where you extracted the kernel source
- run make, if it generates any errors, they should be easy to fix (I had to rename v4l/kernel-2.6.38-8-generic to v4l/kernel-2.6.38)
- run make install
- it _should_ work.
Common problems
- make fails due to missing files.
- You need to edit the script posted for v2.6.36/37 to point to where you extracted the kernel source. If you run the script without editing it, it won't copy the files properly and the build will fail.
- make works fine, but when I plug in the capture card it doesn't work, I get messages like "dvb_usb_it9135: disagrees about version of symbol ..." in the kernel logs.
- You have downloaded or copied the wrong kernel sources when building your driver. Make sure the kernel source you downloaded matches your actual running kernel.
- the module fails to install, with a message explaining that a symbol is missing - dmesg gives "dvb_usb_it9135: Unknown symbol mcount"
- "mcount" is a symbol provided by an optional function which is not configured in the kernel you are using. This seems to be the case with many standard kernels. If mcount is not defined, you need to recompile the kernel with the correct option set to Y.
The instructions below are for debian squeeze and kernel 2.6.32 on amd - you may find you have to change a view things on a different system.
1. Check if mcount is actually defined in your kernel, do
grep mcount /lib/modules/$(uname -r)/build/Module.symvers
If something like "0xb4390f9a mcount vmlinux EXPORT_SYMBOL" appears, mcount IS defined and you don't have to recompile (at least, not for this reason).
2. If mcount is not defined, you need to recompile the kernel with the correct option set to Y.
First, get hold of a copy of the kernel source, AND I STRONGLY SUGGEST you copy your existing kernel configuration rather than starting from the beginning. There are many guides on how to do this - for debian squeeze, try http://newbiedoc.sourceforge.net/system/kernel-pkg.html#EXISTING-KERNEL-PKG.
mcount is defined in /usr/src/linux-source-2.6.32/arch/x86/kernel/x8664_ksyms_64.c
#ifdef CONFIG_FUNCTION_TRACER /* mcount is defined in assembly */ EXPORT_SYMBOL(mcount); #endif
It depends on a kernel option called "CONFIG_FUNCTION_TRACER". This is the switch you need to have set on BEFORE you recompile the kernel.To set the option, you will need to use the kernel configuration tool to set this to Y. If you are using xconfig, the quickest thing to do is to use the search function to find it. Once you have, set it to Y.
Once the configuration change is made, follow the instructions to compile, but as a final check BEFORE you run "make-kpkg", use grep to check the option IS correctly set.
grep CONFIG_FUNCTION_TRACER .config
If "CONFIG_FUNCTION_TRACER=y" appears, it is fine.
Now you can continue with compiling and installing your kernel and headers. Once you have done so, go back and follow the instructions to install the module, including recompiling etc. You should now find that the module loads successsfully.
Huge thanks to http://www.iecn.u-nancy.fr/~garet/linux/notes_installation_av830_debian.php, for providing the basis for these notes.
lsusb dump
Bus 001 Device 009: ID 048d:9135 Integrated Technology Express, Inc. Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x048d Integrated Technology Express, Inc. idProduct 0x9135 bcdDevice 2.00 iManufacturer 0 iProduct 0 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 46 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 500mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 4 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x85 EP 5 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Device Qualifier (for other device speed): bLength 10 bDescriptorType 6 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 bNumConfigurations 1 Device Status: 0x0000 (Bus Powered)