Raspberry Pi Satellite TV
Another cheap receiver off eBay
A quick search of ‘USB DVB-S’ led me to this receiver for the bargain price of £15.86, and the Linux TV Wiki seemed to confirm that it was supported. Sadly I was about to find out the difference between ‘supported’ and working out of the box; though not straight away, as it took many weeks for the receiver to get to me from Hong Kong.
After plugging it into my Raspberry Pi running a recent build of OpenELEC nothing happened. This wasn’t a total surprise, as I’ve recently been doing a fair bit of digging around in the driver mechanism getting DVB-T cards working for various devices.
When I took a look in ~/OpenELEC.tv/projects/RPi/linux/linux.arm.conf I found:
# CONFIG_DVB_USB_LME2510 is not set
I changed this as follows, cleared out the build directory and kicked off a rebuild:
Whilst OpenELEC was building I hooked the receiver up to my Windows 8 Microserver to prove to myself that it was working. I had issues there with drivers too, as the ones supplied aren’t signed, meaning that I had to restart Windows and allow the installation of unsigned drivers (thankfully the Arduino folks have a useful HowTo guide for this).
I got Satellite TV working using the supplied Blaze software, but the Pop Girl channel that my daughter likes was missing. It turned out that the Blaze setup for Astra at 28.2E didn’t include the multiplex, and I had to add it manually using details from KingOfSat. For good measure I also tried out Windows Media Center (having got a free license key from the recent Microsoft Promotion). The setup process gave me some confidence that I’d end up with a sensible EPG/channel list, but in reality there was loads missing. I’m now glad that I didn’t pay for Media Center.
With Windows play over I went back to the RPi with my lme2510 build, and things were looking promising (dmesg | grep 2510):
[ 8.644049] LME2510(C): Firmware Status: 6 (44)
[ 13.482794] LME2510(C): FRM Loading dvb-usb-lme2510c-rs2000.fw file
[ 13.482828] LME2510(C): FRM Starting Firmware Download
Sadly the adaptor wasn’t showing up in TV HeadEnd.
A quick look in /lib/firmware on my RPi showed that there wasn’t any dvb-usb-lme2510c-rs2000.fw file to be downloaded. The Linux TV Wiki and TvBoxSpy had instructions for creating the firmware file, but it wasn’t obvious to me that I needed to start out with the Windows driver.
My attempt with the US2B0D_x64.sys that had installed on my Windows 8 box failed, so I installed onto an old XP netbook and pulled USB2B0D.sys off there. That didn’t work either, probably because it was a newer file. In the end I found the right version of the driver file in a forum post. All this fuss because the manufacturers don’t support Linux, and exert copyright on their Windows drivers (and parts thereof) is a real pain – it’s hardly like the driver firmware is of any use without the hardware.
Having found and spliced the right Windows driver file into a Linux firmware file I then had to drop it into OpenELEC, which meant mounting up the SYSTEM file with squashfs, copying everything out, adding the firmware to /lib/firmware and then using mksquashfs to build a new SYSTEM file (and md5sum to create a new SYSTEM.md5).
With new SYSTEM files in hand I combined them with unchanged KERNEL files and put them (with checksums) into the upgrade folder on my OpenELEC RPi. One more reboot and I finally had a system that would register the DVB device:
[ 7.797065] LME2510(C): Firmware Status: 6 (44)
[ 13.044104] LME2510(C): FRM Loading dvb-usb-lme2510c-rs2000.fw file
[ 13.044131] LME2510(C): FRM Starting Firmware Download
[ 15.492746] LME2510(C): FRM Firmware Download Completed – Resetting Device
[ 15.493023] usbcore: registered new interface driver LME2510C_DVB-S
[ 16.980020] LME2510(C): Firmware Status: 6 (47)
[ 16.980055] dvb-usb: found a ‘DM04_LME2510C_DVB-S RS2000’ in warm state.
[ 16.981327] DVB: registering new adapter (DM04_LME2510C_DVB-S RS2000)
[ 17.059523] LME2510(C): FE Found M88RS2000
[ 17.059573] DVB: registering adapter 0 frontend 0 (DM04_LME2510C_DVB-S RS2000 RS2000)…
[ 17.059993] LME2510(C): TUN Found RS2000 tuner
[ 17.060059] LME2510(C): INT Interrupt Service Started
[ 17.182799] Registered IR keymap rc-lme2510
[ 17.186119] dvb-usb: DM04_LME2510C_DVB-S RS2000 successfully initialized and connected.
[ 17.186160] LME2510(C): DEV registering device driver
The last bit of config was in TV HeadEnd. At last I could see the DVB-S receiver in the Configuration->TV Adaptors drop down menu. Next I manually added the mux I wanted (thank you again KingOfSat), and after some trial, error and a few restarts I had services found and channels mapped.
When I browsed to tv -> BSkyB and pressed play on Pop Girl I got a frozen screen, but a little more playing around resulted in a watchable ‘Sabrina the Teenage Witch’ (even if it was squashed up from an aspect ratio perspective). Sadly it wasn’t too long before the system lost lock, and needed a cold boot and a bit more playing around to get working again.
I’m not on the latest version of TV Headend, so an upgrade might cure the aspect ratio issue and may even help with stability.
I was able to get Satellite TV playing on my Raspberry Pi. The (un)reliability means that that I’d qualify this as a science project rather than a dependable piece of consumer electronics. Maybe that will improve over time, or maybe I just spent almost £16 and a day of my time learning the hard way about DVB-S on Linux.
 Enormous thanks are due to Malcolm Priestly as creator of the LME2510 driver that’s in the Linux kernel. He has also answered a number of forum posts that got me pointed in the right direction.
Filed under: howto, media, Raspberry Pi, technology | 13 Comments
Tags: 22f0, 2510, 28.2E, 3344, Astra, dm04, driver, dvb, DVB-S, Eutelsat, frimware, LFE2510, M88RS2000, openelec, Pop Girl, Raspberry Pi, Raspi, RPi, satellite, tv, TVHeadEnd, XBMC