fly.wang 发表于 2006-3-20 17:30:30

内核代码?

哪位高手帮忙分析一下下面的程序: :roll:
asmlinkage void __init start_kernel(void)
{
        char * command_line;
        extern char saved_command_line[];
/*
* Interrupts are still disabled. Do necessary setups, then
* enable them
*/
        lock_kernel();
        printk(linux_banner);
        setup_arch(&command_line);
        printk("Kernel command line: %s\n", saved_command_line);
        parse_options(command_line);
        trap_init();
        init_IRQ();
        sched_init();
        softirq_init();
        time_init();

        /*
       * HACK ALERT! This is early. We're enabling the console before
       * we've done PCI setups etc, and console_init() must be aware of
       * this. But we do want output early, in case something goes wrong.
       */
        console_init();
#ifdef CONFIG_MODULES
        init_modules();
#endif
        if (prof_shift) {
                unsigned int size;
                /* only text is profiled */
                prof_len = (unsigned long) &_etext - (unsigned long) &_stext;
                prof_len >>= prof_shift;
               
                size = prof_len * sizeof(unsigned int) + PAGE_SIZE-1;
                prof_buffer = (unsigned int *) alloc_bootmem(size);
        }

        kmem_cache_init();
        sti();
        calibrate_delay();
#ifdef CONFIG_BLK_DEV_INITRD
        if (initrd_start && !initrd_below_start_ok &&
                        initrd_start < min_low_pfn << PAGE_SHIFT) {
                printk(KERN_CRIT "initrd overwritten (0x%08lx < 0x%08lx) - "
                  "disabling it.\n",initrd_start,min_low_pfn << PAGE_SHIFT);
                initrd_start = 0;
        }
#endif
        mem_init();
        kmem_cache_sizes_init();
        pgtable_cache_init();

        /*
       * For architectures that have highmem, num_mappedpages represents
       * the amount of memory the kernel can use.For other architectures
       * it's the same as the total pages.We need both numbers because
       * some subsystems need to initialize based on how much memory the
       * kernel can use.
       */
        if (num_mappedpages == 0)
                num_mappedpages = num_physpages;

        fork_init(num_mappedpages);
        proc_caches_init();
        vfs_caches_init(num_physpages);
        buffer_init(num_physpages);
        page_cache_init(num_physpages);
#if defined(CONFIG_ARCH_S390)
        ccwcache_init();
#endif
        signals_init();
#ifdef CONFIG_PROC_FS
        proc_root_init();
#endif
#if defined(CONFIG_SYSVIPC)
        ipc_init();
#endif
        check_bugs();
        printk("POSIX conformance testing by UNIFIX\n");

        /*
       *        We count on the initial thread going ok
       *        Like idlers init is an unlocked kernel thread, which will
       *        make syscalls (and thus be locked).
       */
        smp_init();
        rest_init();
}
页: [1]
查看完整版本: 内核代码?