• 第三周 构造一个简单的Linux系统MenuOS


    一.   Linux内核源代码简介

    稳定版内核:Linux-3.18.6

    Linux内核源代码的目录结构:

     

    arch目录:在Linux内核源代码里占有的比重很大,因为Linux内核支持很多的体系结构,而arch目录是支持不同的CPU的源代码.arch/x86目录下的代码是重点

    Documentation目录:文档目录

    fs目录:文件系统

    init目录:内核启动相关的代码基本都在init目录下,其中的main.c代码里的start_kernel函数相当于普通C程序的main函数

     

    ipc目录:进程间通信

    kernel目录:Linux内核的核心代码在kernel目录中

    lib目录:公用的库文件

    mm目录:内存管理的

    README目录:

     

    二.   构造一个简单的Linux系统

    l  使用实验楼的虚拟机打开shell

     

    内核启动完成后进入menu程序,支持三个命令help、version和quit

    l  通过gdb跟踪内核

    l  使用自己的Linux系统环境搭建MenuOS

     

    init是第一个用户态进程

    l  重新配置编译Linux使之携带调试信息

    1. 在原来配置的基础上,make menuconfig选中如下选项重新配置Linux,使之携带调试信息
    2. make重新编译(时间较长)

    l  使用gdb跟踪调试内核

     

    -S:CPU初始化之前把它冻结起来

    -s:端口上创建了一个gdbserver

    另开一个shell窗口

    三.   跟踪调试Linux内核的启动过程

    实验截图如下:

    简单分析一下start_kernel:

    init_task即手工创建的PCB,0号进程即最终的idle进程

    不管分析内核的哪一部分都会涉及到start_kernel

    trap_init():初始化一些中断

    当系统没有进程需要执行时就调度到idle进程

     

    四.总结

    init是第一个调用的使用标准C库编译的程序。在此之前,还没有执行任何标准的C应用程序。在桌面Linux系统上,第一个启动的程序通常是/sbin/init,它的进程号为1。init进程是所有进程的发起者和控制者,它有两个作用:
        (1)扮演终结父进程的角色:所有的孤儿进程都会被init进程接管。
        (2)系统初始化工作:如设置键盘、字体,装载模块,设置网络等。

    在完成系统初始化工作之后,init进程将在控制台上运行getty(登录程序)等任务,我们熟悉的登录界面就出现了。

  • 相关阅读:
    Android命名规范(重点讲解:包名)
    ADT中创建Android的Activity
    Android页面切换
    js技巧
    记一次查询超时的解决方案The timeout period elapsed......
    Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
    SQL索引详解
    php 微信公众号接入支付宝支付
    【MVC】关于Action返回结果类型的事儿(上)
    H5网站接入支付宝的支付接口
  • 原文地址:https://www.cnblogs.com/20135305yg/p/5251402.html
Copyright © 2020-2023  润新知