The Z Boot process

Wow - This stuff is confusing.



This document is being developed before your eyes.
Here is what I have leaned about the boot process of my Zaurus.

These steps describe the process of a COLD boot.  This is one where the reset button under back battary cover has been pressed.  When this is done it puts some part of the Z into a state that is not otherwized set.

1) Hard Reset
        This is what happens the first time the Z is loaded.

2) Magic Happens (This part isn't documented - Yet)
I'm gussing the boot loader located at FLASH memory address 0x00000000 is executed. This part of the Z containes lots of hidden options.  One is the "CD" keyboard process to jump to the FLASH memory manager.

It at some point the Linux kernel 'init' function is called.

4) The kernel run
I'd like more information on just how the kernel is started and if it is any different then one executed on a workstation.  I'm thinking it must be because it is run in place.

5) The root file system is mounted read only.
This 'disk' space is realy FLASH memory. It is only updated by the load process.

For information about what is contained in FLASH see the documentaion on ROM imagea layout.

6) The init program is executed

7) init runs /etc/rc.d/rc.sysinit
Here is where things start getting confusing.  The Z uses lots of sim links.  

At this point in the process /etc is not /etc.  It is a sim link to /home/etc witch is itself a simlink to ../root/etc. So /etc is really /root/etc.

                /etc -> /home/etc -> ../root/etc/rc.d/rc.sysinit

In rc.sysint the path is set to /sbin:/bin:/usr/sbin.rom:/usr/bin.rom.  Then if the file /etc/sysconfig/network exists it is executed. And it does.

8) /root/etc/rc.d/rc.rofilesys is run
        The rc.sysinit function has found that this is the
        first time the system was booted.

Most of the root file system is empty at this point.
        A fresh copy of the ____ file system needs to be created.
        These file systems are keep in:

                /root/.dev_default.tar
                /root/.home_default.tar
                /root/.var_default.tar

        The command oncheck is run. This command determins if
        the system has been cold booted.

        If the system has been cold booted:

        8a) /dev is created
                The command:

                        dd if=/dev/zero of=/dev/ram1 bs=1024 count=64

                carves out the memory needed (64k) for /dev

                A minux file system is made in this space.

                        mkfs.minix -i 512 /dev/ram1 64

                The file system is mounted and the default devices
                are created.

                        mount -t minix /dev/ram1 /dev
                        cd /
                        tar xf /root/.dev_default.tar

        8b) /home is created
                This space is created with:

                        dd if=/dev/zero of=/dev/mtd1 bs=1024 count=0x00600000

                NOTE: The size used here is set by ____.

                This space is made into an FS2 disk disk and mounted.
                Then the home and var archives are restored into
                the space.

                        mount -t ext2 -o sync /dev/mtdblock1 /home
                        cd /
                        tar xf /root/.home_default.tar
                        cd /home/system
                        tar xf /root/.var_default.tar

        8c) 'oncheck -clear' is run to clear the cold hardware boot flag.

        If the sytem has been worm booted:

        8a) /dev is recreated just like above

        8b) The file system is check:

                e2fsck -y -f /dev/mtdblock1

                If this check goes bad an error messages printed to the
                user and the file systems are unmonted and the system
                is rebooted.

                If the file system check goes good /home is mounted.

9) The loopback network device is setup

10) The hostname is set.

11) Module dependices are check

12) rc.modules and rc.serial are run

13) /var/lock/* and /var/run/* are removed