/** @mainpage Barebox
Barebox is a bootloader that initializes a hardware and boots Linux and
maybe other operating systems or bare metal code on a variety of
processors. It was initialy derived from U-Boot and captures up with
several of it's ideas, so users being familiar with U-Boot should come
into production quickly with Barebox.
However, as the Barebox developers are highly addicted to the Linux
kernel, it's 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:
- POSIX File API:
@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.
- Shell:
We have the standard shell commands like ls/cd/mkdir/echo/cat,...
- Environment Filesystem:
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'.
- Filesystem Support:
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.
- Driver Model (borrowed from Linux):
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.
- Clocksource:
We use the clocksource API knwon from Linux.
- Kconfig/Kbuild:
This gives us parallel builds and removes the need for lots of ifdefs.
- Sandbox:
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.
- Device Parameters:
There is a parameter model in @a Barebox: each device can specify it's
own parameters, which do exist for every instance. Parameters can be
changed on the command line with \.\="...". 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'.
- Getopt:
@a Barebox has a lightweight getopt() implementation. This makes it
unnecessary to use positional parameters, which can be hard to read.
- Integrated Editor:
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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston,
MA 02111-1307 USA
@endverbatim
@subpage users_manual
@subpage developers_manual
@subpage supported_boards
*/