• 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。

  • 相关阅读:
    【网络安全】telnet 登陆远程服务器
    【网络安全】window 快速搭建 ftp 及 多种访问方式
    科普:PCI-E插槽都有哪些样子?
    Memory及其controller芯片整体测试方案(下篇)
    Memory及其controller芯片整体测试方案(上篇)
    超通俗易懂科普:什么是光通信?
    PCB各层介绍及AD软件画PCB时的规则
    第一次接触FPGA至今,总结的宝贵经验
    嵌入式码农的10年Bug调试经验,值得一看
    做嵌入式驱动的,你一定要挺住!
  • 原文地址:https://www.cnblogs.com/Ocean-Star/p/9236064.html
Copyright © 2020-2023  润新知