Open source‎ > ‎

AvertTV Volar HD PRO on Linux

Success report summary
 Manufacturer    Avermedia
 Model name  AverTv Volar HD Pro
 Model number
On the box : A835
Reported by dmesg : A835B
 Device type USB 2.0 TNT tuner
 Image
 

 Linux Linux Mint Debian Edition UP8.
 Kernel 3.11-2-486
 Driver it913x
 Firmware dvb-usb-it9135-02.fw  extracted from the CD delivered with the device (see below)
 ID 07ca:1835


More

This is an USB Terrestrial TV Tuner.

I bought this model because is was marked supported (unofficially) on the LinuxTv Wiki .
Although all information on the box matched those on the page mentioned, the dongle was not exactly the one expected.
Its ID on interface is 07ca:1835, instead of 07ca:3835.

Using kernel 3.11-2-486 (Linux Mint Debian Edition UP8), it is recognized (from dmesg) :
"usb 1-1.2.5: dvb_usb_v2: found a 'Avermedia A835B(1835)' in cold state"
dmesg also stated that the firmware file dvb-usb-it9135-02.fw is missing.
I added the firmwares recommended on LinuxTv. No success.
That's why I finally decided attempt extracting it from the windows driver on the installation CD.
The firmware file is attached to this page.

Extracting it

How to do that is explained on this Antti's LinuxTV blog post.
I was a little frightened by operations such as "learn the finger print" and "somehow determine the length the firmware". It wasn't that difficult, finally.
The firmware has size similar to the ones already published. It is followed by low values to separate it from the next part of the driver.

On the CD, there are 12 driver install packages. For A835, A835B, A835G, Win7, Win8, 32 bits 64 bit.
How to choose ?

    md5sum indicates that Win7 and Win8 drivers are identical.
    V8.2.64.64 is for 64 bit, V8.2.0.64 is for 32 bit.
    dmesg says "usb 1-1.2.5: dvb_usb_v2: found a 'Avermedia A835B(1835)' in cold state".
The first guess is consequently A835B (although the box reads "Model: A835", no B suffix).

Provided that I run a 32bit Linux, I chose <crdom>/AVerTV/Drivers/A835B/Win7_x86_V8.2.0.64_Black_Install.exe.
engrampa extracts AVerIT13x.sys which is the windows driver containing the firmware.

$ hexdump -s0 -C 'AVerIT13x.sys'  | grep "03 00 00 03 41 00 03 41"

        0001bd30  03 00 00 03 41 00 03 41  80 06 41 93 1a 02 12 bf  |....A..A..A.....|
        0001e5e0  03 00 00 03 41 00 03 41  80 06 41 93 1a 02 12 bf  |....A..A..A.....|
        00020440  98 7b 98 7b 98 7b 00 00  03 00 00 03 41 00 03 41  |.{.{.{......A..A|
        00022cf0  03 00 00 03 41 00 03 41  80 06 41 93 1a 02 12 bf  |....A..A..A.....|


finds 4 occurrences. Which one to choose ? Well one that will provide a firmware of a length approaching the known ones that I downloaded earlier. Consequently, we must find out where the firmware ends.
Lets compare the last bytes from two existing firmware files :

    00001680  02 9c 3d 02 34 37 02 96  c5 02 67 f3 02 80 6a 02  |..=.47....g...j.|
    00001690  80 c3 03 01 00 01 57 d6  29 02 80 b8 02 95 5a 02  |......W.).....Z.|
    000016a0  96 0e 02 96 91 02 65 5e  02 4f cb 02 6a 5d 02 8d  |......e^.O..j]..|
    000016b0  c6 02 8d ef 02 6c b1 02  6c bf 02 6d 6c 02 4f a9  |.....l..l..ml.O.|
    000016c0  02 4f 03 01 00 01 57 ff  01 ac                    |.O....W...|

    and

    00001670  02 62 cd 02 8c 01 02 9c  3d 02 34 37 02 96 c5 02  |.b......=.47....|
    00001680  67 f3 02 80 6a 02 80 c3  02 80 b8 02 95 5a 02 96  |g...j........Z..|
    00001690  0e 02 03 01 00 01 57 e0  20 96 91 02 65 5e 02 49  |......W. ...e^.I|
    000016a0  db 02 6a 5d 02 8d c6 02  8d ef 02 6c b1 02 6c bf  |..j].......l..l.|
    000016b0  02 6d 6c 02 49 b8 02 49  bb                       |.ml.I..I.|

They do not end with the exact same bytes. However, =.47 (3d 02 34 37) appear in both near the end.

3d 02 34 37 is found twice in AVerIT13x.sys :

    0001fc60  02 9c 3d 02 34 37 02 96  c5 02 67 f3 02 80 6a 02  |..=.47....g...j.|
    0001fc70  80 c3 03 01 00 01 57 d6  29 02 80 b8 02 95 5a 02  |......W.).....Z.|
    0001fc80  96 0e 02 96 91 02 65 5e  02 4f c2 02 6a 5d 02 8d  |......e^.O..j]..|
    0001fc90  c6 02 8d ef 02 6c b1 02  6c bf 02 6d 6c 02 4f a0  |.....l..l..ml.O.|
    0001fca0  02 4f 03 01 00 01 57 ff  01 a3 00 00 00 00 00 00  |.O....W.........|

    00024370  02 9c 3d 02 34 37 02 96  c5 02 67 f3 02 80 6a 02  |..=.47....g...j.|
    00024380  80 c3 03 01 00 01 57 d6  29 02 80 b8 02 95 5a 02  |......W.).....Z.|
    00024390  96 0e 02 96 91 02 65 5e  02 4f c2 02 6a 5d 02 8d  |......e^.O..j]..|
    000243a0  c6 02 8d ef 02 6c b1 02  6c bf 02 6d 6c 02 4f a0  |.....l..l..ml.O.|
    000243b0  02 4f 03 01 00 01 57 ff  01 a3 00 00 00 00 00 00  |.O....W.........|

There seem to be two possible firmwares there.
The known firmwares do not end with a series of low values. In the driver the zeroes look like a filler to align the next part on a word.
I guess that our firmware end with 57 ff 01 a3, respectively at addresses 1fca9 and 243b9.
They match respectively the "03 00 00 03 41 00 03 41" fingerprint at 1e5e0 and 22cf0.
The length are 5834 and 5834.
Extract them :
$ dd if=AVerIT13x.sys ibs=1 skip=130217 count=5834 of=dvb-usb-it9135-02.fw
$ dd if=AVerIT13x.sys ibs=1 skip=142576 count=5834 of=dvb-usb-it9135-02.fw


And the second firmware file is perfect for my dongle. I did not need to find out what the other ones are.
When used, dmesg report :
it913x: Firmware Version 52953344<6>

Yet another firmware

I just don't know how all this is articulated. However,  at least the information on the box and the various ID's makes it very confusing.
Furthermore, I tried two other firmware files reporting the same version. They did not work with my hardware.
This makes it  a difficult matter for all those great guys who write drivers and test them.
The firmwares are also referred to by versions numbers such as 3.42.3.3 / 3.29.3.3, 3.40.1.0 / 3.17.1.0, 3.39.1.0 / 3.9.1.0, 3.25.0.0.
I failed to find which version mine is...

Comments