320 likes | 362 Views
OpenEmbedded & BitBake. Open Source Software Carlos Ramirez Martinez-Eiroa Professor: Corby Schmitz. Build Tools Make Ant Maven OpenZaurus OpenEmbedded BitBake. Index. Evolution. Make Ant Maven BuiltRoot BitBake. Build Tools.
E N D
OpenEmbedded & BitBake Open Source Software Carlos Ramirez Martinez-Eiroa Professor: Corby Schmitz
Build Tools Make Ant Maven OpenZaurus OpenEmbedded BitBake Index
Evolution Make Ant Maven BuiltRoot BitBake
Build Tools • The process of building a computer program is usually managed by a build tool • Build Tool: program that coordinates and controls other programs • The build utility needs to compile and link the various files, in the correct order
Make • Initial release: 1977 • Already seen in class
Ant I • Similar to make, but: • Implemented using the Java language • Requires the Java platform • Is best suited to building Java projects • Ant uses XML to describe the build process and its dependencies - Make has its Makefile format
Ant II • Conceived by James Duncan Davidson while turning Apache Tomcat (from Sun) into open source • A proprietary version of Make was used to build it on the Solaris Operating Environment
Ant III • In the open source world there was no way of controlling which platform was used to build Tomcat • Ant was created as a simple, platform-independent tool to build Tomcat from directives in an XML "build file”
Ant IV • In a Makefile the actions required to create a target are specified as shell commands which are specific to the current platform (usually Unix) • Ant provides a large amount of built-in functionality which can guarantee will behave (nearly) identically on all platforms
Ant V • January 2000, Ant was moved to a separate CVS module and was promoted to a project of its own, independent of Tomcat, and became Apache Ant
Maven uses a construct known as a Project Object Model (POM) to describe: • The software project being built • Its dependencies on other external modules and components • The build order • A key feature of Maven is that it is network-ready - The core engine can dynamically download plug-ins from a repository
A Bit of History I • 2001: Sharp introducestheSL-5000 PDA running Linux • 2002: Chris Larson finds out that the SharpROM sucks and starts hacking on a build system for a customized Linux distribution called "OpenZaurus” • 2002-2003: The OpenZaurus build system is getting stretched (beyond belief) by adding support for many more packages and target devices • January 2003: Brainstorming towards a new distribution and deviceindependent build system
A Bit of History II • February 2003: Holger Schurig creates the OpenEmbedded repository and starts hacking on the first version • May 2003: Chris Larson adds major functionality to the OpenEmbedded coreand starts converting packages from the OpenZaurus build system • December 2003: Michael Lauer releases OpenZaurus3.3.5, abandons theOpenZaurus build system, and converts100s of packages to OpenEmbedded • December 2004: OpenEmbedded is split up into the BitBake build system and the OpenEmbedded metadata
OpenEmbedded is the successor to the great OpenZaurus project The OpenZaurus project was created as an alternative ROM image for the Sharp Zaurus Personal Mobile Tool OpenZaurus
(ROM image) • (ROM image: computer file which contains a copy of the data from a read-only memory chip • Software which is being developed for embedded computers is often written to ROM files for testing on a standard computer before it is written to a ROM chip for use in the embedded system)
OpenZaurus II • The project had pushed buildroot to its limits • Buildroot:set of Makefiles and patches that makes it easy generate a cross-compilation toolchain and root filesystem for a target Linux system using the uClibc C library
OpenZaurus III • Buildroot supported the creation of ipk packages, feeds and images and had support for more than one machine But => impossible to use different patches, files for different architectures, machines or distributions (ipk:lightweight package management system designed specifically for use in Linux devices with limited storage)
OpenEmbedded • OpenEmbedded was created to overcome this shortcoming • On 7 December 2004 Chris Larson split the project into two parts: BitBake, a generic task executor and OpenEmbedded, the metadata for BitBake
OpenEmbedded II • Software framework to create Linux distributions for embedded systems • This may include bootloader, Linux, and applications • Is a set of metadata used to cross-compile, package and install software packages • License: GPL
Objectives • Be self-contained • Be able to use external toolchains or build them • Easily cross-compile software, build packages or create root-filesystems • Easily add new features, machines, architectures,…
BitBake I • OpenEmbedded built tool • Controls how to build things and the build dependencies • Collects and manages an open set of largely independent build descriptions (package recipes) and builds them in proper order
BitBake II • Used to compile different Linux kernels for a variety of PDAs • Easier to use (in theory) than manually using tools like patch and make • Programming language: Python • License: GNU General Public License (GPL), MIT/X Consortium License
Process of Making Images Binary Packages BitBake Recipes Flash Image Task Graph
BitBake File and Data Types • Three different file types: • .conf: configuration data • .bbclass: (build) classes • .bb (.inc): package recipes • BitBake parses the build classes, config files, and recipes • For every task BitBake creates a shell script on-the-fly and executes it
BitBake Recipe DESCRIPTION = "Hello world program“ PR = "r0“ SRC_URI = "file://myhelloworld.c \ file://README.txt“ do_compile() { ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld } do_install() { install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld install -m 0644 ${S}/myhelloworld ${D}${bindir} install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld }
Summary I • OpenEmbedded: A metadata repository containing • Build classes • Machine configurations • Distribution policies • Recipes To create complete embedded Linux distributions from scratch
Summary II • BitBake: A simple tool to execute tasks on metadata • Parser to handle metadata • Package graph to handle package interdependencies • Task graph to handle task interdependencies • On-the-fly shell script generator
Why all this? • SlugOS/BE is a replacement firmware image for the Linksys NSLU2 • It is produced using OpenEmbedded