Linux init failures now easier to debug

If you are an embedded Linux developer too, you have probably been frustrated by the lack of information from the Linux kernel when it failed to start the init process when you’re building a new root filesystem. The only thing you get is No init found, and this could hide many different causes:

  • No init program candidate found at all
  • Some init program candidates exist but they can’t be executed, for multiple possible causes (missing execute permissions, failed to load shared libraries, executable compiled for an unknown architecture…)

The good news is that this source of frustration will be gone in Linux 3.13. Thanks to a Bootlin commit merged on Nov. 13, 2013, whenever an attempt to execute an init program candidate fails, there is a message in the console detailing the executable path and the error code. For example:

Starting init: /sbin/init exists but couldn't execute it (error -13)

When you get such a message, all you have to do is lookup the error code in include/uapi/asm-generic/errno-base.h or maybe in uapi/asm-generic/errno.h. In the above example, the -13 code meant permission denied, typically because of missing execution rights.

This had been annoying me for a long time, and I am glad that the Linux kernel community accepted my improvement!

By the way, many more improvements to the Linux kernel from Bootlin are currently getting merged in 3.13. See all our contributions to the Linux kernel.

Videos and slides of the Kernel Recipes 2013 conference

Kernel Recipes LogoAs we mentionned earlier on this blog, Bootlin participated to the second edition of the Kernel Recipes conference in Paris, a two-days conference dedicated to kernel topics.

The videos and slides of the talks in this conference have now been published, see https://kernel-recipes.org/en/2013/conferences/ for the complete list. There is a good number of interesting topics: discussion about kernel development environment by Willy Tarreau, status of Nftables and Netfilter in general by Eric Leblond, a talk explaning how to decipher kernel oopses, a talk about Crosstool-NG from Yann E. Morin, a discussion about Linux Security Modules, a talk about the status of Display support in the kernel by Laurent Pinchart, and several lightning talks.

The talks from Bootlin were:

Bootlin really enjoyed this conference, and is looking forward to participating again next year. Thanks a lot to the organizers!

Linux 3.12 released, Bootlin 14th contributor by number of commits

Emperor penguins pictureThe 3.12 kernel has just been released by Linus Torvalds, who summarized what he considers to be the major improvements offered by this release: improvements to the dynamic tick code, support infrastructure for DRM render nodes, TSO sizing and the FQ scheduler in the network layer, support for user namespaces in the XFS filesystem, multithreaded RAID5 in the MD subsystem, offline data deduplication in the Btrfs filesystem.

As usual, Bootlin contributed to the Linux kernel during this cycle, and according to the statistics at KPS, Bootlin is the 14th contributor in terms of number of commits, as a company. Bootlin contributed 185 patches to this kernel release, on a total of 10920 patches. Note that this classification includes the “Unknown” company which ranks first, gathering the contributions from all the contributors that are not known to be affiliated to any company.

The highlights of our contributions are:

  • Addition of support for the HX8369 LCD controller to the driver we had contributed earlier for the HX8357 LCD controller, in drivers/video/backlight/hx8357.c. These LCD controllers are used by the Crystalfontz i.MX28 boards, and this new development was done primarily by Alexandre Belloni.
  • Addition of a driver for the Nuvoton NAU7802 ADC chip on I2C, in drivers/iio/adc/nau7802.c. Some initial work was done by Maxime Ripard, but lots of debugging and additional work was done by Alexandre Belloni, who also pushed the driver to the mainline.
  • Added Device Tree information for the PMU unit on Atmel SAMA5D3 platforms, which allows to use perf on these platforms. Done by Alexandre Belloni.
  • Addition of a Device Tree binding to the mvebu-mbus driver, which controls the configuration of the MBus on Marvell EBU platforms (Armada 370/XP, Kirkwood, Dove, etc.). This binding took a lot of discussion time, and many iterations before reaching a state that was considered acceptable for mainline, but it has finally been merged in 3.12. The core of this work was done by Ezequiel Garcia, with several contributions from Thomas Petazzoni to convert existing platforms to the new APIs.
  • Many cleanups and improvements to the nand_pxa3xx driver, which for the moment is used for the NAND controller on PXA3xx, but that we are currently extending to also cover the NAND controller of Armada 370/XP platforms. In 3.12, only some cleanups have been integrated, and we are currently submitting the more important patches for mainline integration. This work was done by Ezequiel Garcia.
  • Cleanups, and conversion to CLOCKSOURCE_OF_DECLARE of the Armada 370/XP clocksource driver. Done by Ezequiel Garcia.
  • Extension of the Marvell I2C driver to use a new feature of the I2C controller found on Armada 370/XP, which allows to program an entire transaction at once, instead of having interrupts at each step of the transaction. This work was done by Gregory Clement.
  • The quest of removing unneeded ->init_irq() callbacks in machine descriptors continued, with Maxime Ripard removing 4 additional occurrences of this in mach-shmobile.
  • Cleanups and improvements to the sun4i clocksource driver, used on Allwinner SOCs. Done by Maxime Ripard.
  • Introduction of the initial support for the Allwinner A31 SOC and its WITS Columbus evaluation kit, as well as initial support for the Allwinner A20 SOC and the Olimex A20-Olinuxino-Micro and Cubieboard2 board, both based on the Allwinner A20 SOC. This includes clock support, pinctrl support, Ethernet support where applicable, and more. Work done by Maxime Ripard.
  • Michael Opdenacker continued his fight against IRQF_DISABLED and removed more occurrences of them. Michael also fixed a few issues in some Kconfig files.
  • Fixed big-endian issues in the Marvell mvneta Ethernet driver and the Marvell XOR driver, in preparation for the addition of big-endian support to the mach-mvebu platform. Done by Thomas Petazzoni.
  • Conversion of a few more Kirkwood platforms to the Device Tree, and removal of legacy support for other Kirkwood platforms that were already converted to the Device Tree. Done by Thomas Petazzoni.
  • Addition of the support for the Armada XP based AXP-WiFi AP board, from Marvell. Done by Thomas Petazzoni.
  • Improvements of the MSI infrastructure in the kernel: consolidation of code between architectures, addition of a registry of msi_chip. This preparatory work was needed to introduce MSI support for Armada 370/XP, which should hopefully make its way into 3.13. Work done by Thomas Petazzoni.

In details, our contributions were:

Videos from Embedded Linux Conference 2013

San FranciscoBetter late than never: we are finally publishing a set of videos of 24 talks from the last Embedded Linux Conference, which took place earlier this year in San Francisco, California. These videos are coming in addition to the videos that the Linux Foundation had posted from this conference on video.linux.com.

Our videos are the ones from other talks, covering topics such as I2C, the BeagleBone, the Common Display Framework, Kernel debugging, Memory management in the kernel, usage of SPDX in Yocto, the SCHED_DEADLINE scheduler, the management of ARM SoC support in the kernel, real-time, kernel testing, and more. We’re also including below the full set of videos from the Linux Foundation, so that this page nicely gives links to all the videos from Embedded Linux Conference 2013.

Our videos

David AndersVideo capture
Texas Instruments
Board Bringup: You, Me and I2C
Slides
Video (38 minutes):
full HD (269M), 800×450 (151M)

Jayneil DalalVideo capture
Texas Instruments
Beaglebone Hands-On Tutorial
Slides
Video (66 minutes):
full HD (444M), 800×450 (249M)

Jesse BarkerVideo capture
Linaro
Common Display Framework BoF
Video (113 minutes):
full HD (761M), 800×450 (389M)

Alison ChaikenVideo capture
Mentor Embedded Software Division
Embedded Linux Takes on the Hard Problems of Automotive
Slides
Video (54 minutes):
full HD (359M), 800×450 (152M)

Kevin ChalmersVideo capture
Texas Instruments
RFC: Obtaining Management Buy-in for Mainline Development
Slides
Video (36 minutes):
full HD (253M), 800×450 (140M)

Michael ChristoffersonVideo capture
Enea
Yocto Meta-Virtualization Layer Project
Slides
Video (47 minutes):
full HD (330M), 800×450 (187M)

Kevin DankwardtVideo capture
K Computing
Survey of Linux Kernel Debugging Techniques
Slides
Video (50 minutes):
full HD (350M), 800×450 (206M)

Ezequiel Alfredo GarciaVideo capture
VanguardiaSur
Kernel Dynamic Memory Allocation Tracking and Reduction
Slides
Video (56 minutes):
full HD (398M), 800×450 (235M)

Christopher FriedtVideo capture
Research In Motion
Gentoo-Bionic: We Can Rebuild Him. Better. Stronger. Faster.
Slides
Video (39 minutes):
full HD (272M), 800×450 (154M)

Gregoire GentilVideo capture
Always Innovating
Lessons Learned in Designing a Self-Video, Self-Hovering Nano Copter
Video (56 minutes):
full HD (391M), 800×450 (225M)

Mark Gisi, Mark HatleVideo capture
Wind River Systems
Leveraging SPDX with Yocto
Video (53 minutes):
full HD (376M), 800×450 (204M)

Yoshitake KobayashiVideo capture
TOSHIBA Corporation
Deadline Miss Detection with SCHED_DEADLINE
Slides
Video (38 minutes):
full HD (274M), 800×450 (158M)

Tetsuyuki KobayashiVideo capture
Kiyoto Microcomputer
Tips of Malloc and Free
Slides
Video (39 minutes):
full HD (277M), 800×450 (163M)

Tristan LelongVideo capture
Adeneo Embedded
Debugging on a Production System
Slides
Video (51 minutes):
full HD (354M), 800×450 (195M)

Noor UI MubeenVideo capture
Intel Technology India Pvt Ltd
Making Gadgets Really “cool”
Slides
Video (45 minutes):
full HD (298M), 800×450 (122M)

Hisao MunakataVideo capture
Renesas Electronics
How to Cook the LTSI Kernel with Yocto Recipe
Slides
Video (42 minutes):
full HD (295M), 800×450 (166M)

Olof JohanssonVideo capture
Google
Anatomy of the arm-soc git tree
Slides
Video (50 minutes):
full HD (348M), 800×450 (192M)

Mark OrvekVideo capture
Linaro
Application Diversity Demands Accelerated Linux Innovation
Slides
Video (38 minutes):
full HD (273M), 800×450 (158M)

Thomas PetazzoniVideo capture
Bootlin
Your New ARM SoC Linux Support Checklist!
Slides
Video (60 minutes):
full HD (418M), 800×450 (231M)

Matt PorterVideo capture
Texas Instruments, Inc.
Kernel Testing Tools and Techniques
Slides
Video (60 minutes):
full HD (405M), 800×450 (230M)

Brent RomanVideo capture
Monterey Bay Aquarium Research Institute
Making Linux do Hard Real-Time
Slides
Video (24 minutes):
full HD (173M), 800×450 (101M)

Mans RullgardVideo capture
ARM/Linaro
Designing for Optimisation
Slides
Video (50 minutes):
full HD (353M), 800×450 (202M)

Chris SimmondsVideo capture
2net Limited
The End of Embedded Linux (as we know it)
Video (46 minutes):
full HD (293M), 800×450 (137M)

Hunyue YauVideo capture
HY Research LLC
uCLinux for Custom Mobile Devices
Slides
Video (40 minutes):
full HD (283M), 800×450 (151M)

Linux Foundation videos

Joo-Young HwangVideo capture
Samsung Electronics Co., Ltd.
F2FS, Flash-Friendly File System
Slides
Video : on video.linux.com

Linus WalleijVideo capture
ST-Ericsson
Pin Control and GPIO Update
Slides
Video : on video.linux.com

Mark GrossVideo capture
Intel
The ‘Embedded Problem’ as Experienced by Intel’s Reference Phones

Video : on video.linux.com

Gap-Joo NaVideo capture
Electronics and Telecommunications Research Institute (ETRI)
Task Scheduling for Multicore Embedded Devices
Slides
Video : on video.linux.com

Joel FernandesVideo capture
Texas Instruments, Inc
FIT Image Format: Inspired by Kernel’s Device Tree
Slides
Video : on video.linux.com

Steven RostedtVideo capture
Red Hat
Understanding PREEMPT_RT (The Real-Time Patch)
Slides
Video : on video.linux.com

Ruud DerwigVideo capture
Synopsys
Using GStreamer for Seamless Off-loading Audio Processing to a DSP
Slides
Video : on video.linux.com

Rob LandleyVideo capture
Multicelluar
Toybox: Writing a new Linux Command Line from Scratch
Slides
Video : on video.linux.com

Denys DmytriyenkoVideo capture
Texas Instruments
Pre-built Binary Toolchains in Yocto Project
Slides
Video : on video.linux.com

Anna DushistovaVideo capture
Me, Myself and I
Target Communication Framework: One Link to Rule Them All
Slides
Video : on video.linux.com

Jim HuangVideo capture
0xlab
olibc: Another C Runtime Library for Embedded Linux
Slides
Video : on video.linux.com

Jake EdgeVideo capture
LWN.net
Namespaces for Security
Slides
Video : on video.linux.com

Beth FlanaganVideo capture
Intel
Listening to your Users: Refactoring the Yocto Project Autobuilder

Video : on video.linux.com

Katsuya MatsubaraVideo capture
– , IGEL Co., Ltd.
Optimizing GStreamer Video Plugins: A Case Study with Renesas SoC Platform
Slides
Video : on video.linux.com

Behan WebsterVideo capture
Converse in Code Inc
LLVMLinux: Compiling the Linux Kernel with LLVM
Slides
Video : on video.linux.com

Jim Zemlin, George GreyVideo capture
The Linux Foundation, Linaro
Working Together to Accelerate Linux Development

Video : on video.linux.com

Andrew ChathamVideo capture
Google
Google’s Self-Driving Cars: The Technology, Capabilities & Challenges
Video : on video.linux.com

Laurent PinchartVideo capture
Ideas on board SPRL
Anatomy of an Embedded KMS Driver
Slides
Video : on video.linux.com

Scott GarmanVideo capture
Intel Open Source Technology Center
Atom for Embedded Linux Hackers and the DIY Community
Video : on video.linux.com

Mike AndersonVideo capture
The PTR Group, Inc.
Controlling Multi-Core Race Conditions on Linux/Android
Video : on video.linux.com

Tracey Erway, Nithya RuffVideo capture
Intel Corporation, Synopsys
Can You Market an Open Source Project?
Video : on video.linux.com

Dave StewartVideo capture
Intel
Code Sweat: Embed with Nightmares
Video : on video.linux.com

Gregory ClementVideo capture
Bootlin
Common Clock Framework: How to Use It
Slides
Video : on video.linux.com

Sean HudsonVideo capture
Mentor Graphics
Building a Custom Linux Distribution with the Yocto Project
Slides
Video : on video.linux.com

Tzugikazu SHibataVideo capture
NEC
How to Decide the Linux Kernel Version for the Embedded Products to Keep Maintaining Long Term
Slides
Video : on video.linux.com

Mathieu PoirerVideo capture
Linaro
In Kernel Switcher: A Solution to Support ARM’s New big.LITTLE implementation
Slides
Video : on video.linux.com

Russell DillVideo capture
Texas Instruments
Extending the swsusp Hibernation Framework to ARM
Slides
Video : on video.linux.com

John MehaffeyVideo capture
Mentor Graphics
Security Best Practices for Embedded Systems
Slides
Video : on video.linux.com

Leandro PereiraVideo capture
ProFUSION Embedded System
EasyUI: No Nonsense Mobile Application Development with EFL

Video : on video.linux.com

Khem RajVideo capture
OpenEmbedded
Bringing kconfig to EGLIBC
Slides
Video : on video.linux.com

Aaditya KumarVideo capture
Sony India Software Centre Pvt Lltd
An Insight into the Advanced XIP Filesystem (AXFS)
Slides
Video : on video.linux.com

Pantelis AntoniouVideo capture
Antoniou Consulting
Adventures in (simulated) Assymmetric Scheduling
Slides
Video : on video.linux.com

Mike Anderson, The PTR group; Zach Pfeffer, Linaro; Tim Bird, Sony Network Entertainment; David Stewart, Intel; Karim Yaghmour, Opersys (Moderator)Video capture

Is Android the new Embedded Linux

Video : on video.linux.com

George Grey, CEO, Linaro, Jim Zemlin, Executive Director, The Linux FoundationVideo capture

Working Together to Accelerate Linux Development

Video : on video.linux.com

Frank RowandVideo capture
Sony Network Entertainment
Using and Understanding the Real-Time Cyclictest Benchmark
Slides
Video : on video.linux.com

Increasing activity in the Buildroot community

In the recent times, the Buildroot project has seen a particular high level of activity, with a significant number of new contributors and contributions. It is an interesting opportunity to have a look at some statistics of the project activity in the last years: they show that the Buildroot project is really active, and in rapid development.

First, a look at the number of commits per month is an obvious way of looking at the activity of an open-source project. For two years, the project has seen each month at least 150 commits, and since for the last year, most of the months have seen between 300 and 400 commits.

Buildroot activity in commits

Another interesting data point is that this increasing number of commits is not only due to an increasing effort from the existing core developers, but rather due to an increasing number of contributors. The following graph, which displays the number of unique contributors having had patches merged each month, clearly shows that the Buildroot community is growing. From an average of 10-15 contributors per month a few years back, the project is now having between 30 and 40 unique contributors each month.

Number of Buildroot contributors

The mailing list activity also nicely reflects this increasing activity: it is now receiving almost each month between 1500 and 2000 e-mails, which means between 50 and 65 e-mails per day, and it starts to be difficult to read everything!

Number of Buildroot mailing list posts

Finally, the number of packages has also increased progressively over the last two years. As can be seen on the graph below, the period 2008 → 2011 hasn’t seen a big increase in the number of packages, as it was a period mainly focused on refactoring and cleanup work. After this cleanup work, it seems that Buildroot has started gaining in popularity, and more work was done to add more packages for various useful open-source components in embedded systems. Since 2011, the number of packages has been growing regularly, starting from less than 700 in 2011 to reach almost 1200 packages today.

Number of Buildroot packages

All in all, those four graphs clearly show a nice increase of activity within the Buildroot project, which is really cool!

Some notes on how the data was computed:

  • The number of commits per month was obtained by doing a git log --pretty=online --since=yyyy-mm-dd --until=yyyy-mm-dd | wc -l for each month.
  • The number of contributors was obtained by doing a git shortlog -sn --since=yyyy-mm-dd --until=yyyy-mm-dd | wc -l for each month.
  • The e-mail statistics were obtained by looking at the number of messages displayed in the HTML archives, per month, as in http://lists.busybox.net/pipermail/buildroot/2013-August/thread.html.
  • The number of packages was computed using an approximate method, that consists in counting the number of .mk files in Buildroot (a few .mk files are not packages, but the vast majority of them are). The exact command used was git checkout -q $(git rev-list -n 1 --before=2013-08-01 master) && find . -name '*.mk' | wc -l.

Crystalfontz boards support in Yocto

The Yocto 1.5 release is approaching and the Freescale layer trees are now frozen.
Bootlin added support for the various Crystalfontz boards to that release as you can check on the OpenEmbedded metadata index.

Yocto Project

First some preparative work has been done in the meta-fsl-arm layer in order to add the required features to generate an image able to boot on the Crystalfontz boards:

  • Support for a newer version of the Barebox mainline, 2013.08.0. As the previously supported version of Barebox was too old, it didn’t include support for the Crystalfontz boards. Also, some work has been done to make the recipe itself more generic so that custom layers can reuse it more easily.
  • Inclusion of the patches allowing the imx-bootlets to boot Barebox. The imx-bootlets were only able to boot U-Boot or the Linux kernel until now.
  • Creation of a new image type, using the imx-bootlets, then Barebox to boot the Linux kernel. All the boards based on a Freescale mxs SoC (i.mx23 and i.mx28) will benefit of this new image type. This is actually the difficult part where you lay out the compiled binaries (bootloaders, kernel and root filesystem) in the final file that is an SD card image ready to be flashed.

Then, the recipes for the Crystalfontz boards have been added to the meta-fsl-arm-extra layer:

  • First the bootloaders, imx-bootlets and Barebox, including the specific patches and configurations for the Crystalfontz boards.
  • Then the kernel. The linux-cfa recipe uses the 3.10 based kernel available on github.
  • The machine configurations themselves, selecting Barebox as the bootloader and the correct kernel recipe. Also, these are choosing to install the kernel in the root filesystem instead of in its own partition.
  • Touchscreen calibration for the cfa-10057 and the cfa-10058 boards. This is required to get xinput-calibrator working properly as it can’t calibrate without starting values.

In a nut shell, you can now use the following commands to get a working image for your particular Crystalfontz board:

  • For your convenience, Freescale is providing a repo manifest to retrieve all the necessary git repositories. So first download and install repo:
    mkdir ~/bin
    curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
    chmod a+x ~/bin/repo
    PATH=${PATH}:~/bin
  • We will work in a directory named fsl-community-bsp:
    mkdir fsl-community-bsp
    cd fsl-community-bsp
  • Ask repo to get the master branch, when Yocto 1.5 is released, you could select the new branch. (Edit: starting from September, 28th, you can use the branch named dora)
    repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b master
  • Download the layers:
    repo sync
  • Configure the build for cfa-10036:
    MACHINE=cfa10036 source ./setup-environment build
  • Start the build with:
    bitbake core-image-minimal
  • Grab a cup of coffee!

You’ll end up with an image that you can flash using the following command:
sudo dd if=tmp/deploy/images/cfa10036/core-image-minimal-cfa10036.sdcard of=/dev/mmcblk0

Obviously, you need to replace cfa10036 by the board model you are using in the above commands. While not completely perfect, core-image-sato is also working.

In detail, the contributions from Bootlin are:

Embedded Linux and kernel engineer job openings

Bootlin team

We’re getting busier than ever! Bootlin is looking for developers:

  • With experience developing embedded Linux systems
  • With experience developing device drivers for the Linux kernel, and porting Linux on new hardware. See our contributions to the mainline Linux kernel!
  • With technical writing skills and an interest for training

We need to fill at least 2 open positions in the next months, and more will follow in 2014.

Newly graduated engineers are welcome too, provided they already have experience in the above technical fields or with Free Software development.

This time, we are looking for people who will be able to join one of our offices in France (Toulouse or Avignon), to strengthen our engineering teams there.

  • Toulouse is a dynamic city with lots of high-tech and embedded systems companies in particular. Our office in Colomiers can easily be reached by train from downtown Toulouse if you wish to settle there. You would be working with Maxime Ripard and our CTO Thomas Petazzoni.
  • Our main office is settled in Orange in the heart of the Provence region, close to Avignon, a smaller but dynamic city too. It enjoys a sunny climate and the proximity of the Alps and the Mediterranean sea. Accommodation is very affordable and there are no traffic issues! You would be working with our founder Michael Opdenacker and of course remotely with the rest of the engineering team. In particular, we are interested in foreign engineers who could help us develop our services in their home countries.

If you are unable to relocate this time, don’t hesitate to contact us anyway. Depending on your profile and experience, we are still planning to open home based jobs in a few months or years from now.

If you are interested in these positions, here are nice opportunities to meet us in the next weeks:

See a full description and details about how to contact us.

Bootlin at the ARM Kernel Summit, the Embedded Linux Conference and the Buildroot Developers Meeting

Late october will be a busy moment for all the embedded Linux developers meeting in Edinburgh, UK. The Linux Foundation is organizing a number of conferences here, including the Embedded Linux Conference Europe (October 24-25) and LinuxCon Europe (October 21-23), and many co-located other events.

Bootlin will be present at several of these events:

  • First, three Bootlin engineers will be present at the ARM kernel summit on October 22nd and 23rd. The ARM kernel summit is an invitation-only conference, organized in relation with the Linux Kernel Summit. Gregory Clement, Maxime Ripard and Thomas Petazzoni, engineers at Bootlin have been invited due to their participation to the ARM support in the kernel, mainly on Allwinner SOCs for Maxime and on Marvell SOCs for Gregory and Thomas. Being present at this event is an excellent opportunity to be part of the discussion that shapes the future of ARM support in Linux, and strengthen our relations with other members of this growing community.
  • Then, the entire technical team of Bootlin will attend the Embedded Linux Conference, on October 24th and 25th. Several talks will also be given by Bootlin engineers:
    • On Thursday, 24th October at 11:40 AM, Thomas Petazzoni will give a talk titled Device Tree for dummies!, which will give an introduction to the Device Tree on ARM: what it is, how it is compiled, how it used by the kernel, how Device Tree bindings are defined, how drivers are affected by the Device Tree, etc.
    • At the same time in another room, Michael Opdenacker will lead a Bird of a Feather session dedicated to Small Businesses in the embedded Linux world. Exchanging experiences, networking with other companies working in the same field, etc.
    • Still on Thursday, at 3 PM, Gregory Clement will give a talk on the Linux kernel Common Clock Framework, which will be an updated version of the talk he gave at ELC earlier this year.
    • On Friday, 25th October at 9:30 AM, Thomas Petazzoni will be part of the keynote panel session dedicated to a discussion on Embedded Linux build systems together with Tim Bird (Sony Mobile), Ross Burton (Intel), and Karim Yaghmour (Opersys), the panel being moderated by Jeff Osier-Mixon (Intel).
  • On Saturday 26th and Sunday 27th October, the Buildroot community is organizing its traditional Developers Meeting, to which Thomas Petazzoni will participate. Some of the core Buildroot developers will join for two days of discussion and work to improve this embedded Linux build system.

As you can see, this will be a very interesting and busy week, and we’re all looking forward to meeting more embedded Linux developers and learning about the latest technologies in this field.

Buildroot 2013.08 released, new features and contributions from Bootlin

Buildroot logoThe 2013.08 release of Buildroot has been published a few days ago by Peter Korsgaard, the project maintainer. As usual, this release contains a number of improvements and new features that are summarized in Peter’s release e-mail, and also visible in the CHANGES file.

On a total of 744 commits merged for this release, Bootlin has contributed 141 patches, focusing on the following main improvements:

  • Conversion of the “internal toolchain back-end” of Buildroot to use the package infrastructure. The internal toolchain back-end is the piece of code in Buildroot that is responsible for building a cross-compilation toolchain (i.e building binutils, gcc, the C library, gdb and the necessary dependencies). Until now, this code was using some basic makefiles, many of which dating from many years back in the history of Buildroot. By converting this piece of code to use normal Buildroot packages, it is now easier to maintain and extend. It is worth noting that the internal toolchain back-end is only one of the two back-ends of Buildroot in terms of toolchains: it can also use pre-built external toolchains.
  • Thanks to the clean up highlighted above, we have added eglibc support to the internal toolchain back-end. Until now, using eglibc or glibc was only possible using pre-built external toolchains. Now, Buildroot is directly capable of building eglibc-based toolchains, in addition to the uClibc library which has been supported for many years by Buildroot. Note that we have already posted patches that also add glibc support, they should hopefully be included for the next release, 2013.11.
  • Vast improvements in the way Buildroot supports the various floating point possibilities on ARM: we’ve added support for the EABIhf ABI, improved how the various floating point units can be selected, etc. Selecting the right floating point solution for your embedded Linux system should now be a lot easier.
  • Support to build a system using the Thumb2 instruction set available on ARM, which provides a smaller code size compared to the classical ARM instruction set.
  • Updates to the available external toolchains: addition of the Arago ARMv5 and ARMv7 toolchains, and update the versions of the available Linaro toolchains for ARM and AArch64.
  • Addition of packages to support the video decoding hardware of some AT91 SoCs, the Hantro x170.

Moreover, in the absence of the official maintainer Peter Korsgaard, Thomas Petazzoni has played the role of interim maintainer during approximately one month, and has handled the first two release candidates of the 2013.08 cycle.

Last but not least, Thomas has also been the mentor of Spenser Gilliland, a student working on Buildroot as part of the Google Summer of Code. His work consists in improving support for ARM multimedia features in Buildroot, and a part of his work went into the 2013.08 release:

  • Addition of a libvpx package
  • Addition of a libopenmax virtual package to support various OpenMAX implementations
  • A complete bump of the Glib/Gtk stack
  • The addition of GStreamer 1.x support (Buildroot already had support for GStreamer 0.10.x, but not the more recent 1.x)
  • Addition of the gst-omx package which allows accelerated video decoding on the Raspberry Pi board thanks to an OpenMAX specific implementation
  • Addition of a ti-gfx package that allows to support OpenGL on TI OMAP platforms, it has been successfully tested with the BeagleBoard XM
  • Addition of the sunxi-mali package to support OpenGL on Allwinner SOCs, and the sunxi-cedarx package to support accelerated video decoding on Allwinner SOCs

The Google Summer of Code is still on-going until the end of September, and Spenser has already posted patches to improve support for Mesa3D, libdrm and the addition of the glmark2 OpenGL benchmark. Those improvements will hopefully be part of the next 2013.11 release.

In detail, the contributions from Bootlin for this release have been:

Bootlin the top #18 contributor to the 3.11 kernel

The 3.11 Linux kernel has now been released by Linus Torvalds, and as usual as thousands of patches coming from a large number of companies and contributors. For this release, Bootlin has contributed a total of 128 patches (yes, exactly 2^7), which makes Bootlin the 18th contributor in the list of companies contributing to the kernel, according to http://www.remword.com/kps_result/3.11_whole.html, before Broadcom and Cisco, and after ARM and Oracle. It is also the first time that six different engineers from Bootlin contribute code to the Linux kernel in a single release!

As usual, most of our contributions were centered around support for the Marvell Armada 370 and XP SOCs, the Allwinner SOCs and the Crystalfontz i.MX28 platforms:

  • Added support for the PCIe controllers of the Armada 370 and Armada XP platforms, and used it for the already supported Kirkwood platform. Supporting PCIe has been a very long process, which got started in December 2012, required long discussions with various kernel maintainers and multiple iterations of the patch series. Armada 370/XP was the first ARM platform to add Device Tree based PCIe support, and therefore this required many discussions to sort out the Device Tree bindings for PCIe controllers. This work was done by Thomas Petazzoni.
  • Enable an additional USB interface on the OpenBlocks AX3 platform, which is available as part of the mini-PCIe connector inside the device. This work was done by Thomas Petazzoni.
  • Cleaned up all the Kirkwood platform Device Tree files to assign the pin muxing configurations to the appropriate devices. This work was done by Thomas Petazzoni.
  • Made various cleanups and improvements in the Armada 370/XP platform code (in arch/arm/mach-mvebu) to make it possible to support different base address for the internal registers depending on the board being used. Many hardcoded physical addresses were removed, as well as the static virtual to physical mapping. This work was done by Thomas Petazzoni.
  • Cleaned up many ARM platforms to remove their unneeded ->init_irq() callback, and also the ->map_io() callback which we changed to default to calling debug_ll_io_init() when not provided. This work was done by Maxime Ripard.
  • Extended the ssd1307fb driver that we contributed a few releases ago to also support the SSD1306 device. The SSD1306 and SSD1307 are OLED screens controlled over I2C that are used on Crystalfontz i.MX28 platforms. We also optimized significantly the communication with the SSD130x devices. This work was done by Maxime Ripard.
  • Added an Ethernet driver for the Allwinner SOCs. The work was initially done by Stefan Roese, and our engineer Maxime Ripard did all the final cleanup, development of an MDIO driver, and integration with all the Device Tree files of the Allwinner platforms.
  • Added support for the Allwinner I2C controller, by re-using and extending the existing i2c-mv64xxx driver used on Marvell platforms, since the hardware block was very similar. The Allwinner Device Tree files were also updated to add the I2C controllers. This work was done by Maxime Ripard.
  • Added basic support for the Allwinner A10s SOC: pin muxing information and Device Tree information. This work was done by Maxime Ripard.
  • Added support for the Olimex A10s-Olinuxino-micro, a new hardware platform manufactured by Olimex that uses the Allwinner A10s SOC. This work was done by Maxime Ripard.
  • Implemented a “Device Bus” driver for the Marvell SOCs, that allows to configure the access to NOR flash and other devices connected to the memory bus. It has been used to enabled NOR support on the Armada XP DB development platform. This work was done by Ezequiel Garcia.
  • Fixed a few bugs in the IIO subsystem, and a build failure on AT91 platform when CONFIG_PHYLIB was not enabled. This work was done by Alexandre Belloni.
  • Fixed the ARM low-level code that handles compatibility with ATAG bootloaders, to properly convert 32 bits memory sizes passed by the bootloader into 64 bits cells of the Device Tree, when LPAE is used. This work was done by Gregory Clement.
  • Michael Opdenacker made a few improvements and fixes to the documentation.

For the upcoming 3.12, we already have 131 patches lined up, and a few more will probably show up after this blog post is written. Over the last release cycles, Bootlin has become a regular contributor to ARM support in the Linux kernel, and we’re looking forward to doing more contributions in the future.

The details of our 3.11 contributions is: