CedarX/XBMC

There has been made a successful built of xbmc for debian/armhf cross-compiled! Some hints on the discussion site. Needs to be wikified! Beware of using the newest github repos. Code (kernel, xbmc etc) changes very often at this moment, so this page has to be kept up to date. If not, you may have to do further steps to get it working.

Native Compile of XBMC
This is a little howto of my steps to compile xbmc (github.com/rellla/xbmca10) native on the Mele A2000. Result should be a debian/unstable(armel) system with xbmc using cedarx. The used repository is a fork from github.com/empatzero/xbmca10 with a few adaptions. The work on coding side was all done by empat0.

Create SD-Card
First step was to create a bootable debian system on sd-card based on this excellent howto: http://rhombus-tech.net/allwinner_a10/hacking_the_mele_a1000/Building_Debian_From_Source_Code_for_Mele/


 * rootfs for debian sid - not for squeeze, armel system
 * u-boot: (default branch) git://github.com/linux-sunxi/u-boot-sunxi.git
 * kernel: (default branch) git://github.com/linux-sunxi/linux-sunxi.git (I had to revert the "fix sata problem" commit to clock.c in order to get mali module loaded)
 * suitable script.bin, customised display settings

(Host system for the above steps was a Debian (sid/unstable) - virtual machine in VMWare)

Boot into Debian
Boot the new debian sid from the sdcard directly from the mele and bring the system up to date: root@mele:~/# apt-get update root@mele:~/# apt-get upgrade root@mele:~/# apt-get install git Create our workspace directory: root@mele:~/# mkdir melehacking root@mele:~/# cd melehacking

Install dependencies and do some modifications
root@mele:~/melehacking# git clone git://github.com/rellla/xbmca10.git root@mele:~/melehacking# apt-get build-dep xbmc

this should install the following packages: autoconf automake autopoint autotools-dev binutils bsdmainutils build-essential bzip2 cmake cmake-data comerr-dev cpp cpp-4.4 cpp-4.6 curl debhelper dpkg-dev emacsen-common fontconfig-config g++ g++-4.4 g++-4.6 gawk gcc gcc-4.4 gcc-4.4-base gcc-4.6 gcc-4.6-base gettext gettext-base gperf groff-base html2text intltool-debian krb5-multidev libao-common libao-dev libao4 libarchive12 libasound2 libasound2-dev libasprintf0c2 libass-dev libass4 libasyncns0 libavahi-client-dev libavahi-client3 libavahi-common-data libavahi-common-dev libavahi-common3 libavcodec-dev libavcodec53 libavfilter-dev libavfilter2 libavformat-dev libavformat53 libavutil-dev libavutil51 libbluetooth-dev libbluetooth3 libbluray-dev libbluray1 libboost-date-time1.49-dev libboost-date-time1.49.0 libboost-dev libboost-serialization1.49-dev libboost-serialization1.49.0 libboost-thread-dev libboost-thread1.49-dev libboost-thread1.49.0 libboost1.49-dev libbz2-dev libc-dev-bin libc6-dev libcaca-dev libcaca0 libcdio-dev libcdio13 libcec-dev libcec1 libcroco3 libcurl3 libcurl4-gnutls-dev libcwiid-dev libcwiid1 libdbus-1-3 libdbus-1-dev libdirac-encoder0 libdirectfb-1.2-9 libdirectfb-dev libdirectfb-extra libdpkg-perl libdrm-dev libdrm-nouveau1a libdrm-omap1 libdrm-radeon1 libdrm2 libegl1-mesa libegl1-mesa-dev libegl1-mesa-drivers libelf1 libenca-dev libenca0 libexpat1-dev libflac-dev libflac8 libfontconfig1 libfontconfig1-dev libfreetype6 libfreetype6-dev libfribidi-dev libfribidi0 libgbm1 libgcrypt11-dev libgettextpo0 libgl1-mesa-dev libgl1-mesa-glx libglapi-mesa libgles2-mesa libgles2-mesa-dev libglew-dev libglew1.7 libglib2.0-bin libglib2.0-dev libglu1-mesa libglu1-mesa-dev libgmp10 libgnutls-dev libgnutls-openssl27 libgnutlsxx27 libgomp1 libgpg-error-dev libgsm1 libgssrpc4 libhal-dev libhal-storage-dev libhal-storage1 libhal1 libice-dev libice6 libicu48 libidn11-dev libiso9660-8 libiso9660-dev libjasper-dev libjasper1 libjbig-dev libjbig0 libjpeg8 libjpeg8-dev libjson0 libkadm5clnt-mit8 libkadm5srv-mit8 libkdb5-6 libkms1 libkrb5-dev liblcms1 libldap2-dev libltdl-dev libltdl7 liblzo2-2 liblzo2-dev libmad0 libmad0-dev libmicrohttpd-dev libmicrohttpd10 libmikmod2 libmikmod2-dev libmodplug-dev libmodplug1 libmp3lame-dev libmp3lame0 libmpc2 libmpeg2-4 libmpeg2-4-dev libmpfr4 libmysqlclient-dev libmysqlclient18 libnettle4 libnfs-dev libnfs1 libogg-dev libogg0 libomxil-bellagio-dev libomxil-bellagio0 libopencv-core2.3 libopencv-imgproc2.3 libopenjpeg2 libopenvg1-mesa liborc-0.4-0 libp11-kit-dev libpcre3-dev libpcrecpp0 libpipeline1 libplist-dev libplist1 libpng12-0 libpng12-dev libpopt0 libpostproc-dev libpostproc52 libpthread-stubs0 libpthread-stubs0-dev libpulse-dev libpulse-mainloop-glib0 libpulse0 libpython2.7 librtmp-dev libsamplerate0 libsamplerate0-dev libschroedinger-1.0-0 libsdl-image1.2 libsdl-image1.2-dev libsdl-mixer1.2 libsdl-mixer1.2-dev libsdl1.2-dev libsdl1.2debian libshairport-dev libshairport1 libsigsegv2 libslang2-dev libsm-dev libsm6 libsmbclient libsmbclient-dev libsndfile1 libspeex1 libsqlite3-0 libsqlite3-dev libssh2-1-dev libssl-dev libstdc++6-4.4-dev libstdc++6-4.6-dev libswscale-dev libswscale2 libtalloc2 libtasn1-3-dev libtdb1 libtheora0 libtiff4 libtiff4-dev libtiffxx0c2 libtimedate-perl libtinyxml-dev libtinyxml2.6.2 libtool libts-0.0-0 libts-dev libudev-dev libunistring0 libva-dev libva-egl1 libva-glx1 libva-tpi1 libva-x11-1 libva1 libvdpau-dev libvdpau1 libvorbis-dev libvorbis0a libvorbisenc2 libvorbisfile3 libvpx1 libwayland0 libwbclient0 libwebp-dev libwebp2 libx11-dev libx11-xcb-dev libx11-xcb1 libx264-123 libxau-dev libxcb-dri2-0 libxcb-glx0 libxcb-glx0-dev libxcb-render0 libxcb-shape0 libxcb-xfixes0 libxcb1-dev libxdamage-dev libxdamage1 libxdmcp-dev libxext-dev libxfixes-dev libxfixes3 libxi6 libxml2-dev libxmlrpc-core-c3 libxmu-dev libxmu-headers libxmu6 libxrandr-dev libxrandr2 libxrender-dev libxrender1 libxt-dev libxt6 libxtst6 libxvidcore4 libxxf86vm-dev libxxf86vm1 libyajl-dev libyajl2 linux-libc-dev m4 make man-db mesa-common-dev mysql-common patch pkg-config po-debconf python python-dev python-imaging python-minimal python-support python2.7 python2.7-dev python2.7-minimal tsconf ttf-dejavu-core ucf x11-common x11proto-core-dev x11proto-damage-dev x11proto-dri2-dev x11proto-fixes-dev x11proto-gl-dev x11proto-input-dev x11proto-kb-dev x11proto-randr-dev x11proto-render-dev x11proto-xext-dev x11proto-xf86vidmode-dev xorg-sgml-doctools xtrans-dev yasm zip zlib1g-dev

need to install 3 more dependencies: root@mele:~/melehacking# apt-get install swig default-jre cmake libgtk2.0-bin

and remove all EGL/GLES-stuff to avoid conflicts root@mele:~/melehacking# apt-get remove libegl1-mesa libegl1-mesa-dev libegl1-mesa-drivers libgles2-mesa libgles2-mesa-dev

and create an swap-file, because otherwise the compiler runs out of memory during compiling and aborts root@mele:~/melehacking# dd if=/dev/zero of=/swap bs=1M count=384 root@mele:~/melehacking# mkswap -c /swap root@mele:~/melehacking# swapon /swap

Start copying cedarx, gles libs etc.
The following external libs/ repos are used/ downloaded:
 * taglib: https://github.com/downloads/taglib/taglib/taglib-1.8.tar.gz
 * cedarx: https://github.com/linux-sunxi/cedarx-libs/tree/master/libcedarv/linux-armel
 * libmad: ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz
 * mali: https://github.com/cnxsoft/a10-bin/tree/master/armel/lib (r2p4 libs)
 * mali-dev: http://malideveloper.com/files/Mali_OpenGL_ES_2.0_SDK_for_Linux_On_ARM_v1.2.0.9310_Linux.tar.gz

root@mele:~/melehacking# cd xbmca10/tools/a10/depends root@mele:~/melehacking/xbmca10/tools/a10/depends# make

Compile xbmc and install it
root@mele:/allwinner/xbmc-pvr-bin/lib/xbmc# echo -e "\nA10HWR=1" >> /etc/environment root@mele:~/melehacking/xbmca10/tools/a10/depends# make -C xbmc root@mele:~/melehacking/xbmca10/tools/a10/depends# cd ../../../ root@mele:~/melehacking/xbmca10# make install

Create Debian package
root@mele:~/melehacking/xbmca10/tools/a10/depends# cd package root@mele:~/melehacking/xbmca10/tools/a10/depends/package# make I did not try to do a "dpkg -i", but i think, in my case (debian/unstable) DEBIAN/control has to be reworked to make it install without any dependency problems.

Start xbmc
After a reboot you modprobe the needed modules: root@mele:~/# modprobe disp root@mele:~/# modprobe lcd root@mele:~/# modprobe hdmi root@mele:~/# modprobe mali root@mele:~/# export A10HWR=1 (if A10HWR isn't set already) root@mele:~/# cd /allwinner/xbmc-pvr-bin/lib/xbmc root@mele:/allwinner/xbmc-pvr-bin/lib/xbmc# ./xbmc.bin

Some hints:

 * If you get a compiler error when processing h264.o or building xbmc.bin, then check, if swap is enabled. The compiler ran out of memory!
 * If deb-building fails, check, if your tmp-directory has enough free space and is no tmpfs, because of the lack of memory an mele.
 * To use the bash-script bin/xbmc to start xbmc, you have to comment out the exec of FEH.py, because of a failing test of glxinfo -> no display found.

= See also =
 * CedarX - Library for Allwinner A10 VPU (Video Processor Unit) used for audio and video decoding and encoding hardware off-loading.
 * HDMI CEC (Consumer Electronics Control) - Developers page for development of HDMI-CEC support on Allwinner A10 SoC based devices.