Android培训班(110)start_kernel函数7

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();

这个函数是进程IDHASH表初始化,这样可以提供通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还没有打开中断处理。

你可能感兴趣的:(数据结构,android,linux,工作,command)