Ubuntu 12.04 ‘precise’ and cross compilation of ARM kernels

Over year ago I wrote How to cross compile ARM kernel under Ubuntu 10.10 and this became one of most popular posts on my website. It may work still but it is terribly outdated so I decided that it is a time for update.

Users of Ubuntu 12.04 ‘precise’ have much simpler situation when it comes to cross compilation of Linux kernels than ones who use older releases. Everything is now in distribution, we have a lot of packages converted to multiarch so instruction is much shorter.

There are few steps to cross compile Linux kernel under Ubuntu 12.04 ‘precise’ (for “armhf” which is officially supported now):

  • Install cross compiler:

apt-get install gcc-arm-linux-gnueabihf

  • Fetch kernel source:

apt-get source linux-source-3.2.0

  • Install packages required to build kernel:

apt-get build-dep linux-source-3.2.0

  • Build kernel:

cd linux-3.2.0; dpkg-buildpackage -b -aarmhf

And that’s all. Linaro kernels will be as easy to build as Ubuntu one on next days as we have to update packaging to recent Ubuntu version.

I joined MOTU team in Ubuntu

I applied for MOTU (Masters Of The Universe) membership few days ago and today during Developer Membership Board meeting my application was part of agenda.

Becoming MOTU is more complicated than gaining PPU (Per Package Upload) permissions which I got during UDS-O in Budapest. Members of board asked me many questions — it took 45 minutes to get from introduction to voting.

But this is how it should be done — MOTU is responsibility for quite big amount of packages in Ubuntu. Anyway, we got to voting:

15:57 < meetingology> Voting ended on: Should Marcin Juszkiewicz become MOTU? 15:57 < meetingology> Votes for:5 Votes against:0 Abstentions:0

And now I am proud member of MOTU team! Looks like next thing to apply for would be Debian Membership. I planned to do it in 2004 but OpenEmbedded took my attention 😉

Updated cross toolchain for Ubuntu

During last two weeks I was working on updating PPA with cross toolchain for Ubuntu. Current development branch (12.04 ‘precise’) got gcc 4.6.2 and 4.5.3, binutils 2.22, eglibc 2.15 and linux 3.2 headers.

Then I started work on getting those updates also for previous LTS (10.04 ‘lucid’) and for previous stable release (11.10 ‘oneiric’). Versions between those two (10.10 ‘maverick’ and 11.04 ‘natty’) are not supported but binaries built for ‘lucid’ should work just fine on them.

It is time-consuming cause I had to run many builds to make sure that everything is properly patched etc. I listed all required tasks in “Toolchain update for Linaro Toolchain Backports PPA for 12.03” blueprint on Launchpad. Most time-consuming is waiting for PPA builders but at that phase I was just checking did they finished already due to working on other projects.

So if you are stuck on one of released versions of Ubuntu and need fresh cross compiler targetting “armel” (there is no “armhf” for this PPA) consider using PPA with cross toolchain for Ubuntu.

And do not forget to report any bugs found to armel-cross-toolchain-base and gcc-4.6-armel-cross (or gcc-4.5-armel-cross if you use older one).

I am tired of Raspberry/Pi

Please people… stop asking me about Raspberry/Pi. I do not want it, do not plan to buy one (when they will be finally available for normal people) and for sure do not plan to support it.

Raspberry/Pi may look as interesting hardware to you but it does not have to mean same to others. Want to run desktop? 256MB of memory means really crippled one (last time I saw this amount of RAM in desktop computer right before opening it to add 512MB stick). Sure, for 25-35 USD it is proper range as memory is probably the most expensive part. Device may be good for using it in more embedded environment where GPIO/I²C/I²S/SPI/UART matter — expansion connector provides those signals.

But I would rather buy BeagleBone to play with peripherials connected to such pins. Someone may ask “why? it is more expensive”. Reason is simple — it is in production, already has expansions which adds things like video output, touchscreens. And it has ARMv7 cpu which allows me to run any ARM distribution available today — so Debian ‘armel/armhf’, Ubuntu, Fedora, OpenSUSE, Ångström (which is preinstalled with great IDE to play with device already) or anything other.

I do not need small device which can run XMBC or Quake — have private PandaBoard which can do that too and has few things more than Raspberry/Pi.

And I do not think that companies which do software should start working on <100USD hardware like article at Techblaze suggests.

SD cards die

So called ‘low cost’ developer boards (like BeagleBoard xM, PandaBoard, Snowball, MX53 Quick Start) do not have NAND flash on them so people are using SD/MMC cards as boot media and storage. So we, developers, went to shops and bought SD cards. Some got class4 ones cause budget was low already, some grabbed class10 ones hoping that they will be fast, other took class6.

I got some 4GB Transcend class10 ones. They worked, gave me 15MB/s on read and were fine. Until recently they started giving strange kernel output, MMC timeouts, I/O errors which resulted in filesystem going into read only mode. As I prefer to have working board then wondering how much time it will survive I trashed both cards. Good that I had some spare unknown 8GB microSD ones. But in last ~year I had to throw away 4 SD cards…

One of solution for it is moving rootfs to some more reliable storage. I did that with MX53 Quick Start — it has 320GB Serial-ATA harddrive connected. So for PandaBoards I could use 8-16GB thumb drives or USB connected hard drives. I had this in past when there was no mx53 hardware at my desk. But this means extra costs, additional cables, probably even another set of power cables…

Will have to check market for good reliable SD cards soon. 8-16GB ones so there will be space available for doing builds. Or will switch to old school NFS root which requires only 64MB cards — just to load bootloader, kernel, initrd. Other option is a network storage like NBD, AoE or iSCSI but this requires more configuration.