zoukankan      html  css  js  c++  java
  • 构建调试Linux内核网络代码的环境MenuOS系统

    一.Linux内核源码下载

    本实验采用linux-5.0.1源码,下载网址为 https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz

    下载完成后放入用户文件夹中,一般为home/用户名,

    这里我创建了新的工作文件夹,将其解压在该文件夹中,依次执行如下命令:

    
    
    mkdir LinuxKernel  #创建LinuxKernel目录
    cd LinuxKernel #进入创建的目录
    wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz #下载linux-5.0.1的内核
    xz -d linux-5.0.1.tar.xz
    tar -xvf linux-5.0.1.tar #解压缩
    cd linux-5.0.1 #进入linux-5.0.1目录
    
    


    二..安装内核编译工具
    1.执行如下命令:
    sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev
    
    

    安装完成后如下:

     2.配置编译内核

    make menuconfig

    出现界面进行配置

    Kernel hacking -> Compile-time checks and compiler options -> Compile the kernel with debug info 

    Save后一直Exit到命令行界面即可

    接下来进行编译

    make  #时间较长  可选择make -j*  (*为线程数)命令加快编译速度

     成功后如下:

    三.构建MenuOs

    QEMU虚拟机加载内核

    cd ~/LinuxKernel
    sudo apt install qemu

    下载MENU OS

    git clone https://github.com/mengning/menu.git
    mkdir rootfs
    cd menu
     修改Makefile文件,将3.18.6修改为5.0.1,如图所示:
    
    
    
     然后在~/LinnuxKernel/menu路径下执行
    make rootfs
     成功后出现如下界面:
    
    
    
    四. MenuOS完成TCP客户端和服务器端发送和接受hello/hi
    1.把程序集成到MenuOS:
    cd ~/LinuxKernel
    git clone https://github.com/mengning/linuxnet.git
    
    
    
     服务器端:
    cd linuxnet/lab2
    make
    cd ../../menu
    make rootfs
    
    
    
     

     客户端同上,集成lab3即可,这里需要修改一下lab3下Makefile的内容,修改内容同上:

    2.测试

    在MenuOS中输入以下命令:

    replyhi
    
    hello
    
    

     结果如下:

    五. 构造gdb调试环境

     关闭qemu虚拟机,修改menu目录下的Makefile文件,修改位置同上
    qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86_64/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S
    
    
    
     执行如下命令
    make rootfs
    
    
    
     此时会出现qemu会出现黑屏,等待gdb连接,如下图所示:
    
    
    
     

    接下来建立gdb与gdbserver之间的连接:

    
    

    打开一个新的命令窗口,执行gdb命令,进入调试:

    file ~/LinuxKernel/linux-5.0.1/vmlinux
    break start_kernel
    target remote:1234
    c 
    list
     可以看到如下断点处代码结果:
    
    
    


  • 相关阅读:
    SQL Server 索引基础知识(1) 记录数据的基本格式
    SQL语句优化技术分析
    AcceptEncoding: gzip,deflate
    用Delphi实现网络驱动器的映射和断开
    在DELPHI中HOOK程序的编写
    DelphiHookApi(经典)
    截获API
    窗体的扩展样式GWL_EXSTYLE:用于SetWindowLong
    delphi中WNetAddConnection2的使用
    Delphi中的线程类 TThread详解http://eelab.gxu.edu.cn/list.asp?unid=542
  • 原文地址:https://www.cnblogs.com/wwwxuexi/p/12031856.html
Copyright © 2011-2022 走看看