zoukankan      html  css  js  c++  java
  • 2.16.8.内核启动的C语言阶段5

    本节讲解start_kernel函数中剩余部分函数调用直到rest_init的部分,并无太多重点细节。

    2.16.8.1、setup_command_line

    (1)也是在处理和命令行参数cmdline有关的任务。

    2.16.8.2、parse_early_param&parse_args

    (1)解析cmdline传参和其他传参
    (2)这里的解析意思是把cmdline的细节设置信息给解析出来。譬如cmdline:console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3,则解析出的内容就是就是一个字符串数组,数组中依次存放了一个设置项目信息。
    console=ttySAC2,115200 一个
    root=/dev/mmcblk0p2 rw 一个
    init=/linuxrc 一个
    rootfstype=ext3 一个
    (3)这里只是进行了解析,并没有去处理。也就是说只是把长字符串解析成了短字符串,最多和内核里控制这个相应功能的变量挂钩了,但是并没有去执行。执行的代码在各自模块初始化的代码部分。

    2.16.8.3、杂碎

    (1)trap_init 设置异常向量表
    (2)mm_init 内存管理模块初始化
    (3)sched_init 内核调度系统初始化
    (4)early_irq_init&init_IRQ 中断初始化
    (5)console_init 控制台初始化
    总结:start_kernel函数中调用了很多的xx_init函数,全都是内核工作需要的模块的初始化函数。这些初始化之后内核就具有了一个基本的可以工作的条件了。
    如果把内核比喻成一个复杂机器,那么start_kernel函数就是把这个机器的众多零部件组装在一起形成这个机器,让他具有可以工作的基本条件。

    2.16.8.4、rest_init

    (1)这个函数之前内核的基本组装已经完成。
    (2)剩下的一些工作就比较重要了,放在了一个单独的函数中,叫rest_init。

    总结:start_kernel函数做的主要工作:打印了一些信息、内核工作需要的模块的初始化被依次调用(譬如内存管理、调度系统、异常处理···)、我们需要重点了解的就是setup_arch中做的2件事情:机器码架构的查找并且执行架构相关的硬件的初始化、uboot给内核的传参cmdline。

  • 相关阅读:
    死锁
    Hibernate—01
    POI
    线程 Thread
    SSH页面整合_01
    cnblogs安家了
    漫画:天堂里没有程序员!
    我又愿中国青年都只是向上走,不必理会这冷笑和暗箭!!!!!!!!
    一位信息系统项目管理培训老师写的《论婚姻项目管理》值得看一下!
    程序员保持健康的方法和经验
  • 原文地址:https://www.cnblogs.com/Ocean-Star/p/9236064.html
Copyright © 2011-2022 走看看