parse_args("Bootingkernel", static_command_line, __start___param,
__stop___param - __start___param,
&unknown_bootoption);
这行代码主要对传入内核参数进行解释,如果不能识别的命令就调用最后参数的函数。
if(!irqs_disabled()) {
printk(KERN_WARNING"start_kernel(): bug: interrupts were "
"enabled*very* early, fixing it\n");
local_irq_disable();
}
这段代码主要判断是否过早打开中断,如果是这样,就会提示,并把中断关闭。
sort_main_extable();
这个函数是对内核内部的异常表进行堆排序,以便加速访问。
trap_init();
这个函数是对异常进行初始化,在ARM系统里是空函数,没有任何的初始化。
rcu_init();
这个函数是初始化直接读拷贝更新的锁机制。RCU主要提供在读取数据机会比较多,但更新比较的少的场合,这样减少读取数据锁的性能低下的问题。
init_IRQ();
这个函数是初始化中断相关的工作,主要初始化中断描述数组,然后调用每个CPU架构中断初始化。
pidhash_init();
这个函数是进程ID的HASH表初始化,这样可以提供通PID进行高效访问进程结构的信息。LINUX里共有四种类型的PID,因此就有四种HASH表相对应。
init_timers();
这个函数是主要初始化引导CPU的时钟相关的数据结构,注册时钟的回调函数,当时钟到达时可以回调时钟处理函数,最后初始化时钟软件中断处理。
hrtimers_init();
这个函数是初始化高精度的定时器,并设置回调函数。
softirq_init();
这个函数是初始化软件中断,软件中断与硬件中断区别就是中断发生时,软件中断是使用线程来监视中断信号,而硬件中断是使用CPU硬件来监视中断。
timekeeping_init();
这个函数是初始化系统时钟计时,并且初始化内核里与时钟计时相关的变量。
time_init();
这个函数是初始化系统时钟。
sched_clock_init();
这个函数是系统进程调度时钟初始化。
profile_init();
这个函数是分配内核性能统计保存的内存,以便统计的性能变量可以保存到这里。
if(!irqs_disabled())
printk("start_kernel():bug: interrupts were enabled early\n");
这两行代码是提示中断是否过早地打开。
early_boot_irqs_on();
这个函数是设置内核还在早期初始化阶段的标志,以便用来调试时输出信息。
local_irq_enable();
这个函数是打开本CPU的中断,也即允许本CPU处理中断事件,在这里打开引CPU的中断处理。如果有多核心,别的CPU还没有打开中断处理。