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 在何处打印出来。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值