bios bootloader loads grub bootloader (/boot/boot/grub/*) loads FS drivers loads and runs kernel kernel (src/kernel/* -> /boot/atheos/sys/kernel.so) kernel boots in function SysInit in src/kernel/kernel/init.c: execve "/boot/atheos/sys/bin/init init" -> runs init init (src/utils/systools/init.c -> /boot/atheos/sys/bin/init) init forks: -> child runs appserver -> parent runs /system/init.sh APPSERVER (more info) appserver (src/system/appserver/* [main() in server/server.cpp] -> /boot/atheos/sys/appserver) loads config file from /system/config/appserver initialises keyboard creates pcDevice = new AppServer constructor loads default fonts calls pcDevice->Run { creates port "gui_server_cmd" init_desktops() (in desktop.cpp) { looks in /system/drivers/appserver/video/ and loads each driver in turn, stopping when one works if it doesn't find one, uses the vesa 2.0 driver } InitInputSystem() (in input.cpp) { looks in /system/drivers/appserver/input/ and loads each driver in turn if it doesn't find a mouse driver, uses DosMouseDriver (?) } main loop { wait for msg on gui_server_cmd port processes message in AppServer::DispatchMessage( Message* pcReq); } // main loop } // pcDevice->Run USER MODE INITIALISATION - INIT.SH ONWARDS init.sh sets up paths if /bin/desktop exists -> /bin/desktop & else -> aterm & runs /system/user_init.sh user_init.sh symlinks links /root to /home/root sets /var/log/kernel as kernel log runs ifconfig for each network interface adds default route out eth0 starts all server daemons (calls these by default if they are installed: named inetd crond apachectl)