• 2020-2021-1 20209310 《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
    
    1. 制作根文件系统
      代码如下:
    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
    
    1. 对内核进行跟踪调试,重新配置编译Linux内核
      输入以下命令:
      make menuconfig
      出现错误:

      把缺少的部分安装上:
      sudo apt-get install libncurses5-dev
      重新配置编译linux内核:
    make menuconfig 
    make
    

    4.使用gdb跟踪调试linux内核的启动过程
    启动内核:
    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -S -s

    • -S:使CPU初始化之前冻结起来
    • -s:在1234端口上创建了一个gdb-server,然后可以另开一个窗口,用gdb把带有符号表的内核镜像加载进来,再连接gdb-server,设置断点跟踪内核。
      如下图所示,内核被冻结。

    再打开一个窗口,启动gdb,把内核加载进来,建立连接,指令如下:

    file linux-3.18.6/vmlinux  
    target remote:1234 
    

    在start_kernel处设置断点,指令如下:
    break start_kernel
    查看start_kernel函数:

    在rest_init处设置断点,指令如下:
    break rest_init
    查看rest_init函数:

  • 相关阅读:
    Ocelot简易教程(二)之快速开始1
    Ocelot简易教程(一)之Ocelot是什么
    InfluxDB学习之InfluxDB的基本操作
    InfluxDB入门教程
    .NET Core微服务之基于App.Metrics+InfluxDB+Grafana实现统一性能监控
    .net Core 微服务
    IdentityServer4 接口说明
    WINDOWS命令行关闭本地占用的端口
    并发负载压力测试
    C#操作Mongodb
  • 原文地址:https://www.cnblogs.com/bestYZF/p/13912245.html
Copyright © 2020-2023  润新知