zoukankan      html  css  js  c++  java
  • 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内核启动的入口
    -在该函数被调用之前,内核代码主要是用汇编语言写的
    -该函数初始化了整个系统的内核,是所有进程的祖先
  • 相关阅读:
    UVALive 6909 Kevin's Problem 数学排列组合
    UVALive 6908 Electric Bike dp
    UVALive 6907 Body Building tarjan
    UVALive 6906 Cluster Analysis 并查集
    八月微博
    hdu 5784 How Many Triangles 计算几何,平面有多少个锐角三角形
    hdu 5792 World is Exploding 树状数组
    hdu 5791 Two dp
    hdu 5787 K-wolf Number 数位dp
    hdu 5783 Divide the Sequence 贪心
  • 原文地址:https://www.cnblogs.com/j1551163790/p/11629195.html
Copyright © 2011-2022 走看看