Menu

Home

Etienne LORRAIN



<title>Gujin boot/Linux/system loader</title>
<meta content="program to start your PC and run Linux, Windows, *BSD from floppies, CDROMs, DVDs, hard disks..." name="Description">
<meta content="MBR bootloader bootmanager fdisk partition real-mode GCC Linux" name="Keywords">

Gujin is hosted by Get gujin boot/system loader at SourceForge.net. Fast, secure and Free Open Source software downloads

Version v2.8.5


What is Gujin

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 OSDev Wiki, and Linux Wiki.

A patch which has never been merged due to lack of interest, and would solve the "ISO not able to locate its own "source" iso file", valid for most distributions: Casper Gujin patch.

You can download the source code (you will need also gcc-4.5.1/gmp-5.0.1/mpfr-2.4.2/mpc-0.8.1/binutils-2.20.1 to get the same binaries), download the pre-compiled pack for installation, the RPM or DEB packages (generated by the distribution toolchain), 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, or use the list "gujin-users" at "lists.sourceforge.net" if you do not want to register SourceForge), I simply cannot find the time to answer same questions by E-mail more than once, and then spend time to write FAQs. Why Ask Questions in Public?


Free advertisement

Want to do something your grandchildrens will thank you for?
STOP eating fish! See The End Of The Line DVD.


Do not forget the other freedom, The Freedom of Information.
Your Right To Know for U.K., read the book! Or freedominfo.org for other countries.
The day I support Europe institutions is the day they enforce a strong Freedom of Information Act, see RMR.


How to install

The number of choices seems to be a problem for new users, because the installer tries to support every possible need - but it is in fact quite simple.

Install as the main bootloader of a PC:
Then, use the Gujin package (.deb/.rpm) and your package manager. For instance on debian, right-click on the .deb file and select "Open with GDebi", or type "dpkg -i gujin*.deb".
For Fedora, you can type "yum localinstall gujin*.rpm". This method also handle upgrading Gujin, by uninstalling the previous version and installing the new one. Unlike the Grub package, you can safely uninstall the Gujin package and your system will stay bootable using the bootloader which was previously installed.
Because the upgrading method uninstall the previous version (and restore the previous bootloader) and then install the new version, you always keep the initial bootloader ready if you want to get rid of Gujin.
The Gujin installer may create the file /boot/gujin.cmd if it detects special booting options in /proc/cmdline. See file gujin.cmd in install*.tar.gz for real world examples.

For all other choices, you need to execute the Gujin installer as root in a console.
To get that executable, you either install the package as previously, or copy the executable from the file install*.tar.gz in the /sbin directory. If you install manually, also copy the manual file gujin.8 in /usr/share/man/man8/.
If you want to have the Gujin package installed (to access /sbin/gujin installer) but keep Grub/LILO as your main bootloader, just type: /sbin/gujin --remove /boot/gujin.ebios after installing the package.
If you want to know which bootloader is currently installed in a device, just type: /sbin/gujin --report /dev/sda

Install on a USB hard disk, USB stick or a SD-card which is currently mounted on /media/usbdisk:
just type: /sbin/gujin /media/usbdisk/gujin.ebios
Install on a USB hard disk, and format that device:
The main advantage of formating (to FAT) the device is that the complete content is written to known values, the device will be able to boot on BIOS which are more buggy. Other advantage is that the FAT filesystem is created to have aligned data blocks in all cases, so should be quicker to use.
To install that way, you have first to backup all the files you want to keep (they will all be erased), locate and unmount that device (should be something like /dev/sdX with X being a letter), remove all partitions of that device (gparted or fdisk) and then type: /sbin/gujin --mbr /dev/sdX
Install on a USB stick or a SD-card (as superfloppy), and format that device:
Even if those devices can be treated as USB hard disk like the precedent choice, most have the "removable" bit set in their USB description and will boot with more BIOS if they do not have any partition defined, like a floppy disk.
To install that way, you have first to backup all the files you want to keep (they will all be erased), locate and unmount that device (should be something like /dev/sdX with X being a letter), check that the device do not have any partition defined, and then type: /sbin/gujin /dev/sdX
Install a minimalistic bootloader on a PC with a single Linux distribution
If you have a PC with a single disk and a single Linux distribution on an ext2/3/4 filesystem, there is no need to have a full menu, or even a menu at all. You can install by:
/sbin/gujin -t tinyext4.bin /boot/minigujin.ebios
At boot, Gujin will search for the newest kernel (by modification date) and load it without any question.
The Linux parameters can be written inside /boot/minigujin.ebios with the --cmdline='' parameters, or be written in the /boot/gujin.cmd file. If the newest kernel has a problem, you can interrupt its load (and so load an older kernel) by pressing Control-Break.
Install as the El-Torito bootloader of a live CDROM/DVD
Just use the provided gujin.bcd in install*.tar.gz as your El-Torito boot file, or the file minigujin.bcd if you do not want any menu.
You can regenerate those two *.bcd file, for instance to add a command line (if not using /boot/gujin.cmd) by:
/sbin/gujin gujin.bcd --cmdline=""
/sbin/gujin -t minigujin.bcd --stop_emulation=2 --cmdline=""
There is a lot of other options to /sbin/gujin, but they are not needed in the general case, and you should ignore them if its is the first time you are trying the Gujin bootloader.
  • Documentation

    The documentation (FAQ & HowTo) is in file README.htm in the source tar file.
    Gujin also has its "man" page in section 8: "man 8 gujin"
    Note also the file "install.txt" and the help given by --help/-h option of the "gujin" and "gzcopy" software included.

    You basically have three flavour of the same Gujin bootloader, pre-compiled inside the "gujin" installer executable for ease of use:

    • the standard one (around 330 Kbytes) supports everything, it can be transformed by the "gujin" installer into a DOS program, a floppy, a partition, a full disk image, or inserted into an ISO image, and it displays a complete menu.

      The "gujin" installer uses this standard bootloader if the "-t" option is not given, and (try to) autodetect the intended format of the output using the filename extension or the characteristics of the device.
      Just type one of those in a Linux console (insert parameter --lang=fr for french version):


      ./gujin /boot/gujin.ebios # install the second stage in contiguous file /boot/gujin.ebios and update the MBR (RAID still not supported)
      ./gujin gujin.exe # for DOS executable
      ./gujin eltoritobootableimage.iso # to be able to copy that image to SD card or USB drive
      ./gujin boot.144 --full # For 1.44 Mb floppy image, for instance use with "mkisoimage -b boot.144", see Makefile target CD144FD
      ./gujin gujin.bcd # For Bootable CD in no emulation mode, use with "mkisoimage -no-emul-boot -boot-load-size 4 -b gujin.bcd"
      ./gujin /dev/fd0 # autodetect the floppy in /dev/fd0 and format a new FAT12 with Gujin
      ./gujin /dev/hdg3 # format a Gujin-bootable FAT16/32 filesystem on /dev/hdg3; this partition needs to be activated by the MBR (MBR is not modified)
      ./gujin --mbr /dev/sda11 # format a Gujin-bootable FAT16/32 filesystem on /dev/sda11 and replace the code of the MBR to run Gujin from /dev/sda11 (keeping the partition table)
      ./gujin /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 "contiguous file method" (i.e. /boot/gujin.ebios) you can also desinstall by "./gujin --remove=/boot/gujin.ebios".
      You can get some information on your installed bootloader using "./gujin --report=/dev/sda".

      If you want to format the complete disk (i.e. erase/initialise the MBR and the partition table), for instance to create a bootable USB drive, you have to umount and manually clear first the beginning of the device by:
      umount /dev/sdg*
      dd if=/dev/zero of=/dev/sdg bs=512 count=63 # triple check the output device of= parameter!!!
      And then invoke ./gujin to create either a disk image or a floppy image (with or without partition table):
      ./gujin /dev/sdg --disk=BIOS:0x00,auto # (super)floppy image
      ./gujin /dev/sdg --disk=BIOS:0x80,auto --mbr # disk image
      If your PC BIOS is new enough to support the Extended BIOS interface on USB disks, you can forget the parameter "--disk=BIOS:0x?0,auto", the installer will defaults to "--disk=EBIOS:0x?0,auto".
      Laptops like DELL PRECISION M70 will not boot if "--disk=BIOS:" is used (i.e. Extended BIOS only), netbook like EeePc will not boot if "--disk=EBIOS:" is used (i.e. BIOS only for USB keys).

      If the only machine you can boot (after a disaster day) is a windows machine and you need a bootable floppy/USB stick as soon as possible, you can get file boot.144 or USB*Gb.img in install.tar.gz and get dd for windows (documentation).
      You then type dd --list to list all drives available on your PC, look for "Removable media" on this list, you should have something like:

      \\?\Device\Harddisk9\Partition0
        link to \\?\Device\Harddisk9\DR36
        Removable media other than floppy. Block size = 512
        size is 1048576000 bytes
      
      Where Partition0 means the whole disk. Check that by unplugging the USB stick, the corresponding entry disappear.
      Then backup any important file on that USB disk, they will be deleted.
      Then type in a console, if your USB key has a capacity of 1 Gbyte (you probably need administrator priviledge):
      dd if=..\USB1Gb.img of=\\?\Device\Harddisk9\Partition0 --progress
      
      Take extreme care in selecting the right disk: it will destroy every files on that disk, if you have selected the wrong disk there isn't any recovery possible (never ever select a fixed hard disk), your windows PC would never boot again.
      Once the copy is done, remove and re-insert the USB stick, you should see a new disk with a single file named boot-ebi.sys.
      That method is not the best way to initialise a USB thumb drive because you will lose some of its capacity (USB*Gb.img are pre-made images for 1,000,000,000 bytes and multiple thereof), all your USB drives will have the same disk identifier, it will not boot if your BIOS do not support EBIOS for USB drives, but if you just have windows...

      To use the target "eltoritobootableimage.iso", you just need a bootable ISO image like ubuntu-9.10-desktop-i386.iso.
      If that image is written in a USB thumb drive like "cat ubuntu-9.10-desktop-i386.iso > /dev/sdc ; sync", it will not produce a bootable USB thumb drive. Moreover, some PC (like my EeePc) do not accept to boot a USB device if a partition table is present, so most of the usual methods found on Internet to create a bootable USB drive do not work (on my EeePc).
      The solution is simple, just type "./gujin ubuntu-9.10-desktop-i386.iso", it will modify the file ubuntu-9.10-desktop-i386.iso so that you can do "cat ubuntu-9.10-desktop-i386.iso > /dev/sdc ; sync" and have a bootable USB disk.
      The modifications are just changing the first 512 bytes of ubuntu-9.10-desktop-i386.iso, and add a very small FAT12 filesystem at the end, so the modified file ubuntu-9.10-desktop-i386.iso is still a valid ISO image and can be written to a DVD and that does not affect El-Torito booting. The modifications are reversible by "--remove=" parameter.

      The "gujin" installer has a lot of options (seen by typing "./gujin -ha"), for instance the --full option for floppies and the -w option to have a verbose installation, the --read_retry, --cmdline="", --single_sector_load, --partition_index=[1-4]... parameters.
      The "gujin" installer produces the file "/boot/gujin.cmd" when it detects that command line parameters are needed by the Linux kernel, reading file "/proc/cmdline". You can review that file and edit as needed.
      Note also some binary debug versions of file "boot.bin" which can be transformed into dbgdisk.exe, dbgfs.exe, dbgload.exe... for debugging (creates a file named "DBG" when run under DOS - the file needs to be closed properly, for instance type ^C).

    • the size optimised (50 Kbytes), DOS only version does not have a menu, is regenerated by "./gujin -t mingujin.exe", and it has to be used like:
      mingujin.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):
      mingujin.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:
      mingujin.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.
      Obviously, the kernel and initrd files have to be accessible by DOS, that mingujin.exe do not have the filesystem detection functions at all.
      You can display a list of possible parameter for your VESA video card to switch to a VESA mode with "mingujin.exe /V" or "mingujin.exe -V", and set it (first parameter only) like "mingujin /V=1024x768x32 c:vmlinuz ...".
    • the size optimised (80 Kbytes), floppy only version to be used like:
      ./gujin -t tinystd.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.
      You can replace file tinystd.bin by tinyusb.bin when the device has partitions (like when using --mbr-device=) to load the first kernel+initrd in the booted device with FAT filesystem, and use ./gujin "--cmdline=" parameter to set the command line.
      You can replace file tinystd.bin by tinyext4.bin for ext2/3/4fs partitions.
      You can replace file boot.bin by tinycdrom.bin (with --stop_emulation=0) to load the first kernel+initrd in the booted CDROM, and use ./gujin "--cmdline=" parameter to set the command line; see Makefile target CDtiny for details.

    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-cmdline /boot/bzImage+2.6.24 "root=/dev/sda6" # to set it
    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.

    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 E2/3/4FS (read only, only fixed size inodes) 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 250 Kbytes, depending on the compile time options.

    Screen Shoots

    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):
    boot image

    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:
    main image

    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):
    setup image

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

    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...:
    setup2 image

    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.
    main Bochs image

    You can also change the language used at run time by typing Control T - look at "messages.h" file to help supporting/correcting your own language...
    french setup image

    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:
    cmd image

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

    16 colors video modes in VGA only graphic:
    sixteen color image

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

    Yes, that is the same software, the same floppy!

    By the way, if you do, on a test floppy:
    ./gujin --full /dev/fd0 --serial=com1,9600,n,8,1
    put this floppy in the PC to boot, and link the two PCs by a crossed serial line (fully wired null-modem) (with or without two modems and a phone line in between), you can type:
    serial connection

    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/GtkTerm/PuTTY and set it to /dev/ttyS0, 9600 bauds, no parity 8 bits, no hardware flow control and get:
    serial menu

    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   Donate to this project

    Last modified 2010-12-03


    [frdm] Support SFLC

    Gujin is hosted by Get gujin boot/system loader at SourceForge.net. Fast, secure and Free Open Source software downloads