In the past, my choice fell on OpenEmbedded (OE) and deservedly; it is one of the best build systems. I did not consciously approach the choice at that time and wanted to correct it, so I decided to look at the current decisions.
The thought would not have occurred to me if the Raspberry Pi (RPi) board was not at hand, the popularity of which goes off-scale - this means one thing: trying new assembly systems should be easier than ever.
Looking ahead, I want to say that I wanted to choose an assembly system for any board, whether it’s RPi or not - it’s not important and I was pleasantly surprised by the number of solutions that have already been made for this board.
')
Motive
About two or three years ago, my main and only build system was
OpenEmbedded , so it turned out that there was no need to try something else. I just decided that it is better to study one system well and the fact that it is popular is only a plus, rather than go the other way and try as many build systems as possible.
My opinion now is that at that time I didn’t have a debugging board for which there were solutions for other build systems. But there were no such solutions as
RPi , but I’m cunning - there was a
BeagleBoard board, but if you choose now, RPi is much cheaper.
Therefore, starting all over again, I wanted to try to approach the choice of assembly systems more consciously and at the same time to see if something had changed. (and really changed)
The goal of this article is to introduce very briefly the assembly systems and give the most working instructions to avoid a bad impression.
I gave a brief excerpt about all the impressions in the section “Conclusion”, so you can safely go there if you do not want to waste your time on assembling images.
Why do you need it
Suppose you want to build your image for RPi and are faced with the choice of how to do it (the
image is GNU / Linux based firmware for the debugging board) and you do not know where to start.
Here you will find a way to do it, but not one, but 6 at once, because I managed to try so many assembly systems.
Who is this article useful for?
This article is intended for a person who understands the Linux-a command line, since All examples considered in it were checked under Arch Linux x84_64, which means that they most likely will work for you too.
He will also have to install the missing packages and programs needed for the build system that he chooses through the application manager of his system. This step is very simple, because almost every build system itself indicates which program is not installed.
The rest of the article provides simple instructions for assembling, gives a list of solutions to the problems that have appeared.
And of course, do not forget that the article is designed for RPi.
Criteria
I have several criteria for the build system:
- I have to like her
- It should work under GNU / Linux.
- It should be comfortable
I will explain them:
Like, the system that I want to use and a year and two and 5 +. And if there is no support for my debug board, then I’ll add it with pleasure.
My main system is Arch Linux x86_64.
Convenience is the availability of documentation, performance, i.e. it is convenient to work with her.
List of build systems
I already knew several build systems, such as OpenEmbedded and PTXdist, the search gave me a few more, but later I took the list
here :
- Openbricks
- LTIB
- PTXdist
- Yocto Project / OpenEmbedded
- OpenWRT / BuildRoot
The list is compiled from the least to the most liked system.
Observations in difference assemblies
- Each build system has its own way or script to load the image.
- Each assembly system has been created, by any particular organization, for its own needs.
- You can observe how the instructions change as you move from one system to another, the latter seem to me almost perfect.
Assembly systems
Highlights
Before proceeding to the assemblies themselves, here I will describe the main points that were used in the preparation of the description.
- Each system description contains a separate section with errors that occurred to me when executing instructions to leave instructions in a simple and understandable form.
- Each description contains a section with links used resources in the article.
- Each description contains a section with “About the System”, where he tried to give his own idea of ​​the system and share his impression of use. Full description of the system itself can be found on the corresponding site.
- In the instructions there is a variable SANDBOX, entered it to simplify the recording of instructions, points to any directory you choose
- Did not begin to consider the lack of packages required for assembly. (such as gcc, git, etc.)
Openbricks
About the system
This is the build system used by the
GeeXBox project - a Linux distribution with a media center.
For me, it turned out to be the most difficult to use, because there are no instructions for assembling as such, there is a very simple description and it does not work, but I managed to figure out and build the image and it started, but ... gave an error.
But, you can try already collected images on the project page (see links)
Instructions
I tried to collect the image under the main (host) machine, errors appeared (see errors), I got tired.
I downloaded the image of Ubuntu under VirtualBox, I launched it under it, it did not get together, it turned out there was a problem in understanding.
I tried to build an image using the OpenBricks repository, but it turned out to be more test, i.e. On the GeeXBox website, it is written that if there is not going there, then this is normal. The working one turned out to be the GeeXBox repository, but the build via make menuconfig was not successful, so it was decided to use make * defconfig.
Using these instructions, an image was obtained:
export OB=$SANDBOX/ob mkdir $OB && cd $OB hg clone http://hg.geexbox.org/geexbox cd geexbox make geexbox-xbmc-bcm2708-raspberrypi_defconfig make
Errors
- Not found
first32k.bin
. Solution: found in the search, downloaded, corrected the path in packages / linux / build file not recognized: File format not recognized
. Solution: this link and edit packages or install guest 32-bit system- Broken links, such as
ecore, eina, eet, evas, libXdamage
. Solution: find in search, download, replace - did not help
Links
Screenshot

LTIB
About the system
The build system that
Freescale uses for its BSPs.
It uses perl to build packages, and the packages themselves are stored in rpm, which in itself is unusual.
Another feature - LTIB does not compile Toolchain, but downloads or uses ready-made, which is a minus for me.
Instructions
export LTIB=$SANDBOX/ltib mkdir $LTIB && cd $LTIB cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/ltib co -P ltib cd ltib ./ltib
It was okay, but in the end the output did not show up at the terminal (uart or com port), it turned out that it was just turned off. It was possible to connect to the device via ssh and get into the console. (it turned out not obvious)
Errors
- Not found
rpm
. Solution: installed rpm-org, (rpm from red hat, did not work) - The missing package was not found. Solution in the instructions above
Links
Screenshot

PTXdist
About the system
The system that
Pengutronix uses.
This build system is divided into 2 stages, the compiler assembly (toolchain) and the very image of the system. Those. it turns out that the image is going for two actions, and not for one. Perhaps this is a minus.
In the past, this system seemed to me quite interesting. It was convenient to use, and the code inside it is structured and readable.
Instructions
At the first search I found on
github-e a variant of this build system for RPi, but I could not build it (the compiler was assembled, there was no image). The problem, as it seems to me, is that according to probability it was compiled under debian Linux, which is most likely ubunta, but I don’t have it.
But I did not want to stop and believe that no one used this build system for RPi. And I found an option that is on the main Pengutronix repository.
Instructions that allowed me to build an image (and pay attention to the section with errors below):
export PTX=$SANDBOX/ptx mkdir $PTX && cd $PTX
Errors
configure: error: cannot compute suffix of object files: cannot compile
. After finding out, it became clear that it symbolizes something completely different - ./configure simply did not find the compiler. If the fake args option was used, then ./configure did not even try to search for the compiler, but took its name from it. Solution: replace in fake args (in ptxdist menuconfig) with “gcc”@itemx must follow @item
. It appeared because there was makeinfo version 5.0 on my machine. Solution: install makeinfo
version less than 5.0.- Bad link to files. Solution: download, files pkg-config-0.25.tar.gz , udev-172.tar.bz2 and put in the
src
folder
Links
Screenshot

Yocto Project / OpenEmbedded
About the system
OpenEmbedded is an assembly system that is used by anyone, it contains a lot of packages and is very popular in itself and the main thing is that it all works.
But when I began searching for build systems for RPi, I came across a
Yocto project that I knew nothing about and it turned out that he was using OpenEmbedded within himself.
It appeared in 2010-2011 and it turned out that the goal is quite good - to improve the developer’s tools for working with embedded systems and to take OpenEmbedded as the basis.
As a result, more stable builds, more tests and better documentation, I managed to run a little through these facts, but there were very few problems compiling the image.
Therefore, boldly united, the OpenEmbedded and Yocto project in one section.
Instructions
export YOCTO=$SANDBOX/yocto mkdir $YOCTO && cd $YOCTO
Errors
- In the system I have the default python3, and for the build python2 was needed. Solution: this (use virtualenv )
Links
Screenshot

Buildroot
About the system
This build system uses
OpenWrt .
I have not used this system before, so I can’t add anything about it, but I liked it. It was very easy to use and earned almost immediately.
But the installation of the image was not beautiful.
Instructions
export BR=$SANDBOX/br mkdir $BR && cd $BR git clone --depth 1 git://github.com/gamaral/rpi-buildroot.git cd rpi-buildroot make raspberrypi_defconfig make
Errors
- There were broken links. Solution: download udev-182.tar.bz2 files and put in the $ BR / RaspberryPi-BuildRoot / dl folder
Links
Screenshot

Openwrt
About the system
Same as BuildRoot, but compiled without errors.
Instructions
export OW=$SANDBOX/ow mkdir $OW && cd $OW git clone https://code.google.com/p/raspberrypi-openwrt/ make menuconfig
Links
Screenshot

Conclusion
Impression
If you follow the news and understand builds, then of course, there is nothing new for you, but if you are stuck in one place, then RPi is a very good chance to try something new, because old projects are updated and start to support something then new and RPi in the lists they have one of the first.
I was extremely surprised and glad that I learned about projects like the Yocto project and the OpenWRT that once bypassed me. The first is an excellent development of OpenEmbedded, but technically nothing new, the second project I just wanted to try.
For myself, I chose to try the BuildRoot and, if something does not suit me, I will switch to the Yocto project (instead of the OpenEmbedded).
And of course, you do not need to collect your distributions (or images), if you can try it already ready, it will be much easier. On each site from the assembly systems there are already ready images.
My little research came to an end and, as a result, decided to include it in this article.
What missed
- Did not write a list of packages that the build system provides
- Are there any commands to immediately generate a configuration for working through nfs (only for convenience)
- I did not specify the size of the resulting image, the time of its assembly and the total size of the folder, after compilation
Material for further research
The last word
If you find a mistake, please let me know - I will correct it.
If you wish, I will add links to the images I got.
If you have comments, comments, some text seems too simple and not necessary, please write in person.
Added screenshots.