https://github.com/mramshaw/buildroot
Experiments with Buildroot
https://github.com/mramshaw/buildroot
buildroot embedded-systems linux
Last synced: 3 days ago
JSON representation
Experiments with Buildroot
- Host: GitHub
- URL: https://github.com/mramshaw/buildroot
- Owner: mramshaw
- Created: 2019-05-25T17:10:01.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-05-27T14:19:01.000Z (about 7 years ago)
- Last Synced: 2025-03-04T04:09:52.657Z (over 1 year ago)
- Topics: buildroot, embedded-systems, linux
- Size: 3.91 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Buildroot
Experiments with [Buildroot](http://www.buildroot.org/)
## Contents
The contents are as follows:
* [What is Buildroot](#what-is-buildroot)
* [Source Code](#source-code)
* [Surprises](#surprises)
* [Configuration](#configuration)
* [Linux architecture and performance](#linux-architecture-and-performance)
* [Using a predefined configuration](#using-a-predefined-configuration)
* [Building a predefined configuration](#building-a-predefined-configuration)
* [Reference](#reference)
* [Home Page](#home-page)
* [Source Code Home Page](#source-code-home-page)
* [User Manual](#user-manual)
* [Credits](#credits)
## What is Buildroot
From http://www.buildroot.org/
> Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation
## Source Code
Pull the source code as follows:
$ git clone git://git.busybox.net/buildroot
## Surprises
Unlike many linux projects, does not require root access or the use of `sudo`:
> No need to run as root, Buildroot is designed to be executed with normal user privileges.
And:
> Running as root is even strongly discouraged!
## Configuration
Offers many options:
Command|Requirements|Packages
-------|------------|--------
make menuconfig|ncurses|'ncurses-devel' or 'libncurses-dev' depending on distro
make nconfig|ncurses|'ncurses-devel' or 'libncurses-dev' depending on distro
make xconfig|Qt|Qt 4.8 or Qt 5.x
make gconfig|Gtk|gtk+-2.0, glib-2.0 and libglade-2.0
'ncurses' is the lightest framework so we will use that; on Ubuntu this requires 'libncurses5-dev'.
Both `make menuconfig` and `make nconfig` are now options; my preference is for `make nconfig`.
More importantly Buildroot offers a staggering number of predefined configurations:
```bash
$ ls -al ./configs/
total 808
drwxrwxr-x 2 owner owner 12288 May 25 12:11 .
drwxrwxr-x 16 owner owner 4096 May 25 12:14 ..
-rw-rw-r-- 1 owner owner 1002 May 25 12:11 aarch64_efi_defconfig
...
...
-rw-rw-r-- 1 owner owner 1084 May 25 12:11 zynq_zed_defconfig
$
```
[The options include arm, bananapi, beaglebone, chromebook, raspberrypi and many others.]
#### Linux architecture and performance
Linux is what is known as a [microkernel](http://en.wikipedia.org/wiki/Microkernel) architecture.
The kernel is the bare minimum required to run the computer so that accessing hardware requires
loading device drivers.
Device drivers generally run in __kernel space__ (as opposed to [user space](http://en.wikipedia.org/wiki/User_space),
sometimes referred to as __userland__) as this is generally needed to deliver the level of
performance modern applications require.
For additional performance, compiling needed device drivers into a kernel is fairly trivial.
The difficulty comes in specifying the device drivers to compile into the kernel so as to
deliver increased performance under a normal workload. There can be what seem like hundreds
of options to specify, as well as dependencies to sort through.
This is where Buildroot really shines, as it offers a rich selection of predefined configurations.
#### Using a predefined configuration
This is a simple as make savedefconfig, for instance:
```bash
$ make beaglebone_defconfig
mkdir -p /home/owner/Documents/Linux/Buildroot/buildroot/output/build/buildroot-config/lxdialog
PKG_CONFIG_PATH="" make CC="/usr/bin/gcc" HOSTCC="/usr/bin/gcc" \
obj=/home/owner/Documents/Linux/Buildroot/buildroot/output/build/buildroot-config -C support/kconfig -f Makefile.br conf
/usr/bin/gcc -D_GNU_SOURCE -DCURSES_LOC="" -DLOCALE -I/home/owner/Documents/Linux/Buildroot/buildroot/output/build/buildroot-config -DCONFIG_=\"\" /home/owner/Documents/Linux/Buildroot/buildroot/output/build/buildroot-config/conf.o /home/owner/Documents/Linux/Buildroot/buildroot/output/build/buildroot-config/zconf.tab.o -o /home/owner/Documents/Linux/Buildroot/buildroot/output/build/buildroot-config/conf
#
# configuration written to /home/owner/Documents/Linux/Buildroot/buildroot/.config
#
$
```
The full configuration for a beaglebone has now been written to the default __.config__ file.
#### Building a predefined configuration
Now that our configuration options are defined, this is as simple as running make.
Of course, if you wish to keep a log of the build that can be done as follows:
$ make 2>&1 | tee build.log
[Expect the initial build to take quite some time. Over a slow internet connection, it will ___really___ take some time.]
The built kernel image, bootloader image, and root filesystem image(s) will be in `output/images/`.
```bash
$ ls -alh output/images/
total 118M
drwxr-xr-x 2 owner owner 4.0K May 25 15:08 .
drwxrwxr-x 6 owner owner 4.0K May 25 15:08 ..
-rw-r--r-- 1 owner owner 36K May 25 15:08 am335x-boneblack.dtb
-rw-r--r-- 1 owner owner 35K May 25 15:08 am335x-bone.dtb
-rw-r--r-- 1 owner owner 35K May 25 15:08 am335x-bonegreen.dtb
-rw-r--r-- 1 owner owner 41K May 25 15:08 am335x-evm.dtb
-rw-r--r-- 1 owner owner 40K May 25 15:08 am335x-evmsk.dtb
-rw-r--r-- 1 owner owner 16M May 25 15:08 boot.vfat
-rw-r--r-- 1 owner owner 79K May 25 15:02 MLO
-rw-r--r-- 1 owner owner 60M May 25 15:08 rootfs.ext2
lrwxrwxrwx 1 owner owner 11 May 25 15:08 rootfs.ext4 -> rootfs.ext2
-rw-r--r-- 1 owner owner 15M May 25 15:08 rootfs.tar
-rw-r--r-- 1 owner owner 77M May 25 15:08 sdcard.img
-rw-r--r-- 1 owner owner 654K May 25 15:02 u-boot.img
-rw-r--r-- 1 owner owner 376 May 25 15:08 uEnv.txt
-rw-r--r-- 1 owner owner 5.3M May 25 15:08 zImage
$
```
## Reference
Various useful websites are listed below.
#### Home Page
The home page can be found here:
http://www.buildroot.org/
#### Source Code Home Page
The source code can be found here:
http://git.busybox.net/buildroot/
#### User Manual
The user manual can be found at:
http://buildroot.org/downloads/manual/manual.html
## Credits
Buildroot Training:
http://bootlin.com/doc/training/buildroot
[These documents change frequently so it is worth checking back often for the most up-to-date version.]
The source for these materials can be found at:
http://github.com/bootlin/training-materials/
[Pull requests can be submitted here also.]