Sophie

Sophie

distrib > Mandriva > 2010.1 > x86_64 > by-pkgid > 965e33040dd61030a94f0eb89877aee8 > files > 2769

howto-html-en-20080722-2mdv2010.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>KernelAnalysis-HOWTO: Linux Startup</TITLE>
 <LINK HREF="KernelAnalysis-HOWTO-5.html" REL=next>
 <LINK HREF="KernelAnalysis-HOWTO-3.html" REL=previous>
 <LINK HREF="KernelAnalysis-HOWTO.html#toc4" REL=contents>
</HEAD>
<BODY>
<A HREF="KernelAnalysis-HOWTO-5.html">Next</A>
<A HREF="KernelAnalysis-HOWTO-3.html">Previous</A>
<A HREF="KernelAnalysis-HOWTO.html#toc4">Contents</A>
<HR>
<H2><A NAME="s4">4. Linux Startup</A></H2>

<P>We start the Linux kernel first from C code executed from ''startup_32:''
asm label:
<P>
<P>
<PRE>
|startup_32:
   |start_kernel
      |lock_kernel
      |trap_init
      |init_IRQ
      |sched_init
      |softirq_init
      |time_init
      |console_init 
      |#ifdef CONFIG_MODULES 
         |init_modules 
      |#endif 
      |kmem_cache_init 
      |sti 
      |calibrate_delay 
      |mem_init
      |kmem_cache_sizes_init
      |pgtable_cache_init
      |fork_init
      |proc_caches_init 
      |vfs_caches_init
      |buffer_init
      |page_cache_init
      |signals_init 
      |#ifdef CONFIG_PROC_FS 
        |proc_root_init 
      |#endif 
      |#if defined(CONFIG_SYSVIPC) 
         |ipc_init
      |#endif 
      |check_bugs      
      |smp_init
      |rest_init
         |kernel_thread
         |unlock_kernel
         |cpu_idle
</PRE>
<P>
<UL>
<LI>startup_32 [arch/i386/kernel/head.S]</LI>
<LI>start_kernel [init/main.c]</LI>
<LI>lock_kernel [include/asm/smplock.h]</LI>
<LI>trap_init [arch/i386/kernel/traps.c]</LI>
<LI>init_IRQ [arch/i386/kernel/i8259.c]</LI>
<LI>sched_init [kernel/sched.c]</LI>
<LI>softirq_init [kernel/softirq.c]</LI>
<LI>time_init [arch/i386/kernel/time.c]</LI>
<LI>console_init [drivers/char/tty_io.c]</LI>
<LI>init_modules [kernel/module.c]</LI>
<LI>kmem_cache_init [mm/slab.c]</LI>
<LI>sti [include/asm/system.h]</LI>
<LI>calibrate_delay [init/main.c]</LI>
<LI>mem_init [arch/i386/mm/init.c]</LI>
<LI>kmem_cache_sizes_init [mm/slab.c]</LI>
<LI>pgtable_cache_init [arch/i386/mm/init.c]</LI>
<LI>fork_init [kernel/fork.c]</LI>
<LI>proc_caches_init </LI>
<LI>vfs_caches_init [fs/dcache.c]</LI>
<LI>buffer_init [fs/buffer.c]</LI>
<LI>page_cache_init [mm/filemap.c]</LI>
<LI>signals_init [kernel/signal.c]</LI>
<LI>proc_root_init [fs/proc/root.c]</LI>
<LI>ipc_init [ipc/util.c]</LI>
<LI>check_bugs [include/asm/bugs.h]</LI>
<LI>smp_init [init/main.c]</LI>
<LI>rest_init</LI>
<LI>kernel_thread [arch/i386/kernel/process.c]</LI>
<LI>unlock_kernel [include/asm/smplock.h]</LI>
<LI>cpu_idle [arch/i386/kernel/process.c]
</LI>
</UL>
<P>The last function ''rest_init'' does the following:
<P>
<P>
<OL>
<LI>launches the kernel thread ''init''</LI>
<LI>calls unlock_kernel</LI>
<LI>makes the kernel run cpu_idle routine, that will be the idle
loop executing when nothing is scheduled
</LI>
</OL>
<P>In fact the start_kernel procedure never ends. It will execute
cpu_idle routine endlessly.
<P>
<P>Follows ''init'' description, which is the first Kernel Thread:
<P>
<P>
<PRE>
|init
   |lock_kernel
   |do_basic_setup
      |mtrr_init
      |sysctl_init
      |pci_init
      |sock_init
      |start_context_thread
      |do_init_calls
         |(*call())-&gt; kswapd_init
   |prepare_namespace
   |free_initmem
   |unlock_kernel
   |execve
</PRE>
<HR>
<A HREF="KernelAnalysis-HOWTO-5.html">Next</A>
<A HREF="KernelAnalysis-HOWTO-3.html">Previous</A>
<A HREF="KernelAnalysis-HOWTO.html#toc4">Contents</A>
</BODY>
</HTML>