Solemn's Site
Never stopping to think if I should.
Changelog
- Version 2.3:
-
Fixed crashing caused by calling vfs_translate_path() with no disk set
or passing too few arguments to 'find' command.
-
Updated filename autocompletion: partial names are appended where
possible and complete ones are displayed.
-
Added boot_index and boot_target command line options.
-
Added GRUB 2 configuration support.
-
Updated to kexec-tools 2.0.2.
- Version 2.2.2:
-
Added chroot jail support to the VFS layer and a rootdir kernel argument
to override the root directory path on the boot disk.
-
Added stack trace with symbol lookup and register dump upon segfault to
make debugging crashes less insanity-inducing.
-
Added GRUB autodetection support.
- Version 2.2.1:
-
Lots of code cleanup.
-
Updated list_add() to set the 'next' pointer of the new node to NULL as
not setting it to NULL could cause segfaults.
-
Moved disk comparison code from find_disk() to compare_disk_id().
-
Wrote mount_by_id() function to replace mount_retry() and direct
mount_disk() calls.
-
Added filter argument to get_disks() and removed find_disk().
-
Changed boot messages to be less verbose, verbose information is still
sent to debug console if needed.
-
Set VFS root to "rootfs" instead of "debug" it /noboot exists.
-
Rewrote tarmods.pl script.
-
Updated makefile to explicitly set --build to the result of config.guess
if a cross compiler is used.
-
Updated to kexec-tools 2.0.1.
-
Added message to warn when no targets are defined.
-
Updated PATH_COMMAND() macro to allow unsetting paths.
- Version 2.2:
-
Added 'floppy' target to automatically build floppy images.
-
Updated mkinitramfs.sh to create an LZMA compressed archive.
-
Cleaned up mkinitramfs.sh.
-
Wrote improved VFS wrapper functions, removed some old ones.
-
Added kexec-loader specific errno values for the new VFS layer.
-
Added 'debug' disk for... debugging.
-
Updated get_cmdline() to return values in a static buffer instead of
returning a string on the heap.
-
Updated modprobe code to mmap() module files instead of reading them
into memory, gzipped modules are no longer supported.
-
Added gzip support to TAR extractor to replace gzipped modules.
-
Updated addmod.sh to accept multiple modules.
-
Wrote script and make targets for generating ISO images.
-
Rewrote and changed large portions of the GRUB intergration code to fix
bugs and improve readability.
- Version 2.1.1:
-
Updated config loading code to look for kxloader.cfg if there is no
kexec-loader.conf file.
-
Changed behaviour of timeout directive: 0 timeout will boot instantly
instead of waiting forever, use "off" to force no timeout. The default
setting is "off", but will be overridden by menu.lst unless explicitly
set in kexec-loader.conf.
-
Fixed bug: Module loading failed due to my lack of testing.
-
Changed ls command to not output timestamps or list ./.. directories.
-
Fixed bug: Append option ignored and cmdline used in its place.
-
Fixed bug: Error from kexec-tools dying not visible when booting menu
target as alert was not set on failure.
-
Added support for modules packed in TAR archives, optionally compressed
with LZMA using the .tlz extension.
- Version 2.1:
-
Fixed a bug: grub-map caused an "Unknown directive" error.
-
Added support for loading keymaps.
-
Updated module loading code: kernel modules in /modules/ on the rootfs
will be loaded before trying to mount the boot disk.
-
Fixed bug: forgot to pass --reset-vga to kexec
-
Added contextual shell autocompletion, only returns results appropriate
for the current command.
-
Fixed bug: skipped "chainload" GRUB targets instead of "chainloader"
-
Updated menu.lst parser to skip entries with empty root devices, since
some distros use this (broken?) behaviour for divider lines.
-
Added check for /noboot file on rootfs to load everything from rootfs
instead of searching for a boot disk.
-
Implemented console_getchar() wrapper to handle terminal escapes in one
place and to allow characters to be queued from processing escapes.
- Version 2.0:
-
Full rewrite, far more stable code.
- Version 1.6.2:
-
Fixed a bug: specifying filesystem type AND /dev/ for a non-existant
device no longer attempts to free an invalid address.
-
Rewrote the shell input code, autocompletion will be re-implemented in a
later version, after some design choices are finalized.
-
Updated the shell to accept arguments containing spaces without them
being quoted or escaped for the kernel, initrd, cmdline and append
commands.
-
Updated detect_fstype() and check_magic() to correctly identify ext4
filesystems instead of identifying them as ext3.
- Version 1.6.1:
-
Fixed a bug: config_parse() silently ignored initrd due to a typo.
-
Added reboot, halt and cat commands to shell.
-
Implemented autocompletion for commands and filenames in the shell.
-
Fixed a bug: pressing a key to stop searching for boot disk no longer
results in an infinite loop.
-
Changed behaviour of kexec_config kernel option, it now forces the boot
device instead of just adding it to the top of the search list.
- Version 1.6:
-
Replaced unsafe mmap() code in detect_fstype() which crashed on small
partitions, such as MS-DOS extended.
-
Upgraded kexec-tools to version 2.0.0
-
Fixed a bug: console_getsize() returned 0x0 on serial consoles, it now
defaults to 80x24 if the ioctl() call returns 0x0.
-
Rewrote shell input code to support decent line editing.
-
Updated shell history code to not log empty lines, or repeat commands.
-
Rewrote command parsing code to be more like that of a normal shell,
the new parser stores arguments in argv[] and sets argc.
-
Added basic shell commands (cd, ls, find, etc...)
-
Changed module loading behaviour: All files in /modules/ named *.ko are
loaded automatically, options may be set in /modules/modules.conf
- Version 1.5:
-
Rewrote code which finds the boot disk.
-
Removed capability to reload configuration by pressing R at the main
menu.
-
Added support for loading Linux modules and inserting them into the
kernel, gzip compressed modules are also supported.
-
Fixed a bug: nptr->mpoint was not set to the return value of
str_append() in config_add_mount(), which could cause a segfault
depending on state of OS memory management code.
-
Updated styling of status messages to make them more consistant.
-
Rewrote detect_fstype() to use mmap() instead of reading MAGIC_BUF_SIZE
bytes of into stack memory.
-
Updated mount code to create device nodes from /proc/diskstats and
removed hdx/sdx mknod code from mkinitramfs.sh
- Version 1.4.3:
- Fixed bug caused by my stupidity and lack of testing:
grub_loadcfg() incorrectly checked that grub_root was set, why
does this seem so familiar? Oh yeah! Version 1.3.1!
- Version 1.4.2:
-
Replaced malloc() calls with allocate() calls for simplicity.
-
Replaced most fixed-length strings with dynamic strings in order to
save memory.
-
Replaced kl_target.modules array with a linked-list to remove the limit
on multiboot modules.
-
Added multiboot module support for GRUB configuration files.
- Version 1.4.1:
-
Added support for ISO-9660 to detect_fstype().
-
Added command history, scrolls through previous commands on up/down
arrow keys, by default the history size is 32 commands.
-
Added nano-like scrolling for editing commands which are longer then
the screen, otherwise backspacing before column 1 deletes characters
from the command buffer, but not from the screen.
-
Added module command and configuration directive to support loading
multiboot modules.
- Version 1.4:
-
Added cmdline configuration directive.
-
Updated load_kernel() to take a kl_target as its argument and store the
argument strings in dynamic memory.
-
Removed STACK_BUF macro and replaced it with fixed buffers of smaller
sizes since 2048 is overkill for any of them.
-
Fixed a bug: unmount_list() now returns if mounts = NULL instead of
getting stuck in an infinite loop.
-
Wrote shell for interactively configuring and booting targets, will be
improved a lot over the next versions.
-
Added reset-vga directive/command which passes kexec the --reset-vga
argument when loading the kernel.
-
Updated the kexec-tools merge patch to make die() output error messages
in the same style as kexec-loader.
-
Implemented free_targets(), fixed a memory leak in config_load() and
used value2 in config_parse() to get rid of a warning.
- Version 1.3.1:
-
Updated makefile structure and added new targets.
-
Updated run_kexec() to directly call kexec_main() in the child process
instead of calling itself with argv[0]="kexec" via execv().
-
Fixed bug: grub_loadcfg() now checks that grub_root is set before
attempting to mount it, how the hell did I overlook this?!
-
Fixed bug: load_menu() now correctly handles the 'default' directive
in menu.lst.
- Version 1.3:
-
Created mount_dev() function to cut down on duplicate mounting code.
-
Added support for reading GRUB menu.lst and device.map files.
- Version 1.2:
-
Rewrote fatal() function and removed pointless calls to it.
-
Fixed bug: main_menu() no longer crashes if you have zero targets.
-
Fixed bug: Timeout is no longer displayed after a one second delay.
-
Rewrote a lot of code used for loading configuration.
-
Removed obsolete mount_add(), mount_copy(), mount_free(), target_add()
and target_free() functions.
-
Added STACK_LIMIT and STACK_BUF macros which configure the maximum
stack size and the size of auto buffers.
-
Wrote check_device() function for checking that devices exist before
attempting to mount, determine FS type, etc.
-
Updated config_add_mount() to prepend /mnt/ to kl_mount.mpoint so that
an extra buffer isn't required in mount_list() or unmount_list().
-
Updated config_mount() to retry finding the configuration disk upto 3
times upon failure with delay increasing with each attempt.
-
Optimised some of the screen drawing code to not write pointless
characters to the console.
-
Implemented new console output API: printm(), printM(), printd() and
printD() which are macro wrappers around print2().
-
Improved status messages displayed while loading a target.
-
Updated list_devices() to display the filesystem type of all devices
found in /proc/diskstats.
-
Updated build system to download and patch kexec-tools then build the
kexec program into kexec-loader like busybox to save space.
-
Removed HOST and CC variables from root Makefile and added ifdef to set
the CC and configure options as required if a HOST variable is passed
in the environment.
-
Updated mount_config() to check for the kernel option kexec_config and
insert the supplied device at the start of the devices list.
-
Updated mount_config() to detect the filesystem type using
detect_fstype() instead of using the hardcoded BOOTFS_TYPE macro.
- Version 1.1:
- Removed directives for creating devices, all devices inodes should be
included with the initramfs.
- Redesigned mkinitramfs.sh to create a CPIO archive and to use fakeroot
if the script is not being run as root.
- Updated configuration file parser.
- Added seperate debug console and /proc/kmsg monitor.
- Rewrote code which deals with mounting/unmounting the disk containing
CONFIG_FILE.
- Rewrote mount_list() to be more effecient by ordering the mounts in
order of depth.
- Replaced unmount_tree() function with unmount_list().
- Added support for detecting ext2, ext3, XFS, ReiserFS, minix, FAT and
NTFS filesystem types.
- Rewrote menu code, it's slightly more sane now.
- Implemented list_devices() function, pressing L at the menu displays
a list of all devices listed in /proc/diskstats.
- Version 1.0: