• 2019-2020-1 20199307《Linux内核原理与分析》第四周作业


    MenuOS的构造

    一:Linux内核源码结构

    linux内核源码如下(实验所用的linux-3.18.6版本)

    其中,arch目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。

    include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下。

    init目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件。

    drivers目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound。

    documentation目录下是一些文档,是对每个目录作用的具体说明。

    还比较重要的一些目录,例如lib目录种包含了核心的库代码、net目录种是核心的网络部分代码、mm目录包含了所有的内存管理代码、modules目录存放了已建好的并可动态加载的模块等等。

    二:构造一个简单的Linux系统MenuOS

    1.使用实验楼的虚拟机打开shell,并通过以下命令打开MenuOS

    -cd ~/LinuxKernel/
    -qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
    

    2.通过以下命令使用gdb跟踪调试内核

    -qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
    -s参数的作用分别是在1234端口上创建一个gdb-server,可以再另外打开一个窗口用gdb把带有符号表的内核镜像加载进来,然后连接gdb srever 设置断点追踪内核
    -S参数的作用是在CPU开始之前把他冻结起来。
    

    3.另外打开一个shell窗口,并输入以下命令

    -gdb
    -(gdb) file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表
    -(gdb) target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
    -(gdb) break start_kernel # 断点的设置可以在target remote之前,也可以在之后
    

    三:start_kernel函数分析

    -该函数相当于C语言中的main函数,是linux内核启动的入口
    -在该函数被调用之前,内核代码主要是用汇编语言写的
    -该函数初始化了整个系统的内核,是所有进程的祖先
  • 相关阅读:
    产品经理做产品设计的九步法
    产品经理要懂多少技术?
    产品经理如何注重细节意识的培养
    产品经理如何在技术人员面前更有说服力?
    从程序员到项目经理:每个人都是管理者
    我的人才管理方式
    一个关于内部类的小例子
    java中的全局变量与静态变量的区别与联系?有时候为什么专门定义静态变量。(标题党~~)
    举一反三,一小步。
    中国移动的企业文化 ,以及中国移动都有那些业务?
  • 原文地址:https://www.cnblogs.com/j1551163790/p/11629195.html
Copyright © 2020-2023  润新知