gportay / barebox

Unofficial git mirror of the barebox pengutronix's git repository
http://git.pengutronix.de/?p=barebox.git
Other
0 stars 0 forks source link

Barebox

Barebox is a bootloader that follows the tradition of Das U-Boot, while adopting modern design ideas from the Linux kernel.

Features

Building Barebox

Barebox uses the Linux kernel's build system. It consists of two parts: the Makefile infrastructure (kbuild), plus a configuration system (kconfig). So building barebox is very similar to building the Linux kernel.

For the examples below, we use the User Mode barebox implementation, which is a port of barebox to the Linux userspace. This makes it possible to test drive the code without having real hardware. So for this test scenario, ARCH=sandbox is the valid architecture selection. This currently only works on ia32 hosts and partly on x86-64.

Selection of the architecture and the cross compiler can be done by using the environment variables ARCH and CROSS_COMPILE.

In order to configure the various aspects of barebox, start the barebox configuration system:

make menuconfig

This command starts a menu box and lets you select all the different options available for your architecture. Once the configuration was finished (you can simulate this by using the standard demo config file with 'make sandbox_defconfig'), there is a .config file in the toplevel directory of the source code.

Once barebox is configured, we can start the compilation

make

If everything goes well, the result is a file called barebox:

ls -l barebox

-rwxr-xr-x 1 rsc ptx 114073 Jun 26 22:34 barebox

Barebox usually needs an environment for storing the configuration data. You can generate an environment using the example environment contained in board/sandbox/env:

./scripts/bareboxenv -s -p 0x10000 arch/sandbox/board/env env.bin

To get some files to play with you can generate a cramfs image:

mkcramfs somedir/ cramfs.bin

The barebox image is a normal Linux executable, so it can be started just like every other program:

./barebox -e env.bin -i cramfs.bin

barebox 2.0.0-trunk (Jun 26 2007 - 22:34:38)

loading environment from /dev/env0 barebox> /

Specifying -[ie] tells barebox to map the file as a device under /dev. Files given with '-e' will appear as /dev/env[n]. Files given with '-i' will appear as /dev/fd[n].

If barebox finds a valid configuration sector on /dev/env0 it will load it to /env. It then executes /env/init if it exists. If you have loaded the example environment barebox will show you a menu asking for your settings.

If you have started barebox as root you will find a new tap device on your host which you can configure using ifconfig. Once you configured bareboxs network settings accordingly you can do a ping or tftpboot.

If you have mapped a cramfs image try mounting it with

mkdir /cram

mount /dev/fd0 cramfs /cram

Memory can be examined as usual using md/mw commands. They both understand the -f option to tell the commands that they should work on the specified files instead of /dev/mem which holds the complete address space. Note that if you call 'md /dev/fd0' (without -f) barebox will segfault on the host, because it will interpret /dev/fd0 as a number.

Directory Layout

Most of the directory layout is based upon the Linux Kernel:

arch// -> contains architecture specific parts arch//mach-*/ -> SoC specific code

drivers/serial -> drivers drivers/net drivers/...

include/asm- -> architecture specific includes include/asm-/arch-* -> SoC specific includes

fs/ -> filesystem support and filesystem drivers

lib/ -> generic library functions (getopt, readline and the like)

common/ -> common stuff

commands/ -> many things previously in common/cmd_*, one command per file

net/ -> Networking stuff

scripts/ -> Kconfig system

Documentation/ -> Sphinx generated documentation. Call "make docs" to generate a HTML version in Documentation/html.

Release Strategy

Barebox is developed with git. From time to time, tarball releases are branched from the repository and released on the project web site. Here are the release rules: