/** @mainpage Barebox

Barebox is a bootloader that initializes hardware and boots Linux and
maybe other operating systems or bare metal code on a variety of
processors. It was initially derived from U-Boot and retains several of
U-Boot's ideas, so users familiar with U-Boot should come into
production quickly with Barebox.

However, as the Barebox developers are highly addicted to the Linux
kernel, its coding style and code quality, we try to stick as closely
as possible to the methodologies and techniques developed in Linux. In
addition we have a strong background in POSIX, so you'll find several
good old Unix traditions realized in Barebox as well.

@par Highlights:

- <b>POSIX File API:</b><br>
  @a Barebox uses the the well known open/close/read/write/lseek access
  functions, together with a model of representing devices by files. This
  makes the APIs familiar to everyone who has experience with Unix
  systems.

- <b>Shell:</b><br>
  We have the standard shell commands like ls/cd/mkdir/echo/cat,...

- <b>Environment Filesystem:</b><br>
  In contrast to U-Boot, Barebox doesn't misuse the environment for
  scripting. If you start the bootloader, it gives you a shell and
  something that looks like a filesystem. In fact it isn't; it is a very
  simple ar archive being extracted from flash into a ramdisk with 'loadenv'
  and stored back with 'saveenv'.

- <b>Filesystem Support:</b><br>
  When starting up, the environment is mounted to /, followed by a
  device filesytem being mounted to /dev in order to make it possible to
  access devices. Other filesystems can be mounted on demand.

- <b>Driver Model (borrowed from Linux):</b><br>
  Barebox follows the Linux driver model: devices can be specified in a
  hardware specific file, and drivers feel responsible for these devices
  if they have the same name.

- <b>Clocksource:</b><br>
  We use the standard clocksource API from Linux.

- <b>Kconfig/Kbuild:</b><br>
  This gives us parallel builds and removes the need for lots of ifdefs.

- <b>Sandbox:</b><br>
  If you develop features for @a Barebox, you can use the 'sandbox'
  target which compiles @a Barebox as a POSIX application in the Linux
  userspace: it can be started like a normal command and even has
  network access (tun/tap). Files from the local filesytem can be used
  to simulate devices.

- <b>Device Parameters:</b><br>
  There is a parameter model in @a Barebox: each device can specify its
  own parameters, which do exist for every instance. Parameters can be
  changed on the command line with \<devid\>.\<param\>="...". For
  example, if you want to access the IPv4 address for eth0, this is done
  with 'eth0.ip=192.168.0.7' and 'echo $eth0.ip'.

- <b>Getopt:</b><br>
  @a Barebox has a lightweight getopt() implementation. This makes it
  unnecessary to use positional parameters, which can be hard to read.

- <b>Integrated Editor:</b><br>
  Scripts can be edited with a small integrated fullscreen editor.
  This editor has no features except the ones really needed: moving
  the cursor around, typing characters, exiting and saving.


@par Directory layout

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

@verbatim
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 /           -> Parts of the documentation, also doxygen
@endverbatim

@section license barebox's License

@verbatim
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

@endverbatim

@subpage users_manual

@subpage developers_manual

@subpage supported_boards

*/
