Version v2.4
Here is the description you can find at
Freshmeat:
Gujin is a PC boot loader which can analyze your partitions and filesystems.
It finds the Linux kernel images available, as well as other bootable
partitions (for *BSD, MS-DOS, Windows, etc.), files (*.kgz) and bootable
disk images (*.bdi), and displays a graphical menu for selecting which
system to boot.
Gujin boots Linux kernel using the documented interface, like LILO and GRUB,
so it doesn't need any other pre-installed bootloader. It can also directly
load gzip'ed ELF32 or ELF64 files, with a simple interface to collect
real-mode BIOS data.
There is no need to execute anything after making a new kernel: just copy
the kernel image file into the "/boot" directory, with a standard name.
Gujin is written almost entirely in C with GCC, and it fully executes in
real mode to be as compatible as possible.
And here is Gujin's Wiki and Linux Wiki.
You can download the source code (you will need also GCC-4.2.3 and Binutils-2.18), download the pre-compiled pack for installation, and/or the precompiled standard/debug executable in here.
If you have any question about Gujin, please ask them on a public list/forum (the ones on sourceforge should do the job), I simply cannot find the time to answer same questions by E-mail more than once, and then spend time to write FAQs.
The documentation (FAQ & HowTo) I try to keep up to date is at
the Document Manager of Sourceforge
Note also the file "install.txt" and the help given by --help/-h option of the
"instboot" and "gzcopy" software included.
You basically have three flavour of the same software (produced by recompilation with different compiler switches):
./instboot boot.bin /boot/gujin.ebios # install the second stage in contigous file /boot/gujin.ebios and update the MBR (RAID still not supported)
./instboot boot.bin boot.exe # for DOS executable
./instboot boot.bin boot.144 --full # For 1.44 Mb floppy image, for instance use with "mkisofs -b boot.144", see Makefile target CD144FD
./instboot boot.bin boot.bcd --full # For Bootable CD in no emulation mode, use with "mkisofs -no-emul-boot -boot-load-size 4 -b boot.bcd"
./instboot boot.bin /dev/fd0 # autodetect the floppy in /dev/fd0 and format a new FAT12 with Gujin
./instboot boot.bin /dev/hdg3 # format a Gujin-bootable FAT16 filesystem on /dev/hdg3; this partition needs to be activated by the MBR (MBR is not modified)
./instboot boot.bin /dev/sda11 --mbr-device=/dev/sda # format a Gujin-bootable FAT16 filesystem on /dev/sda11 and replace the code of the MBR to run Gujin from /dev/sda11 (keeping the partition table)
./instboot boot.bin /dev/sda0 # install Gujin into a B.E.E.R partition at end of the disk /dev/sda (needs empty space there) and set the MBR (keeping the partition table)
The uninstall method (i.e. replacing the MBR with the original one) is handled by Gujin itself in its
setup menu at boot time, but if you have used the "contigous file method" (i.e. /boot/gujin.ebios) you
can also desinstall by "./instboot --remove=/dev/sda ; rm /boot/gujin.ebios".
umount /dev/sdg*
dd if=/dev/zero of=/dev/sdg bs=512 count=63 # triple check the output device of= parameter!!!
And then invoke instboot to either create a floppy image, a disk image or a mix of the two:
./instboot boot.bin /dev/sdg --disk=BIOS:0x00,auto # floppy image, less supported
./instboot boot.bin /dev/sdg --disk=BIOS:0x80,auto --mbr-device=/dev/sdg # disk image
./instboot boot.bin /dev/sdg --disk=BIOS:0x80,auto --mbr-device=/dev/sdg --usb_hdd # disk image with special partition boot record
umount /dev/sdg* # else corruption when automatically unmounted by desktop after Gujin install!!!
dd if=/dev/zero of=/dev/sdg bs=512 count=63 # triple check the output device of= parameter!!!
./instboot boot.bin /dev/sdg --disk=BIOS:0x00,auto --mbr-device=/dev/sdg --head=128 --sectorpertrack=1
tiny.exe D:\boot\vmlinuz D:\boot\initrd root=/dev/hda3 <other kernel parameters>
or (the "initrd=" parameter has to follow the kernel name, always as 2nd parameter):
tiny.exe D:\boot\vmlinuz initrd=D:\boot\initrd root=/dev/hda3 <other kernel parameters>
If you do not have an initial RAM disk to load, either use a minus "-" sign or use
a parameter which cannot be a filename because it contains an equal "=" sign:
tiny.exe D:\boot\vmlinuz - root=/dev/hdb5 <other kernel parameters>
The <kernel parameters> needs at least a "root=/dev/hd..." parameter,
this flavour will not try to probe anything, and return to DOS if an
error happens before Linux takes control of the PC.
./instboot tiny.bin /dev/fd0
mcopy vmlinuz-2.6.10 a:
mcopy initrd-2.6.10 a:
mdir a:
And then reboot by Control-Alt-Del or a power cycle. It should load the
kernel and the initrd and start Linux.
One of the problem of using Gujin is that there is only one command line editable and
stored, so it is difficult to manage multiple distributions with different command lines.
I have added a small executable named "gujin-cmdline" to insert an "embedded command line"
into some free space of vmlinuz files (i.e. the end of the bootsector). The starting marker
is simply "cmdline:" and the string has to be zero terminated, it has to be located below
the first vmlinuz parameter. The maximum space there is currently 296 bytes.
This embedded command line can only be edited under Linux, use as:
./gujin-cmdline /boot/bzImage+2.6.24 # to display this embedded command line
Gujin will erase this field from memory before running the kernel, so Linux will
never see the difference. Other bootloaders will not see any difference neither.
./gujin-cmdline /boot/bzImage+2.6.24 "root=/dev/sda6" # to set it
In short, to make all this possible, I wrote a GCC interface to the PC BIOS
and all the library functions needed to easily boot a kernel.
I also wrote a DOS interface to be used if you booted a rescue DOS floppy or
if you choose "return to DOS" in Windows 3.x/9x. This DOS software should work
everywhere but will not be able to start Linux in a Windows DOS box -
you do not want to do that anyways (too many open files not properly closed,
so a scandisk at boot).
I am using a completely re-written GZIP (decompression only) library, 100%
compatible with
GZIP and
zlib
and a small Linux/UNIX "gzcopy" application to edit the comment field of
GZIP files.
The main reason for the rewrite is a smaller program size, it has been
seriously tested (10 CD-ROM full of .tar.gz decompressed and CRC checked),
but if anyone find a problem (else than CDROM not readable or a file
renamed to *.gz after being compressed with another tool) I will be glad
to hear from it.
I am also using a completely re-written E2FS (read only) library, a DOS
FAT12/16/32 (read only) and a ISO9660 library to search for and load kernels;
they have been tested extensively (E2FS, E3FS with 1 & 4 Kbytes blocks, lot of
DOS filesystems, CDROM and DVDROM), no problem has been found.
There isn't any NTFS nor CDROM/UDF support.
The system to access the video interface, which can handle in graphic modes
CGA/EGA only, VGA only, VESA1 only and VESA2+ video card is unique to Gujin.
Four types of mouse are detected, for fun you can even have a joystick on
a VT320 when using the serial interface - I have to make a screen shoot
one day!
The size of this bootloader (only one file) is in between 50 and 200 Kbytes,
depending on the compile time options (GCC-4.2.3 and binutils-2.18 as reference).
Screenshots are not easy to take in the real BIOS environment, but
fortunately DosEmu is here,
to give you some idea of what you get, just before switching to graphic (if verbose mode is active):

You should check at least once that this information is correct, for instance note that here, I have a partition 45667938 sectors (i.e. 21 Gbytes) bigger than the filesystem it contains (a 22 Gbytes partition where I copied the Damn Small Linux bootable CDROM by "cat /dev/cdrom ⊃ /dev/hda8" - obviouly a lot of wasted space for this 100 Mb CDROM); you can then uncheck the "verbose" box in the setup screen for a "quick" boot.
Just after switching to graphic, you will see something like this if you
have a Linux distribution with a memtest floppy image and three kernels, a Redmond system,
a CDROM image inside a partition, and the demo standalone *.kgz on a floppy:

Then, if a mouse/joystick has been detected, you can click to one of the
highlighted fields to either switch to another video mode or boot a kernel,
else you can use the keyboard interface (keys '+', '-','/', '*' ... , and function keys).
Note that those kernels have been found automagically, they are not described
in any "/etc/gujin.conf" file: this file do not and will never exist.
If you press "space" or the "setup" field (on the top right), you can
setup the display and remove some fields (click on checkboxes):

So you get by re-clicking setup or re-pressing space:

The setup screen has a lot more checkboxes, to search kernel and/or MBR,
to search on floppy disks or on BIOS disks or only on IDE...:

To show a screenshot of Gujin menu with CDROM/DVDs, I need to use another
emulator: Bochs.
This one is slower but simulate correctly the (first session only) of CDROMs.
If you want to generate more complex CDROMs than this one, you should read the
few commands lines of target "CDall" and/or "CD_BDI" in file Makefile.

You can also change the language used by a compilation option; now
only French is available - look at "messages.h" file to help supporting
your own language...

At the end (press the end key or click on the button) you get some
command, last one being "uninstall" to remove Gujin and restore the
old boot process. Here, that option is not enabled because dosemu
has booted from a floppy, so there isn't any saved boot sector:

You can also get more unusual video modes, like text mode 40x25:

16 colors video modes in VGA only graphic:

or even 4 colors video modes (2 Bit Per Pixel but in dosemu):

Yes, that is the same software, the same floppy!
By the way, if you do, on a test floppy:
put this floppy in the PC to boot, and link the two PCs by
a crossed serial line (with or without two modems and a phone
line in between), you can type:
./instboot --full boot.bin /dev/fd0 --serial=com1,9600,n,8,1

The "serial initialisation failed" is due to no answer received whatsoever when interrogating the terminal type - Gujin then assumes a monochrome VT100 terminal. If you have a more powerful terminal, like a color VT430, or a VT420 which can do 132 columns and 48 lines, be sure to connect it before the identification code is asked (physical terminal autodetection).
You can start minicom and set it to /dev/ttyS0, 9600 baud and get:

Active/clickable fields are underlined, as usual.
Selecting a kernel will really boot it (you will have the console on your serial line) - you will need to setup getty to accept connection on serial line (in /etc/inittab) if you want to connect (see also /etc/securetty).
Have fun!
Comments to Etienne Lorrain.
Donate to gujin boot/system loader
Last modified 2008-02-04
Gujin is hosted by