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还没有打开中断处理。

更多相关文章

  1. C语言函数的递归(上)
  2. Android(安卓)APP 启动优化(冷启动)
  3. android用MediaCodeC将opengl绘制内容录制为一个mp4
  4. Android(安卓)StateMachine和AsyncChannel
  5. Android沉浸式通知栏
  6. Android(安卓)修改默认按键不震动
  7. 工作笔记-code
  8. Android系统的开机画面显示过程分析(7)
  9. Android(安卓)handler src track

随机推荐

  1. 利用读写锁实现sqlite多线程写的问题
  2. 急~~!!!sqlconnection连接SQL2005数据库总出
  3. iBatis中sqlmap resultclass="java.lang.
  4. 关于mysql对字符串的数字的排序
  5. 在MySQL中选择行作为列?
  6. MS ACCESS jdbc.odbc连接。未找到数据源
  7. QT 使用QSqlQuery时候的 错误,。。。。
  8. 字符集问题的初步探讨(五)----如何识别导
  9. SQL:ORDER BY`date`和START WHERE`value`
  10. MYSQL数据库的安装