/** @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 */