<!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>Il Kernel di Linux inizia dal codice C eseguito a partire dall'etichetta assember ''startup_32:'': <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>L'ultima funzione ''rest_init'': <P> <P> <OL> <LI>lancia il Kernel Thread ''init''</LI> <LI>chiama ''unlock_kernel''</LI> <LI>Esegue il loop infinito ''cpu_idle'', in attesa che altri processi con maggiore priorita' vengano schedulati. </LI> </OL> <P>In effetti la funzione ''start_kernel'' non finisce mai. <P> <P>Segue la descrizione di init che e' il primo kernel_thread in esecuzione (che lanciera' poi tutti gli altri) <P> <P> <PRE> |init |lock_kernel |do_basic_setup |mtrr_init |sysctl_init |pci_init |sock_init |start_context_thread |do_init_calls |(*call())-> 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>