From: Nuno L. <lu...@xp...> - 2005-05-09 16:51:38
|
[09-05-2005 3:07, Arvind Chandra escreveu] [...] > co_winnt_main has a parameter passed to it. This is > the command line. Now question1 how does it get it's > arguments when we start colinux by starting the > service? The service has parameters like any other program. They are set at service installation time. Take a look at os/winnt/user/daemon/service.c. > First thing co_winnt_main does is prints header. This > is just the information about daemon like when it was > when it compiled. We use co_terminal_print for > this. Now question2 where this get's printed. Then it Not sure if I understood your question, but it gets printed on the console window, if any available (with services there is no visible console window, off course). [...] > a. Loads address of symbols like _kernel_start, _end, > init_thread_union. Also it loads address and data for > co_info and co_arch_info. Not sure why we need > that information? This is question3. It loads those sections because the kernel driver will execute them. > b. It creates net mac address. > c. It then creates user monitor using > co_user_monitor_create. Now what is the difference > between user monitor and daemon monitor. This is > question4. I don't think there's much, the code is a little confused here. > d. Next step I presume is the key step as to how > windows and colinux share address space. > daemon->shared = (co_monitor_user_kernel_shared_t > *)create_params.shared_user_address; Still not sure > how it works. No, this shared memory is for sharing memory between the kernel driver and user daemon, not for sharing colinux memory. [...] > Now how this flag is set and reset so that launching > of console can be controlled. This is question4. Now > co_daemon_run comes to the loop which runs. This flag is given to the daemon by adding a "-t nt" or "-t fltk" or by "-d" (which will make the console to not appear - for services). By default it will always start a console (the fltk console by default). > colinux get's complete access to the hardware at some > point of time and windows get's that at some point of > time. But somehow in the whole process above I > missed that step. When colinux does context switching. colinux has complete access to the hardware because it runs at ring 0, but it *NEVER* *SHOULD* access it, or risk crashing the whole machine. That's why we need to patch the linux kernel, exactly to avoid it from making that access. The context switching is made at the windows kernel driver, not in the daemon, which only instructs the driver to make it. I think you should look at lxr.xpto.ath.cx. There you have a full cross-reference of the colinux code and the colinux kernel. It is a home server, so expect some downtime and/or slow access from time to time (but it's usually fast enough). By the way, have you read the paper[1] and slides[2] on colinux working? It should help you to get a grasp on how it works. Best regards, ~Nuno Lucas [1] http://www.colinux.org/publications/Reprint-Aloni-OLS2004.pdf [2] http://www.colinux.org/publications/coLinux-Japan-2004.sxi |