How to generate a boot disk

This doc presents the steps needed to generate a boot disk for ModulOS. If you want an already made boot disk, see the download page.

Currently ModulOS only supports the ext2 file system. So the boot disk must have this file system.

All steps must be executed on a linux box.

1 - Make an ext2 filesystem in the floppy disk. For instance:

    $ mke2fs /dev/fd0

2 - Mount the floppy disk on a dir. For instance:

    $ mount /dev/fd0 /a

3 - Create system/modules, system/config and lib dirs on the floppy. For instance:

    $ mkdir -p /a/system/modules /a/system/config /a/lib

4 - Copy all system modules to system/modules dir. It should have something like this:

at_video.mod     chipset.mod       intermanager.mod   kbdlus.mod      rexecmodfile.mod   taskmanager.mod
avltree_in.mod   ext2fs.mod        intmanager.mod     kbdlusintl.mod  rlibmodfile.mod    usermodmanager.mod
blockbuffer.mod  fdcontroller.mod  ioportmanager.mod  manip.mod       rsysmodfile.mod
cfgmanager.mod   fsmanager.mod     kbd_generic.mod    memmanager.mod  sysmodmanager.mod

5 - Copy all library modules to lib dir. It should have something like this:

exception.mod  manip.mod  memmanager.mod  sync.mod

6 - Copy the starter file and ls.mod and shell.mod programs to the root of the floppy. It should have something like this:

lib  lost+found  ls.mod  shell.mod  starter  system

7 - Create the system.cfg file in the system/config dir with this:

[SysModManager]
modules {
at_video {
path=/system/modules/at_video.mod
prop=0x5
}
avltree_in {
path=/system/modules/avltree_in.mod
prop=0x5
}
blockbuffer {
path=/system/modules/blockbuffer.mod
prop=0x5
}
cfgmanager {
path=/system/modules/cfgmanager.mod
prop=0x5
}
chipset {
path=/system/modules/chipset.mod
prop=0x5
}
ext2fs {
path=/system/modules/ext2fs.mod
prop=0x5
}
fdcontroller {
path=/system/modules/fdcontroller.mod
prop=0x5
}
fsmanager {
path=/system/modules/fsmanager.mod
prop=0x5
}
intermanager {
path=/system/modules/intermanager.mod
prop=0x5
}
intmanager {
path=/system/modules/intmanager.mod
prop=0x5
}
ioportmanager {
path=/system/modules/ioportmanager.mod
prop=0x5
}
kbd_generic {
path=/system/modules/kbd_generic.mod
prop=0x1
}
kbdlusintl {
path=/system/modules/kbdlusintl.mod
prop=0x1
}
manip {
path=/system/modules/manip.mod
prop=0x5
}
memmanager {
path=/system/modules/memmanager.mod
prop=0x5
}
rexecmodfile {
path=/system/modules/rexecmodfile.mod
prop=0x5
}
rlibmodfile {
path=/system/modules/rlibmodfile.mod
prop=0x5
}
rsysmodfile {
path=/system/modules/rsysmodfile.mod
prop=0x5
}
sysmodmanager {
path=/system/modules/sysmodmanager.mod
prop=0x7
}
taskmanager {
path=/system/modules/taskmanager.mod
prop=0x5
}
usermodmanager {
path=/system/modules/usermodmanager.mod
prop=0x7
}
}

[FSManager]
root {
fsImp=Ext2FS
devImp=FDC
data=
unit=0x0
}

[UserModManager]
modules {
exception {
path=/lib/exception.mod
}
manip {
path=/lib/manip.mod
}
memmanager {
path=/lib/memmanager.mod
}
sync {
path=/lib/sync.mod
}
}
init {
path=/shell.mod
input {
keyboard {
imp=MF2KBD
}
}
output {
video {
imp=AT
}
}
}

8 - Unmount the floppy. For instance:

    $ umount /a

9 - Make the floppy bootable with the mkext2boot util. For instance:

    $ mkext2boot /dev/fd0

That's it! The floppy is a boot disk for ModulOS. You can test this floppy disk with Bochs (bochs.sourceforge.net).