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


    知识点:

    linux内核源代码结构:

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

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

    init目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件。这是研究核心如何工作的好起点。 

    mm目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下。 

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

    ipc目录包含了核心进程间的通信代码。 

    modules目录存放了已建好的、可动态加载的模块。 

    fs目录存放Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3文件系统对应的就是ext3子目录。 

    Kernel内核管理的核心代码放在这里。同时与处理器结构相关代码都放在arch/*/kernel目录下。 

    net目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面。 

    lib目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch/*/lib/目录下。 

    scripts目录包含用于配置核心的脚本文件。 

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

    实验:

    构造一个简单的Linux系统MenuOS

     使用如下命令打开MenuOS

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

    可以看到就相当于打开了一个简单的终端。

    输入help可见其只有三条命令help、version、quit。

    GDB单步跟踪

    1. qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明:
    2. # -S freeze CPU at startup (use ’c’ to start execution)
    3. # -s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

    另开一个shell窗口

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

     

    刚开始代码并没有被运行

    gdb调试

    start_kernel函数分析

    • 该函数是Linux内核的入口。
    • start_kernel()是内核的汇编与C语言的交接点,在该函数以前,内核的代码都是用汇编写的,完成一些最基本的初始化与环境设置工作。
    • 在start_kernel()中Linux将完成整个系统的内核初始化。内核初始化的最后一步就是启动init进程,这个所有进程的祖先。
    • 不管分析内核那一部分都会涉及到start_kernel,因为几乎所有模块在初始化时都会调用它。
  • 相关阅读:
    - viewDidLoad 和
    C#实现excel导入到sql server 2008(.net版)
    Windows PE 第十章 加载配置信息
    Windows PE第九章 线程局部存储
    Windows PE第九章 线程局部存储
    Windows PE 第八章 延迟加载导入表
    Windows PE 第八章 延迟加载导入表
    Windows PE资源表编程(枚举资源树)
    Windows PE资源表编程(枚举资源树)
    欺骗的艺术-读后总结
  • 原文地址:https://www.cnblogs.com/huyufeng/p/5269296.html
Copyright © 2020-2023  润新知