It's time for a Biffboot Changelog. Maybe someone else can fill in the details for the older versions, I'll just add the new stuff here, --Biff.

For users of BiffJTAG I've written a small script that will display the version of a biffboot binary (only works for biffboot versions below 2.3 or above 2.9) --Lurch

Biffboot v4.0 (vapour-ware, est. Jan. 2011) - more details

There was little interest in the features in Biffboot v3.4, so I've shelved that version. The next full release will be a complete re-structure, and the focus is usability. My TODO list is as follows:

    • Remove dependency on any of the external tools,, to program the board, implement xmodem for serial programming.

    • Support standard tcp/ip-based protocols, telnet server, possibly web server, wget-like command applet to download/flash firmware direct from the web.

    • Support for some basic functionality out-of-the-box (without any operating system), GPIO -> ethernet gateway, ether->serial gateway.

Since many OEMs are familiar with the v3.3 interface and have based production processes on that, that version will continue to be supported indefinitely and will always be an option for new boards.

Biffboot v3.4 (1MB Flash devices only)

    • Fixed default kernelmax and kernel cmndline values to match shipping firmware (OpenWrt trunk).

    • Removed kernel command-lines for specific distributions, you have to enter them manually now.

    • Added capability to flash over the network from Windows machines. Press and hold the button while you power on the Bifferboard. A few seconds later it will obtain a DHCP address and start serving requests. The protocol is identical to bb_eth_upload, but it runs over UDP, and uses, so should be more network-friendly. A broadcast is used to find the board, or you can supply an IP address if you know it.

    • Fixed tftp transfer of files with names larger than 33 characters, affected network boot and tftpflash operations. (Thanks Lurch!)

    • Fixes to the help for various commands

    • Prints maximum values allowable for kernelmax and loadaddress when prompting for them

    • Fixed ubifs warning message to tell the user it doesn't erase all flash.

Biffboot v3.3 (19 July 2010)


    • Fixed ELF loading to allow NetBSD to boot.

Biffboot v3.2 (Beta-testing only)


    • Fixed bug resulting in the last chunk of memory not being flashable. Hardly noticeable on 4/8MB devices, but annoying for 1MB units.

Biffboot v3.1 (released to JTAG users only)

    • Changed serial flashing so it only erases flash for sectors that will be written rather than the entire flash area. Avoids over-writing any created ubifs partition when serial-flashing a kernel.

    • Added 'tftp flashing'. Uses identical code to the network boot option, but instead of booting the image, writes it to flash, for people who would rather work this way round. Hopefully this will play nicer with routers. You need serial access to control this.

    • Corrected minor bug making 'restore defaults' go back to USB root, when it should really be rdroot.

    • Changed string "Config block written" -> "Config written"

    • Added support for formatting ubifs of varying sizes. This won't work if you don't have enough erase blocks, and you need about 1.3MB minimum to have a partition, however it's nice to have a slightly larger partition when you've got a small kernel, which was the main intention. The setting of kernelmax determines where the partition starts.

    • Added ubifs formatting for devices with 4MB. 1MB devices won't have nearly enough erase blocks I'm afraid, so there is no support for that. BTW: I know we don't sell 4MB devices any more, but it was easy to do, so what the heck.

Biffboot v3.0 (1 Mar 2010)


    • Added 'promiscuous' network console, that accepts broadcast packets from

    • Switch from single-letter to 'word' commands, so the commands bear more resemblance to their function, and this hopefully stops people accidentally doing things.

    • Trapped vt102 escape codes so they don't make ugly mess on the screen.

    • Added (TAB) command completion because I realised it's now too much trouble to type out the full commands(!) It doesn't work quite the same as Bash, since it won't cycle through the possible matches, but it will complete if you've already made the text unique (probably good enough). Applies to both commands and command arguments. I'm afraid I detest the habit of some bootloaders which accept a command once you've made it unique (e.g. boot == boo == bo), so this was needed.

    • Added crude 10-slot history mechanism because re-typing 'led on' 'led off' was too much trouble to toggle the led.

    • Switched from irritating 'toggle' function for load address to allowing the user to just type in a hex value, same system for kernelmax. Load address can now be set to any value.

    • Enum-style config values now get set from interactive menus instead of needing to cycle through them. The config options are now somewhat more data-driven, and the idea is to just include the relevant Biffboot source files into the biffconfig driver so biffconfig will always be up to date, although that's currently some way off.

    • Made startup delay (waiting for <ESC>) more consistent between Qemu and Bifferboard versions by using a proper timer.

    • Switched serial upload commands (1-4) so they are only accepted immediately after boot. The '1' key has to be pressed within 250mS of the boot text appearing or none of these options are available. This should stop people hitting '1' accidentally to erase their flash whilst keeping compatibility with the old serial upload code.

    • Updated logic analyser so it includes all JTAG pins and also the button (means you can see it doing something even if you haven't done the R19 hack). This is a convenient way of testing the button works.

    • Added immediate 'reboot' command to restart biffboot. It actually activates the watchdog but with a very short delay, so also tests the watchdog.

    • On failed boot (e.g. kernel header not recognised) Biffboot now restarts instead of disappearing.

    • Added human-readable version text to biffboot binary - there was a complaint that if you look at the binary you don't know what it is, since later Biffboot versions decompress themselves. Also added MAC address to Biffboot binary, so it's visible in a hex editor.

    • Added usbroot and mtdroot commands to quickly set a typical command-line for booting from these sources without changing other config settings.

    • Added ubifs format command to format a flash partition starting from 0x200000 extending to just below the bootloader. This is consistent with the default kernelmax value of 0x20. A warning will be given if kernelmax isn't set to this value. Note that this is the first command to be introduced that is specific to 8MB boards.

    • Added config block metadata at offset 0x5000 in flash. This areas provides the strings used in defining config data. Documentation will be added to biffconfig.

Biffboot v2.9 (???)


Biffboot v2.8 (???)

Biffboot v2.7 (???)

    • First version that added kernelmax to the configuration options, allowing customisable kernel sizes

    • Kernelmax values:-

      • 1MB boards default 0xF maximum 0xF

      • 4MB boards default 0x20 maximum 0x3F

      • 8MB boards default 0x20 maximum 0x7F

    • Maximum kernel sizes:-

      • 1MB boards 952KB ( = 974848 bytes, or 0xEE000 in hex), or 960KB ( = 983040 bytes, or 0xF0000 in hex) if you sacrifice the config block

      • 4MB boards 2024KB ( = 2072576 bytes, or 0x1FA000 in hex) with the default kernelmax, or 4024KB ( = 4120576 bytes, or 0x3EE000 in hex) if you increase the kernelmax

      • 8MB boards 2024KB ( = 2072576 bytes, or 0x1FA000 in hex) with the default kernelmax, or 8120KB ( = 8314880 bytes, or 0x7EE000 in hex) if you increase the kernelmax

    • If using a kernel (or kernel with embedded initrd) larger than 2024KB, the kernelmax can be calculated as kernelmax = int(ceil( float(kernelsize_in_hex + 0x6000) / 0x10000)) e.g. a 3MB kernel (0x300000 bytes) would need a kernelmax setting of 0x31

Biffboot v2.6 (???)

Biffboot v2.5 (???)

Biffboot v2.4 (???)

Biffboot v2.3 (???)

Bifboot v2.2 (June 2009)


    • Added the network booting (TFTP) feature

    • A bug prevents it reading the configuration options

    • First version to support flash sizes other than 1MB

    • Maximum kernel size on both 4MB and 8MB boards of 2024KB ( = 2072576 bytes, or 0x1FA000 in hex)

Biffboot v2.1 (11 June 2009)


    • Added back support for serial flashing too

    • Maximum kernel size of 952KB ( = 974848 bytes, or 0xEE000 in hex) - if you're willing to overwrite the config block (i.e. not be able to store any configuration options) this limit increases to 960KB ( = 983040 bytes, or 0xF0000 in hex)

Biffboot v2.0 (10 May 2009)


    • First version to support ethernet flashing (but removed serial flashing)

    • First version to support modifiable configuration options - accessed interactively via serial console, or written via ethernet

    • Maximum kernel size of 936KB ( = 958464 bytes, or 0xEA000 in hex)

Biffboot v1.2 (April 2009)


    • Only supports serial flashing

    • Doesn't support configuration options, so kernel command-line (defaults to console=uart,io,0x3f8 init=/etc/preinit root=/dev/sda1 rootwait) can only be changed by embedding it inside the kernel

    • Maximum kernel size of 960KB ( = 983040 bytes, or 0xF0000 in hex)

Biffboot v1.1 (March 2009)


Biffboot v1.0 (February 2009)