Barebox
Barebox is an attempt to work around the limitations that U-Boot shows through its age. Originally dubbed U-Boot v2, it now has a different name because its design goals are different.
Barebox now support support arm, powerpc, mips, nios2, blackfin, x86
U-Boot-v2 Presentation from CELF Embedded Linux Conference Europe Grenoble, 2009-10-16 (pdf)
Booting Linux Fast & Fancy (pdf)
Sandbox
One of the great thinks with barebox, it's the sandbox.
Basically you can develop and debug generic feature on your host
1) compile it
for other arch than x86 or ppc you need to use the next branch or the mainline
As I just recently fix the support for all host
ARCH=sandbox make sandbox_defconfig
ARCH=sandbox make
now just start it
# ./barebox barebox 2011.10.0-00119-gad62fdb-dirty (Oct 15 2011 - 11:38:46) Board: sandbox Malloc space: 0x7f679f24b010 -> 0x7f679fa4b010 (size 8 MB) Open /dev/env0 No such file or directory no valid environment found on /dev/env0. Using default environment running /env/bin/init... barebox:/ barebox:/ ls -al /dev/ ls: invalid option -- a cr-------- 18446744073709551615 zero crw------- 8249 defaultenv crw------- 4294967295 mem crw------- 2198 fd0 barebox:/ devinfo devices: `---- hostfile0 `---- console0 `---- cs0 `---- ramfs0 `---- devfs0 `---- mem0 `---- 0x00000000-0x00002038: /dev/defaultenv `---- mem1 `---- 0x00000000-0xfffffffe: /dev/mem `---- tap0 `---- eth0 drivers: console ramfs devfs tap mem cramfs hostfile barebox:/ barebox:/ help . - alias for source ? - alias for help [ - alias for test addpart - adds a partition table to a device boot_config - Boot Menu boot_menu - Boot Menu cat - concatenate file(s) cd - change working directory clear - clear screen cp - copy files crc32 - crc32 checksum calculation delpart - delete partition(s) devinfo - Show information about devices and drivers. dhcp - invoke dhcp client to obtain ip/boot params echo - echo args to console edit - Usage: (s)edit <file> ethact - set current ethernet device exit - exit script export - export environment variables false - do nothing, unsuccessfully go - start application at address or file help - print online help linux_exec - Execute a command on the host loadenv - Load environment from ENVFS into DIRECTORY (default: /dev/env0 -> /env). login - login ls - list a file or directory md - memory display md5sum - md5 checksum calculation memcmp - memory compare memcpy - memory copy meminfo - print info about memory usage memset - memory fill menu - Menu Management mkdir - make directories mount - Mount a filesystem of a given type to a mountpoint or list mounted filesystems. mw - memory write (fill) passwd - passwd ping - ping <destination> printenv - Print value of one or all environment variables. pwd - print working directory readline - prompt for user input reset - Perform RESET of the CPU rm - remove files rmdir - remove directorie(s) saveenv - save environment to persistent storage sedit - alias for edit sh - run shell script sha1sum - sha1 checksum calculation sha224sum - sha224 checksum calculation sha256sum - sha256 checksum calculation sleep - delay execution for n seconds source - execute shell script in current shell environment test - minimal test like /bin/sh tftp - Load file using tftp protocol time - measure execution time of a command timeout - wait for a specified timeout true - do nothing, successfully umount - umount a filesystem version - print monitor version barebox:/
Menu
It's on ather great featues
Add Menu Framework
Introduce a menu framework that allow us to create list menu to simplify barebox and make it more user-frendly
This kind of menu is very usefull when you do not have a keyboard or a serial console attached to your board to allow you to interract with barebox
For the develloper part, The framework introduce two API
1) C that allow you to create menu, submenu, entry and complex menu action
2) Command that allow you as the C API to create menu, submenu, entry and complex menu action but this time the actions will be store in a function and then be evaluated and excecuted at runtime.
barebox:/ help menu Usage: menu [OPTION]... Manage Menu -m menu -l list -s show Advanced -e menu entry -a add -r remove -S select How to Show menu (-A auto select delay) (-d auto select description) menu -s -m <menu> [-A delay] [-d auto_display] List menu menu -l Add a menu menu -a -m <name> -d <description> Remove a menu menu -r -m <name> Add an entry (-R for do no exit the menu after executing the command) (-b for box style 1 for selected) (and optional -c for the command to run when we change the state) menu -e -a -m <menu> -c <command> [-R] [-b 0|1] -d <description> Add a submenu entry (-R is not needed) (-b for box style 1 for selected) (and -c is not needed) menu -e -a -m <menu> -u submenu -d [-b 0|1] <description> Remove an entry menu -e -r -m <name> -n <num> Select an entry menu -m <menu> -S -n <entry num starting at 1> List menu menu -e -l [menu] Menu example menu -a -m boot -d "Boot Menu" menu -e -a -m boot -c boot -d "Boot" menu -e -a -m boot -c reset -d "Reset" menu -s -m boot
An example
menu -a -m boot -d "Welcome on Barebox Boot Sequence" menu -e -a -m boot -c boot -d " 1: linux_2_6_36" menu -e -a -m boot -c boot -d " 2: linux_2_6_39" menu -e -a -m boot -c boot -d " 3: linux_3_0_0" menu -e -a -m boot -c boot -d " 4: installer" menu -e -a -m boot -c clear -d " 5: shell" menu -e -a -m boot -c reset -d " 6: reset" menu -s -m boot
The screen is clear and show
Welcome on Barebox Boot Sequence 1: linux_2_6_36 2: linux_2_6_39 3: linux_3_0_0 4: installer 5: shell 6: reset Auto Select in 1