动静结合学内核:linux idle进程和init进程浅析

asmlinkage __visible void __init start_kernel(void){…//初始化0号进程pcbset_task_stack_end_magic(&init_task);…/* 当只有一个CPU的时候这个函数就什么都不做,,但是如果有多个CPU的时候那么它就* 返回在启动的时候的那个CPU的号*/ smp_setup_processor_id();…/* 关闭当前CPU的中断 */ local_irq_disable();early_boot_irqs_disabled = true;…/* 初始化页地址,使用链表将其链接起来 */page_address_init();/* 显示内核的版本信息 */ pr_notice("%s", linux_banner);/* * 每种体系结构都有自己的setup_arch()函数,是体系结构相关的,具体编译哪个 * 体系结构的setup_arch()函数,由源码树顶层目录下的Makefile中的ARCH变量 * 决定 */ setup_arch(&command_line);…/* 打印Linux启动命令行参数 */ pr_notice("Kernel command line: %s\n", boot_command_line);/* 对内核选项的两次解析 */ parse_early_param();after_dashes = parse_args("Booting kernel",static_command_line, __start___param,__stop___param – __start___param,-1, -1, &unknown_bootoption);if (!IS_ERR_OR_NULL(after_dashes))parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,set_init_arg);jump_label_init();…/* 初始化hash表,便于从进程的PID获得对应的进程描述符指针 */ pidhash_init();/* 虚拟文件系统的初始化 */ vfs_caches_init_early();sort_main_extable();/* * trap_init函数完成对系统保留中断向量(异常、非屏蔽中断以及系统调用)* 的初始化,init_IRQ函数则完成其余中断向量的初始化 */ trap_init();mm_init();/* 进程调度器初始化 */ sched_init();preempt_disable();/* 检查中断是否已经打开,如果已经打开,则关闭中断 */ if (WARN(!irqs_disabled(),"Interrupts were enabled *very* early, fixing it\n"))local_irq_disable();…/* init some links before init_ISA_irqs() */early_irq_init();init_IRQ();tick_init();rcu_init_nohz();init_timers();/* 对高精度时钟进行初始化 */ hrtimers_init();/* 初始化tasklet_softirq和hi_softirq */ softirq_init();timekeeping_init();/* 初始化系统时钟源 */ time_init();sched_clock_postinit();perf_event_init();profile_init();call_function_init();WARN(!irqs_disabled(), "Interrupts were enabled early\n");early_boot_irqs_disabled = false;local_irq_enable();/* slab初始化 */ kmem_cache_init_late();/* * 初始化控制台以显示printk的内容,在此之前调用的printk * 只是把数据存到缓冲区里 */console_init();if (panic_later)panic("Too many boot %s vars at `%s'", panic_later,panic_param);lockdep_info();…/* * CPU性能测试函数,可以计算出CPU在1s内执行了多少次一个 * 极短的循环,计算出来的值经过处理后得到BogoMIPS值(Bogo是Bogus的意思), */ calibrate_delay();pidmap_init();…/* 创建init进程 */ rest_init();//66 analysis 0 #, never return …}

你会发现,曾经以为很难做到的事情,

动静结合学内核:linux idle进程和init进程浅析

相关文章:

你感兴趣的文章:

标签云: