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

    构建调试Linux内核网络代码的环境MenuOS系统

    1 . 下载,配置内核编译为32位

    //先通过网站下载源码 https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz
    //或者执行
    wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz
    xz -d linux-5.0.1.tar.xz   //对文件进行解压
    tar -xvf linux-5.0.1.tar
    cd linux-5.0.1   
    sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev // 安装内核编译工具
    make i386_defconfig //生成32位x86的配置文件
    
    

    2.配置内核可以进行debug

    make menuconfig
    1:选择 Kernel hacking
    2:选择 Compile-time checks and compiler options
    3:	选择 [ ]Compile the kernel with debug info 
    4:	按Y选择该选项  [*] Compile the kernel with debug info 
    5:选择 save
    6:按 esc,直到退出图形化界面
    

    3.编译

    make//编译,等待⌛️
    

    4.升级当前系统内核

    //按照该方法,发现reboot不了,所以先跳过,系统的内核好像和qemu装入的内核没太大关系
    sudo make modules_install # ⚠️安装前通过系统快照备份系统,以防出现故障前功尽弃
    sudo make install
    sudo update-grub
    reboot
    uname -a
    Linux ubuntu 5.0.1 #1 SMP Wed Mar 13 14:19:31 CST 2019 x86_64 x86_64 x86_64 GNU/Linux
    
    

    5.通过QEMU虚拟机加载内核

    sudo apt install qemu
    qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage # make i386_defconfig
    

    6.构造MenuOS

    git clone https://github.com/mengning/menu.git 
    cd menu
    sudo apt-get install libc6-dev-i386 # 在64位环境下编译32位需安装
    make rootfs       #制作根文件系统
    cd .. 
    qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img # make i386_defconfig			#加载32位内核刀quem
    qemu-system-x86_64 -kernel linux-5.0.1/arch/x86_64/boot/bzImage  -initrd rootfs.img #加载64位内核(这里采用32位)所以执行该条
                                   
    

    7.构建Linux内核的gdb调试环境

    #前面已经编译内核是携带了debug信息
    qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append  nokaslr -s -S   
    #开启另外一个终端
    gdb 
    file ~/linux-5.0.1/vmlinux
    break start_kernel #设置断点
    c  #继续执行
    

    8.构建MenuOS的网络功能

    #将TCP网络通信程序的服务端集成到 MenuOS 系统中
    git clone https://github.com/mengning/linuxnet.gitcd 
    cd linuxnet/lab2
    make 
    cd linuxnet/lab3 
    make rootfs  #内含加载内核qemu
    

    搭建好后测试结果如下:


    在start_kernel、sys_socketcall设置gdb调试断点

  • 相关阅读:
    NPIV介绍
    PowerShell随笔2_分支 选择 循环 特殊变量
    socket编程原理
    Linux查看物理CPU个数、核数、逻辑CPU个数
    Markdown 使用指南
    Linux Socket
    YoutubeAPI使用
    Youtube API数据类型
    Linux wpa_cli 调试方法
    linux网络编程
  • 原文地址:https://www.cnblogs.com/HMYaa/p/12022715.html
Copyright © 2011-2022 走看看