CELF Project Proposal/Improve kexecboot


 * Summary : Improve kexecboot


 * Proposer : Yuri Bushmelev

Description
Kexecboot is a C program able to scan the partitions on available devices, offering a graphical framebuffer menu and allowing user to select from which one to boot. Specifically, kexecboot creates the command line for kexec.

Typically kexecboot resides together with kexec in a small initramfs, embedded in a custom-tailored kernel compiled with support for initramfs and kexec system call. Both binaries are built static, linked against klibc to optimize size.

Flashed on NAND and launched as first kernel by the original bootloader, this solution gives following advantages:


 * multi machine support: we build for many architectures using OpenEmbedded (tested on arm and x86/x86_64)
 * zImage and uImage (for arm and sh) support
 * easy customization: just add machine-specific workarounds (see Zaurus raw read of bootparams from NAND)
 * small size: complete linux-kexecboot_2.6.x image (initramfs + kernel) is about 1Mb (less with lzma patches)
 * easy boot choice: boot from SD/CF/NAND/... even if bootloader doesn't support it
 * multiple fs detection: we support many filesystems e.g. ext2/3/4, jffs2, reiserfs, vfat and more (ubifs is work in progress)
 * kernel upgrade: no need to flash the device (kernel is in /boot of removable media)
 * rapid testing: different distributions can live in separate partitions on the same device

Thus, kexecboot is an interesting solution for embedded linux distributions, which can just rely on kexecboot whithout having to consider what the real bootloader can and cannot do.

About customization, initially the program has been developed for Sharp Zaurus PDA (armv5te). For the machines of that family there is specific code reading bootparams directly from NAND, circumventing the obsolete bootloader which is incompatible with modern 2.6.x kernels.

Proposed improvements

 * 1) Write user's and developer's guides. Done
 * 2) Extend architecture and filesystems support. Kexecboot was tested on MIPS (Ben NanoNote). UBIFS support was not done.
 * 3) Improve debugging ability. We should allow users to have ability to look for debugging information without special hardware (serial cable e.g.). Done
 * 4) Implement text-mode UI. We have already patches against one of old releases. This can be used later to use kexecboot UI over serial line or telnet/ssh connection. Done
 * 5) Improve GUI. Make GUI more clean and eye-candy (fonts and icons). Done
 * 6) Add ability to use multiple kernels on same partition. Current implementation allow to use only one kernel per partition. Done

Developers

 * Yuri Bushmelev (jay7) - lead developer
 * Thomas Kunze (thesing) - author of first proof-of-concept, initial klibc porting
 * Andrea Adami (ant) - initial Zaurus mtdparts reading, kexecboot tester and OpenEmbedded recipe maintainer
 * Eric Weiss (pwgen) - initial evdev-based event processing, touchscreen support and OpenMoko port
 * Cortez (Omegamoon) - initial config file parser, text UI patch and zUbuntu port
 * Michael Casadevall (NCommander) - new configure options, kexecboot tester on x86

Links

 * site http://kexecboot.org
 * project http://projects.linuxtogo.org/projects/kexecboot
 * git tree http://git.linuxtogo.org/?p=groups/kexecboot/kexecboot.git
 * OpenEmbedded recipes: http://www.openembedded.org

Related works

 * kexec-tools - http://www.kernel.org/pub/linux/kernel/people/horms/kexec-tools/README.html
 * kexec-loader - http://www.solemnwarning.net/kexec-loader
 * Qi Bootmenu - http://www.brain-dump.org/projects/qi-bootmenu/
 * Ubuntu ARMSoftbootLoader specs - http://wiki.ubuntu.com/Specs/ARMSoftbootLoader

Scope
This should take about 65 hours of work.

Status
Proposed work was completed in March 2011 (with UBIFS exception). All code is mainlined into git master branch.