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)