Chinaunix首页 | 论坛 | 博客
  • 博客访问: 342579
  • 博文数量: 72
  • 博客积分: 2130
  • 博客等级: 大尉
  • 技术积分: 857
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-05 16:10
文章分类

全部博文(72)

文章存档

2010年(5)

2009年(14)

2008年(53)

分类: LINUX

2008-11-11 13:48:00

asmlinkage void __init start_kernel(void)
{
        char * command_line;
        extern struct kernel_param __start___param[], __stop___param[];
/*
 * Interrupts are still disabled. Do necessary setups, then
 * enable them
 */
        lock_kernel();
        page_address_init();
        printk(linux_banner);
        setup_arch(&command_line);
        setup_per_cpu_areas();

        /*
         * Mark the boot cpu "online" so that it can call console drivers in
         * printk() and can access its per-cpu storage.
         */
        smp_prepare_boot_cpu();

        /*
         * Set up the scheduler prior starting any interrupts (such as the
         * timer interrupt). Full topology setup happens at smp_init()
         * time - but meanwhile we still have a functioning scheduler.
         */
        sched_init();

  /*
         * Disable preemption - early bootup scheduling is extremely
         * fragile until we cpu_idle() for the first time.
         */
        preempt_disable();
        build_all_zonelists();
        page_alloc_init();
        printk("Kernel command line: %s\n", saved_command_line);
        parse_early_param();
        parse_args("Booting kernel", command_line, __start___param,
                   __stop___param - __start___param,
                   &unknown_bootoption);
        sort_main_extable();
        trap_init();
        rcu_init();
        init_IRQ();
        pidhash_init();
        init_timers();
        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();


 if (panic_later)
                panic(panic_later, panic_param);
        profile_init();
        local_irq_enable();
#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
        vfs_caches_init_early();
        mem_init();
        kmem_cache_init();
        numa_policy_init();
        if (late_time_init)
                late_time_init();
        calibrate_delay();
        pidmap_init();
        pgtable_cache_init();
        prio_tree_init();
        anon_vma_init();
#ifdef CONFIG_X86
        if (efi_enabled)
                efi_enter_virtual_mode();
#endif
  fork_init(num_physpages);
        proc_caches_init();
        buffer_init();
        unnamed_dev_init();
        security_init();
        vfs_caches_init(num_physpages);
        radix_tree_init();
        signals_init();
        /* rootfs populating might need page-writeback */
        page_writeback_init();
#ifdef CONFIG_PROC_FS
        proc_root_init();
#endif
        check_bugs();

        acpi_early_init(); /* before LAPIC and SMP init */

        /* Do the rest non-__init'ed, we're now alive */
        rest_init();
}

阅读(1617) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~