linux内核启动过程

  • 执行体系结构相关的设置代码:
    • 如果需要,解压缩并移动内核代码本身
    • 初始化硬件
      • 这可能包括底层内存管理的设置
    • 将控制权转交给函数 start_kernel()
  • start_kernel() 去执行以下事情(以及其他事情):
    • 打印内核版本和命令行
    • 启动控制台输出
    • 启用中断
    • 校准延迟循环
    • 调用 rest_init(),这个函数会:
      • 启动一个内核线程来运行 init() 函数
      • 进入空闲循环
  • init():
    • 启动其他处理器(在 SMP 机器上)
    • 启动设备子系统
    • 挂载 root 文件系统
    • 释放不使用的内核内存
    • 运行 /sbin/init(或者 /etc/init,或者...)

此时,用户级 init 程序正在运行;它将完成启动网络设备并在控制台上运行 getty (登录程序)等任务。

加入自己的 printk,并观察那个子系统的 printk 相对于自己的 printk 何时出现,就可以指出那个子系统是在 start_kernel() 中还是在 init() 中初始化的。例如,如果想要知道 ALSA 声音系统何时被初始化,那么将 printk 加入到 start_kernel()init() 的起始处,然后找到“Advanced Linux Sound Architecture [...]” 相对于您的 printk 在何处打印出来。


你可能感兴趣的:(linux,网络,REST,任务,linux内核)