MuMuDVB and OpenWRT

To describe how to install MuMuDVB under OpenWRT, I will take an example of an installation on a NSLU2. Any other platform supported by openWRT (with a 2.6 kernel) should work.

Please take care when running MuMuDVB on "slow" platforms to have hardware which supports PID filtering (see at the end of this page) if you don't want/can't stream a full transponder

Mumudvb on NSLU2

Mumudvb run on Linksys NSLU2 http://www.nslu2-linux.org .
Someone reported me that it worked with some discontinuities in the stream on the 133MHz version of the slug.
On my 266MHz SLUG I'm able to stream three channels without problems.

Here I use an AF9015 dvb-t stick

Install OpenWRT

The documentation used to create an OpenWRT package can be found here.

  1. get the latest version of openwrt
  2. install the mumudvb package file under package/mumudvb/Makefile :
    http://gitweb.braice.net/gitweb?p=mumudvb;a=blob_plain;f=openwrt/package...
  3. install the makefile for dvb devices at package/kernel/modules/dvb.mk : (2.6.28 and a few devices)
    http://gitweb.braice.net/gitweb?p=mumudvb;a=blob_plain;f=openwrt/package...
  4. Or find the one which fit best your kernel here :
    http://gitweb.braice.net/gitweb?p=mumudvb;a=tree;f=openwrt/package/kerne...

    If you have a kernel version not listed above you can generate it using the following script (but take care about the options for the dvb core):
    http://gitweb.braice.net/gitweb?p=mumudvb;a=blob_plain;f=openwrt/generat...

    You just have to edit the kernel path at the beginning of the file and run it. It will generate a dvb.mk in /tmp/

  5. "make menuconfig", choose the good target, configure the IP,
  6. choose mumudvb under utilities
  7. choose your dvb card under the kernel -- DVB menu
  8. compile with "make V=2"
    The menuconfig of the kernel will ask some questions about DVB devices, press enter until he is happy
  9. install the image on the slug
    sudo upslug2 -i bin/openwrt-nslu2-squashfs.bin
  10. load the modules in the good order (on the slug, if the order is bad, check your dmesg to know the one you missed)

    Take care of force_pid_filter_usage=1

    insmod dvb-core
    insmod dvb-usb force_pid_filter_usage=1
    insmod dvb-pll
    insmod mxl5005s
    insmod tda18271
    insmod qt1010
    insmod mt2060
    insmod af9013
    insmod dvb-usb-af9015

  11. some symbolic links

    mkdir /dev/dvb
    mkdir /dev/dvb/adapter0
    ln -s /dev/dvb0.demux0 /dev/dvb/adapter0/demux0
    ln -s /dev/dvb0.dvr0 /dev/dvb/adapter0/dvr0
    ln -s /dev/dvb0.frontend0 /dev/dvb/adapter0/frontend0
  12. install pthread

    opkg update
    opkg install libpthread
  13. Try MuMuDVB !

Result

root@OpenWrt:~# cat /proc/cpuinfo
Processor : XScale-IXP42x Family rev 1 (v5b)
BogoMIPS : 266.24


PID PPID USER STAT VSZ %MEM %CPU COMMAND
1903 1782 root R 1020 3% 26% mumudvb -vvv -d -c mumudvb_1channel

MuMuDVB conf :

freq=842
dont_send_sdt=1
ip=239.100.0.0
port=1234
name=laSexta
pids=1500 1501 1502 1503 1504

No packets dropped, works perfectly :D

The limit, in my case is three channels

Issues

If the stick doesn't have hardware ip filtering, the slug is completely lost by the amount of data (frozen if the antenna is not removed)

A dma bounce buffer outside the pool size was requested. Requested size was 0x00009A38
The calling code was :
Function entered at [<c00255dc>] from [<c0029fbc>]
Function entered at [<c0029eac>] from [<c013cb44>]
Function entered at [<c013c9f4>] from [<c013d764>]
Function entered at [<c013d540>] from [<bf150b10>]
r7:c1ebaa30 r6:c11df760 r5:c11df760 r4:c11df760
...

To find out if the device can do hardware ip filtering, you have to search if the variable caps contains DVB_USB_ADAP_HAS_PID_FILTER in the description of the device, in the source code of the module, in kernelsourcedir/drivers/media/dvb/dvb-usb/