Ubuntu TV fully accelerated on a Pandaboard with Ubuntu LEB
As described on my previous post about Ubuntu TV support on a Pandaboard, we were still missing proper support for texture streaming on a Pandaboard, to have the video playback also working and fully accelerated.
This weekend Rob Clark managed to create the first version of the TI’s specific eglImage support at Qtmobility, posting the code at his gitorious account, and for the first time we’re fully able to use Ubuntu TV on a ARM device, using a Pandaboard.
Demo video with the Ubuntu TV UI (accelerated with Qt and OpenGL ES 2.0) and with video decode support of 720p and 1080p:
The code support for TI’s eglImage still needs a few clean-ups, but we hope to be able to push the support at Ubuntu in the following weeks (make it good enough to try at least a package patch).
For people wanting to try it out, a few packages are already available at Linaro’s Overlay PPA, and the remaining ones should be available later today (Qt and Qtmobility), so people can easily run it with our images.
Hope you enjoy, and we’ll make sure we’re always working on keeping and improving the current support, so Ubuntu TV also rocks with ARM
Cheers!
Ubuntu TV UI at Pandaboard, and next steps
Yesterday Canonical announced the first UI concept for the Ubuntu TV. Together with the announcement, the first code drop was released, so we could read and understand better the technologies used, and how this will behave on an ARM environment, mostly at a Pandaboard (that we already have OpenGL ES 2 and video decode working).
Getting Ubuntu TV to work
If are still using Oneiric, you can just follow the guide presented at https://wiki.ubuntu.com/UbuntuTV/Contributing, where you’ll find all needed steps to try Ubuntu TV at your machine.
As it’s quite close with Unity 2D (similar code base), and also based on Qt, I decided to follow the steps described at wiki page and see if it should work correctly.
First issue we found with Qt, was that it wasn’t rendering at full screen when using with latest PowerVR SGX drivers, so any application you wanted to use with Qt Opengl would just show itself on a small part of the screen. Luckily TI (Nicolas Dechesne and Xavier Boudet) quickly provided me a new release of the driver, fixing this issue (version that should be around later today at the Linaro Overlay), so I could continue my journey
Next problem was that Qt was enabling brokenTexSubImage and brokenFBOReadBack for the SGX drivers based on the old versions available for Beagle, and seems this is not needed anymore with the current version available at Pandaboard (still to be reviewed with TI, so a proper solution can be forwarded to Qt).
Code removed, patch applied and package built (after many hours), and I was finally able to successfully open the Ubuntu TV interface at my Panda
UI Navigation on a Pandaboard, with Qt and OpenGL ES2.0
Running Ubuntu TV is quite simple if you’re already running the Unity 2D interface. All you need to do is to make sure you kill all unity-2d components and that you’re running metacity without composite enabled. Other than that you just run ”unity-2d-shell -opengl” and voilà
Here’s a video of the current interface running on my Panda:
As you can see from the video, I didn’t actually play any video, and that’s because currently we’re lacking a generic texture handler for OpenGL ES with Gstreamer at Qtmobility (there’s only one available, but specifically for Meego). Once that’s fixed, the video playback should behave similarly as with XBMC (but with less hacks, as it’s a native GST backend).
Next steps, enabling proper video decode
Looking at what would be needed to finally be able to play the videos, and to make it something useful at your Pandaboard, the first thing is that we need to improve Qtmobility to have a more generic (but unfortunately still specific to Omap) way handle texture streaming with Gstreamer and OpenGL ES. Rob Clark added a similar functionality at XBMC, creating support for ”eglImage”, so we just need to port the work and make sure it works properly with Qtmobility.
Once that’s ported, the video should be streamed as a texture at the video surface, making it also work transparently with QML (the way it’s done with Ubuntu TV).
If you know Qt and Gstreamer, and also want to help getting it to work properly on your panda, here follows a few resources:
- Rob’s implementation of eglImage at XBMC: https://github.com/robclark/xbmc/commits/gstreamer-eglimg
- Qtmobility support for Meego and OpenGLES: http://qt.gitorious.org/qt-mobility/qt-mobility/blobs/master/plugins/multimedia/gstreamer/qgstreamergltexturerenderer.cpp
- IRC: #linaro and #ubuntu-tv at Freenode, look for robclark or rsalveti
As soon video decoding is working properly, a new blog post should be around explaining the details and how to reproduce it at your own Panda with Ubuntu LEB
Cheers!
HW video decode and XBMC support on a Pandaboard with Ubuntu LEB
Part of the effort we spent during the Linaro 11.12 cycle was to try to enable at Pandaboard not only hardware graphics support (GLES with PVR SGX), but also hardware accelerated video decode, as TI had released all needed userspace to be used at Ubuntu Oneiric (11.10) release.
Unfortunately it didn’t just work with our images because at that time we were using a newer kernel already, based on the 3.1 series that is maintained by the Linaro TI Landing Team. Bug 880840 has all the details.
Luckily Sebastien Jan (from TI) was able to find the root cause of the problem, that was causing so much frame drops that was making the video playback basically unusable. The problem was related with PM support at omap’s hwspinlock implementation, as you can check at this link.
Kernel fix properly integrated and available at the Overlay PPA used by our Linaro Ubuntu Evaluation Build images, and finally able to have a similar user experience as was expected when TI delivered the user space components at their own PPA.
If you want to try it by yourself, just be sure you’re using at least linux-image-3.1.1-6-linaro-lt-omap at your board (all hwpacks >= 20110105 should have it included by default).
Playing videos with HW decode acceleration
Since today you’ll also easily find all the needed packages to enable HW video decode acceleration at our images (Pandaboard only at the moment, more boards coming soon). We just included and copied all needed packages from the TI PPA, so you don’t even need to enable it when installing the additional packages.
Installing the extra packages for video decode at your Pandaboard:
- Grab the latest Pandaboard hwpack (lt-panda-x11-base-oneiric) and Ubuntu Desktop image from http://snapshots.linaro.org/oneiric (as example I used hwpack_linaro-lt-panda-x11-base_20120106-0_armel_supported.tar.gz and linaro-o-ubuntu-desktop-tar-20120105-0.tar.gz)
- Create a Ubuntu LEB pandaboard image on a SD card, following the instructions described at https://wiki.linaro.org/Platform/DevPlatform/Ubuntu/ImageInstallation
- Boot the card and install the ubuntu-omap4-extras-multimedia package:
$ sudo apt-get install ubuntu-omap4-extras-multimedia - Reboot your pandaboard
- Play a video with any video player that’s compatible with Gstreamer (e.g. Totem)
In the future we should also have this completely integrated at the hwpack itself, but unfortunately this is not possible at the moment without increasing the image size too much.
XBMC support
Another awesome thing we worked during previous cycle (11.12) was to make an XBMC version available that would use both GLES and Gstreamer, so it could also be used with a Pandaboard. Avik Sil did a great work making it all work with our images, and we were finally able to have XBMC 11 Beta (Eden) available at our Overlay PPA.
For proper support for Gstreamer Rob Clark did an awesome work improving the current patches, and also improving the support quite a bit. At our package you’ll find all latest patches available from Rob, from his current development tree.
To start using XBMC with the Ubuntu LEB image at your Pandaboard, you just need to install the xbmc package, with $ sudo apt-get install xbmc. For best user experience, please use the XBMC session available at LightDM (just log-out the default session and select XBMC instead). This will work a lot better because then there will be no other window manager or compositor taking extra resources from your board.
We also hope to deliver a set-top box image by the end of the current cycle (12.01), that will have XBMC installed by default. Please check the blueprint https://blueprints.launchpad.net/linaro-ubuntu/+spec/create-a-set-top-box-leb-image if you want to follow the progress of it.
Bugs and Issues
Unfortunately not everything is working perfectly at the moment, and issues with the Gstreamer and hw video decode support on Pandaboard are expected. The most annoying one that’s currently affecting XBMC is the issues with seek, as sometimes the video goes faster than the audio, and then it stops for a while until it’s in sync again. We hope to get this fixed soon, but that depends a bit of how much time Rob can spend on it.
In case of any other bug while trying to get video decode to work on your Pandaboard, don’t hesitate to open a bug at https://bugs.launchpad.net/linaro-ubuntu/+filebug or ping aviksil, robclark or rsalveti at #linaro on freenode.
Cheers!
Update: Check bug https://bugs.launchpad.net/linaro-ubuntu/+bug/915456 for the video hanging issue. Without polling XBMC should now play most videos just fine.
Update 2: XBMC-ready image already available at http://snapshots.linaro.org/oneiric/linaro-o-linarotv-xbmc/, just be sure to flash with http://snapshots.linaro.org/oneiric/lt-panda-x11-base-oneiric/.
Update 3: There’s a mem leak at the gst decode codec, check bug https://bugs.launchpad.net/ubuntu-omap4-extras-multimedia/+bug/915768 for progress on that.
UDS-P/Linaro Connect Q4.11 and 11.11 cycle
During the end of October and beginning of November we had the last Linaro Connect for the year. This time we also had it together with the Ubuntu Developer Summit, giving us the opportunity to better discuss the roadmap with both Linaro and the Ubuntu team.
From the Developer Platform team perspective, we had a quite nice week, with demos happening at Monday and Friday (showing people what we’ve been working on), and also sharing some great news with the Ubuntu team, now that Mark Shuttleworth announced that Ubuntu will go to Tablets, TVs and Phones (and ARM for sure will be a huge part of that).
Some nice links and videos of what happened during that week (related with our team):
* Sessions related with the Developer Platform Team (Ubuntu)
* Linaro Demo: Ubuntu Unity with OpenGL ES on Pandaboard
* Linaro Developer Platform Tech Lead Ricardo Salveti Interview at Linaro Connect
* Linaro Connect Q4.11 – Ubuntu LEB tutorial
* Linaro Connect Q4.11 – Interview with Marcin Juszkiewicz
Linaro 11.11 Release
Another quite good achievement for us during November was the 11.11 release.
During this release we had a quite a few great highlights, including some that we were planning for quite a while already:
* Ability to cross build Firefox using Multiarch
* OMAP4 SPL USB Booting, enabling USB boot at Pandaboard
* ARM DS-5 support for the 5.8 release
* CI Builds for Linaro GCC both for cross and native
* And a lot of bug fixes
Now it’s time to get ready to develop the blueprints we’re planning for 11.12, to also make December another great and solid month
(will do another post about the 11.12 planning later this one).
launchpadlib: creating a changelog for a PPA
As at Linaro we usually work with many PPAs over the releases, there was a need to generate a proper changelog for a PPA, in a way we could know what packages got changed before doing the release.
At first I thought I could just parse the repository metadata (as a PPA is nothing more than a debian repository), but then I realized I could just use the awesome (yes, *awesome*) launchpadlib, if it had a way to get the data I needed.
So I called the launchpadlib master I know (Ursinha), and in 15 minutes we saw that we could use it to parse the “.changes” file, and from there get the data I needed. As Launchpad stores the PPA packages publishing history, it’s quite easy to get all the changes over period of time.
A few minutes later (after also noticing that there’s a python-debian module to parse the changes file), I created the first version of the generate-ppa-changelog.py script, that does exactly what I needed, and with just a few python lines
Here’s the link: http://bazaar.launchpad.net/~rsalveti/+junk/launchpad/view/head:/generate-ppa-changelog.py.
Usage:
rsalveti@evatp:~/projects/launchpad/scripts$ python generate-ppa-changelog.py -h
usage: generate-ppa-changelog.py [-h] [-d YYYYMMDD] [-s SERIES] -t TEAM
[-p PPA] [--version]Print Changelog for a PPA
optional arguments:
-h, –help show this help message and exit
-d YYYYMMDD, –date YYYYMMDD
start date to probe for changes
-s SERIES, –series SERIES
ubuntu series to look for changes (default: natty)
-t TEAM, –team TEAM launchpad team that owns the PPA
-p PPA, –ppa PPA ppa name to probe the changelog (default: first PPA)
–version show program’s version number and exitIf no argument is given, it will probe all the changes for the default series.
Output Example:
rsalveti@evatp:~/projects/launchpad/scripts$ python generate-ppa-changelog.py -t linaro-maintainers -p overlay -s natty -d 20110701
Changelog for linaro-maintainers’s overlay PPA (series natty) since 2011-07-01 00:00:00base-files (5.0.0ubuntu28linaro3) natty; urgency=low
* Updating Linaro LEB version to 11.07 (development branch)
— Ricardo Salveti de Araujo Fri, 15 Jul 2011 04:19:40 -0300
libjpeg-turbo (1.1.1-1inaro2) natty; urgency=low
* release
* add timestamp code to cjpeg.c
* default cjpeg.c and djpeg.c timestamp code to off— Tom Gall Mon, 11 Jul 2011 20:32:23 +0000
linaro-meta (017) natty; urgency=low
* Refreshed dependencies
* Added libjpeg-turbo62 to linaro-alip, linaro-graphical-engineering,
linaro-multimedia-engineering, linaro-ubuntu-desktop— Tom Gall Wed, 13 Jul 2011 15:41:29 +0000
u-boot-linaro (2011.07.1-0ubuntu1~natty1) natty; urgency=low
* New upstream 2011.07.1 which includes
– PXE FDT fix from previous ubuntu release so patch has been removed
– Added missing PXE env vars (LP: #808815)
– Generated unique usbethaddr (LP: #809015)
– Modify pxe command to look for usbethaddr if ethaddr is NULL— John Rigby Wed, 13 Jul 2011 23:31:39 -0600
x-loader (1.5.1+git20110715+fca7cd2-1ubuntu1~natty1) natty; urgency=low
* New upstream release
– several fixes for panda and igep
– OMAP3 code cleanup
– Beagle Rev C5 support
– Support for IGEPv3 board— Ricardo Salveti de Araujo Fri, 15 Jul 2011 05:55:09 -0300
x-loader (1.5.0+git20110714+cdc887b-1ubuntu1~natty1) natty; urgency=low
* New upstream release
– Adding support for IGEPv3 board
* debian/patches/01-Beagle-Rev-C5-support.patch:
– Adding support for the new Beagle C5— Ricardo Salveti de Araujo Fri, 15 Jul 2011 02:36:58 -0300
And now we can just generate the proper changelog anytime we want to do a call for testing or a Linaro Ubuntu release
Net booting with TFTP and PXE with Pandaboard
Over the past month I’ve being working with John Rigby to integrate the SMSC95XX and OMAP4 EHCI patches into Linaro U-Boot, so we could deliver the network booting feature for people using Pandaboards.
Those patches are published at the U-Boot mailing list, but still as a working in progress. While we work helping the original developers to get the patches accepted upstream, we also want to deliver the functionality for our users, so all those patches are now integrated at the Linaro U-Boot tree.
You can check the patches by going at http://git.linaro.org/gitweb?p=boot/u-boot-linaro-stable.git;a=shortlog.
Testing with Pandaboard
To make it work properly, besides using Linaro U-Boot you’ll also need to use the upstream X-Loader tree, with one additional patch that’s not yet merged. You can clone the upstream tree from http://gitorious.org/x-loader/x-loader, then just apply the patch http://people.canonical.com/~rsalveti/pxe/0001-omap4-pandaboard-ehci-fref_clkout-per-board-revision.patch and build for the Pandaboard target.
If you just want to test without building your own X-Loader and U-Boot, you can just grab both files from http://people.canonical.com/~rsalveti:
- X-Loader: http://people.canonical.com/~rsalveti/pxe/MLO
- U-Boot: http://people.canonical.com/~rsalveti/pxe/3/u-boot.bin
Building your TFTP + DHCP server for PXE
To build your TFTP + DCHP server just follow the instructions described at https://help.ubuntu.com/community/Desktop/PXE. Don’t worry about the ‘filename “pxelinux.0″;’ line at the dhcpd.conf file, you can remove it.
Then just create your PXE config file at the right place:
$ cat /tftpboot/pxelinux.cfg/0A2A2B0A
default panda-natty
prompt 0
timeout 3label panda-natty
kernel panda/uImage
append console=ttyO2,115200n8 root=/dev/mmcblk0p2 ro fixrtc vram=48M omapfb.vram=0:24M mem=1G@0×80000000 text earlyprintk=ttyO2
initrd panda/uInitrd
PXE Booting
With the proper X-Loader and U-Boot files in place (at your first SD card partition), and with the TFTP + DHCP server also properly installed, you can just jump and try TFTP/PXE boot.
Stop the U-Boot autoload and call the following commands:
- setenv pxecfg_ram 0×88000000: location in RAM to load the pxecfg file
- setenv kernel_ram 0×80000000: location in RAM to load the kernel
- setenv initrd_ram 0×81600000: location in RAM to load the initrd
- setenv autoload no: disable autoload while calling bootp (so you can just set up your network without autoboot)
- usb start: start USB and enables the SMSC95xx ethernet interface
- bootp: initialize the network, probing the ip address settings from your DHCP server
- pxecfg get: probe the pxecfg config file
- pxecfg boot: boot
You should get a similar output as:
Texas Instruments X-Loader 1.5.0 (Jul 11 2011 – 07:52:49)
Reading boot sector
Loading u-boot.bin from mmcU-Boot 2011.06 (Jul 11 2011 – 02:49:51)
CPU : OMAP4430
Board: OMAP4 Panda
I2C: ready
DRAM: 1 GiB
MMC: OMAP SD/MMC: 0
Using default environmentIn: serial
Out: serial
Err: serial
Net: No ethernet found.
Hit any key to stop autoboot: 0
Panda # setenv pxecfg_ram 0×88000000
Panda # setenv kernel_ram 0×80000000
Panda # setenv initrd_ram 0×81600000
Panda # setenv autoload no
Panda # usb start
(Re)start USB…
USB: Register 1313 NbrPorts 3
USB EHCI 1.00
scanning bus for devices… The request port(2) is not configured
EHCI timed out on TD – token=0x80008c80
The request port(2) is not configured
4 USB Device(s) found
scanning bus for storage devices… 0 Storage Device(s) found
scanning bus for ethernet devices… 1 Ethernet Device(s) found
Panda # bootp
Waiting for Ethernet connection… done.
BOOTP broadcast 1
DHCP client bound to address 10.42.43.10
Panda # pxecfg get
missing environment variable: pxeuuid
missing environment variable: ethaddr
Retreiving file: pxelinux.cfg/0A2A2B0A
Waiting for Ethernet connection… done.
Using sms0 device
TFTP from server 10.42.43.1; our IP address is 10.42.43.10
Filename ‘pxelinux.cfg/0A2A2B0A’.
Load address: 0×88000000
Loading: #
done
Bytes transferred = 239 (ef hex)
Config file found
Panda # pxecfg boot
Hit any key to stop autoboot: 0
Label: panda-natty
kernel: panda/uImage
append: console=ttyO2,115200n8 root=/dev/mmcblk0p2 ro fixrtc vram=48M omapfb.vram=0:24M mem=1G@0×80000000 text earlyprintk=ttyO2
initrd: panda/uInitrd
Retreiving file: panda/uInitrd
Waiting for Ethernet connection… done.
Using sms0 device
TFTP from server 10.42.43.1; our IP address is 10.42.43.10
Filename ‘panda/uInitrd’.
Load address: 0×81600000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
############
done
Bytes transferred = 3982715 (3cc57b hex)
Retreiving file: panda/uImage
Waiting for Ethernet connection… done.
Using sms0 device
TFTP from server 10.42.43.1; our IP address is 10.42.43.10
Filename ‘panda/uImage’.
Load address: 0×80000000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#########################
done
Bytes transferred = 4174480 (3fb290 hex)
## Booting kernel from Legacy Image at 80000000 …
Image Name: Ubuntu Kernel
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4174416 Bytes = 4 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum … OK
## Loading init Ramdisk from Legacy Image at 81600000 …
Image Name: Ubuntu Initrd
Image Type: ARM Linux RAMDisk Image (uncompressed)
Data Size: 3982651 Bytes = 3.8 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum … OK
Loading Kernel Image … OK
OKStarting kernel …
Uncompressing Linux… done, booting the kernel.
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
…
This should be enough for you to get your Pandaboard booting with PXE. You can also script these commands at your boot.scr file that U-Boot loads automatically from your SD card, so you don’t have to call them by hand every time you reboot your board.
In case it doesn’t work for you, just ping me (rsalveti) at #linaro on freenode
PandaBoard.org and Early Adopter Program
Today it was finally released the new PandaBoard website, showing everything you wanted to know about the new community oriented OMAP 4 board.
If you are already used with BeagleBoard, Panda should be similar in some way, but now deploying the latest OMAP 4 SoC and tons of new stuff.
What you can find at the PandaBoard:
– Dual Core ARM Cortex™ A9 powered by OMAP4430
– 1GB LPDDR2 SDRAM
– PowerVR SGX 2D/3D Graphic Accelerator
– WLAN, BT and FM by WL1271
– DVI-D and HDMI support
– 2x USB Host + Ethernet by LAN 9514
– Mini USB with OTG support
– SD/MMC
– JTAG
– RS-232 UART
– LCD and Generic Expansion and more
Software Support:
Another good thing is that much of the software support is already available at omapzoom, like Kernel, X-Loader and U-Boot. Upstream kernel is still missing some patches, but there’s a lot of work going on linux-omap, so expect at least basic support from upstream soon. For bootloader you can already use U-Boot from upstream, as Sakoman did an awesome work doing the Pandaboard and OMAP 4 support.
Early Adopter Program:
While PandaBoard is still not out for general public you can already participate at the Early Adopter Program and luckly get a board for free (and first than everyone else)! All you need to do is go to http://www.omappedia.org/wiki/PandaBoard_Early_Adopter_Program and propose a cool open source project that could take use of it. The board is really small and powerful, think about running Ubuntu, MeeGo or any other distro and getting 3D support, 1080p video decode and more! Lots of ideas, for sure.
If you’re interested don’t waste your time and join the still small PandaBoard community, joining the mailing list and IRC channel #pandaboard at FreeNode.
Happy hacking!
Ubuntu Maverick on ARM (Beta Released!)
For Maverick Meerkat we’re continuing improving the ARM support for Ubuntu. With Lucid we got the first release optimized for ARMv7 (Thumb2 and SoftFP but not NEON), and for Maverick the plan is to keep the same ARM optimizations as base, but improving board support and user experience.
Currently the main target boards are the ones based on OMAP 3 and OMAP 4, like:
– BeagleBoard (C4 preferred)
– BeagleBoard xM
– PandaBoard (still to be released)
The main decisions to support these boards are basically the upstream support, solid community around them, easy hardware access and CPU power (standard Ubuntu is quite heavy, so we need a good and powerful machine).
At the moment we already got a good support for them, and the Beta release is somehow usable already! There are some development on-going to have a full working 3D interface (unity) for OpenGL ES much the same way we have for normal OpenGL devices. The only bad thing is that currently most of the 3D drivers for ARM (if not all) are closed source, so the development is a little bit harder than the usual.
If you just got your BeagleBoard xM, or want to try Ubuntu on your C4, please give it a try. For Maverick the idea is to give the users a pre-installed image, that you just need to ‘dd’ to your SD card, boot and adjust the environment.
Here are the instructions needed to get Ubuntu up and running at your OMAP device: https://wiki.ubuntu.com/ARM/OMAPMaverickInstall
In case you don’t have any of these boards, but want to use Ubuntu with different devices remember you can always try to build a ‘rootfs’ with RootStock. You’ll only need a working and compatible kernel and boot-loader.
And please, in case of you find any bug, want to help testing and getting Ubuntu better on your ARM device, just poke us at #ubuntu-arm (freenode). We’ll for sure be happy to assist you with any problems you may find.
Note for Beagle xM users: in case you find that your Maverick Beta image doesn’t boot with your board, please check bug https://bugs.launchpad.net/bugs/628243. This means that you have a Numonyx memory chip, and unfortunately the fix didn’t make Beta. To work around it just mount the first partition of your SD card (after giving ‘dd’) and replace your MLO with http://people.canonical.com/~rsalveti/maverick/boot/xM/MLO. After this just umount the partition, put it at your board and boot it.
New Job
It’s been a while since I don’t post anything, and the main reason is that I just got a new job and I’ve being pretty busy with it
After working at INdT for more than 2 years, I decided that it was time to move on, get back to Campinas, get closer with friends and family and start looking for a new job.
I had a quite good time at Recife, working with Mamona, Maemo and MeeGo, mostly helping bring up different ARM platforms to be used by the Institute in many different projects. The work was nice, but Recife can be hard to get through over the time. I’ll for sure miss the nice work place we’ve built, and the nice people I worked with.
About the new job, I’m quite happy to announce that I’m now working as a Software Engineer at Canonical. My main objective now is to help bringing Ubuntu into different ARM platforms, like beagleboard and the new pandaboard.
Canonical is awesome, and the people from the Ubuntu Platform Team is even greater. Had the opportunity to meet most of the people at the last Ubuntu Platform Sprint that was held at Prague, and it was awesome to see so many skilled and fun guys working together to improve Ubuntu.
That’s it, now it’s time to get back to work because we have a huge pile of cool and fun things to work on
If you’re interested in understading, helping and participating on what we’re currently doing, get at #ubuntu-arm, freenode, and ping me (rsalveti)!
STE U8500
One of the latest board we’ve been playing with is the new STE U8500.
The U8500 is a smartphone platform created by ST-Ericsson, offering a dual ARMv7-A Cortex A9 core, with strong hardware decoding power and ARM Mali 400 GPU.
More about it’s features:
* Full HD 1080p camcorder, multiple codecs supported via OMX (H264 HP, VC-1, MPEG-4)
* High-resolution, touchscreen display support up to XGA
* Simultaneous dual display support
* High performance 3D graphics, support for OpenVG 1.1 and OpenGL ES 2.0
* Dual camera support with Integrated ISP 18 Mpixel and 5 Mpixel
* Wi-Fi, Bluetooth and GPS enabled platform
* Built-in USB 2.0, HDMI out
And technology:
* Highly efficient, low-power ARM dual Cortex™- A9 processor
* Dual multimedia DSP for low-power, flexible media processing
* High-bandwidth LP-DDR2 interface
* ARM Mali™ 400 GPU and NEON®CPU extensions
Now, about the things that interest me the most, the current status in Linux in general:
Kernel:
The kernel we’ve been working on is a vendor’s based one, using 2.6.29 as base. With this kernel we have many features implemented, like blitter support, framebuffer, hdmi output and many more.
At upstream side, the code is just starting to be merged, and you can see already some basic commits going on linux-2.6, like commits 1, 2, 3, 4 and 5. STE seems to be doing a great job on getting the changes upstream, since it’s the only feasible way to make it supported in mid, long term in linux. So expect more changes at 2.6.34 and 2.6.35.
U-Boot:
Similar with the kernel, we’re also using a custom vendor’s version. They’re just starting to make the support upstream, and you can find the patch series here.
Once we get the basic U-Boot and Linux support upstream, we can start working directly with mainline, fixing and improving it when needed.
Our work:
Since we got the board we’ve been playing on supporting many different Linux platforms, and optimizing the basic Linux OS core to be commonly used by different distros.
We started with Maemo 5, as a proof of concept, and we got it up and running with a very good performance and hopefully soon we’ll be able to share more details.
OE Angstrom/Mamona is very easy to support, since we just need to create the machine configuration and use the same compilers already used by other ARMv7 architectures.
Personally I started testing Ubuntu Lucid release, and just got the very basic support, with a custom and simple image. Ubuntu is now a very good option since it’s targeting ARMv7 platforms, with compiler optimizations and Thumb2 support. NEON support is not included by default, but you can support it by compiling specific components by hand. For more information please check at ubuntu wikipage.
Meego also boots and runs fine at this platform, but since it’s just a basic OS ATM (armv5 only), doesn’t have anything interesting to play with.
Besides platform support, we’ve been working on creating the hardware accelerated X server video driver, to use EXA, DRI2 and Xvideo with overlay. Once we get it all running we can easily use it in any Linux distro we want, and X we’ll be accelerated by default.
Now the important question, where’s the code?
STE still didn’t deliver the main software in public, so we can’t just release the Kernel, U-Boot and other development that requires support from these software components. But this is changing, and I believe that very soon we’ll be able to get most of the things in public, so others can download and test if needed.
In the next posts I’ll be showing more about the status of these distros on this hardware, also showing the performance and demonstrating it.
Board I’ve being playing on:
root ~# cat /proc/cpuinfo
Processor : ARMv7 Processor rev 1 (v7l)
processor : 0
BogoMIPS : 1199.30processor : 1
BogoMIPS : 1199.30Features : swp half thumb fastmult vfp edsp neon vfpv3
CPU implementer : 0×41
CPU architecture: 7
CPU variant : 0×1
CPU part : 0xc09
CPU revision : 1Hardware : ST Ericsson U8500 Platform
Revision : 0000
Serial : 0000000000000000
Links and videos about U8500:
* ST-Ericsson U8500
* ST-Ericsson U8500: PlayStation controller, PlayStation grap
* U8500 3D Video





