zoukankan      html  css  js  c++  java
  • 2020-2021-1 202029325 《Linux内核原理与分析》第四周作业

    跟踪分析Linux内核的启动过程

    下面的实验步骤是在自己的虚拟机中做的。

    1.下载内核源码

    代码如下:

    mkdir LinuxKernel
    cd LinuxKernel
    wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz
    xz -d linux-3.18.6.tar.xz
    tar -xvf linux-3.18.6.tar
    cd linux-3.18.6
    


    将compiler-gcc5.h复制重命名为compiler-gcc9.h后放入该文件夹中

    make i386_defcongig
    make
    

    2.制作根文件系统

    代码如下:

    mkdir rootfs
    git clone https://github.com/mengning/menu.git
    cd menu
    gcc -pthread -o init linktable.c menu.c test.c -m32 -static
    cd ../rootfs
    cp ../menu/init ./
    find . | cpio -o -Hnewc |gzip -9 > ../rootfs.img
    

    3.启动linux内核和Mennuos

    自己环境中没有安装qemu,使用代码安装:
    sudo apt-get install qemu
    安装后,仍然发现没找不到qemu,查阅资料后找到问题可能是qemu版本问题,重新安装qemu,问题解决:
    sudo apt-get install qemu-system-i386

    然后使用图形化界面的虚拟机启动

    cd LinuxKernel/
    sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu
    


    重新配置编译Linux内核

    make menuconfig
    make
    

    4.使用gdb跟踪调试Linux内核的启动过程

    在配置好的qemu中启动内核使用如下命令:
    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s
    使用gdb跟踪调试内核是使用-S,-s两个参数,-s是在1234端口上创建了一个gdb-server,可以打开另一个窗口把带有符号表的内核镜像加载进来,然后连接gdb server,设置断点进行跟踪。
    打开另一个串口使用gdb,使用如下命令:

    file linux-3.18.6/vmlinux
    target remote:1234
    break start_kernel
    

    加载内核并通过端口1234进行调试,在内核开始的start_kernel函数入口处设置断点,如下图:

    找到内核启动的起点start_kernel函数所在的main.c,观察start_kernel函数中的init_task变量,相当于之前分析mykernel时的第一个PCB,另外rest_init,内核启动完成后,有一个call_cpu_idle,当系统没有进程需要执行时就调用idle进程,rest_init是0号进程,它创建了1号进程init和其他的一些服务进程。断点rest_init如下图所示:

    下面演示gdb跟踪过程(直到运行到rest_init):







  • 相关阅读:
    转:发一个自己用过的makefile .
    转:TCP/IP协议选项——TCP_KEEPALIVE .
    转:Socket常用选项
    转:sock_ev——linux平台socket事件框架(event loop) .
    Spring Boot logback
    Spring Boot 连接池
    Spring Boot AOP
    spring boot 配置 freemarker
    maven package install deploy
    idea下maven项目打包
  • 原文地址:https://www.cnblogs.com/journey97/p/13899187.html
Copyright © 2011-2022 走看看