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。

  • 相关阅读:
    INSERT VALUES 语句
    SQL Server UNION
    SQL Server自定义函数(Scalarvalued Functions)
    设计一程序(Copy.java),可以实现文件的复制操作
    Eclipse 乱码 解决方案总结(UTF8 GBK)
    Java Collection: List、Set、 Map、 HashMap、 Hashtable、 Vector
    [Linux内核]从开机加电到main函数执行前的过程
    eclipse设置本地Javadoc API路径
    归并排序的递归和非递归实现(C代码)
    解决安装MySQL5.1出现Cannot create windows service for mysql.error:0
  • 原文地址:https://www.cnblogs.com/Ocean-Star/p/9236064.html
Copyright © 2011-2022 走看看