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

    1.下载linux kernel源码,并配置所需库

    mkdir linuxkernel

    mkdir linuxkernel
    
    cd linuxkernel
    
    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-get install aptitude  //我的ubuntu版本使用apt-get来安转内核编译所需库会出现依赖问题,所以我使用 aptitude来安装
    
    sudo aptitude install build-essential flex bison libssl-dev libelf-dev libncurses-dev
    
    make i386_defconfig

    截止目前:

    2.配置debug信息

    make menuconfig 进入GUI界面

    kernel hacking-->compile-time checks and compiler options -->[]compile the kernel with debug info-->按Y-->save-->esc退出GUI界面

    3.编译 

    make

     制作根文件系统:

    1)安装qemu命令:

    sudo apt install qemu

    2)构造menuOS

    git clone https://github.com/mengning/menu.git
    
    mkdir rootfs
    
    //安装libc6-dev-i386
    
    sudo apt-get install libc6-dev-i386
    
    //修改MakeFile
    
    qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img #修改前 qemu-system-i386 -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img #修改后
    
    make rootfs

     4.验证MenuOS的网络 

    1)将TCP网络通信程序的服务端集成到MenuOS系统中

    cd linuxkernel
    
    git clone https://github.com/mengning/linuxnet.git
    
    cd linuxnet/lab2
    
    make
    
    cd ../../menu
    
    make rootfs

    2)将TCP网络通信程序的客户端集成到MenuOS系统中

    cd linuxkernel
    cd linuxnet/lab3
    sudo vim Makefile  //修改makefile
    //未修改之前qemu -kernel ../../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img
    //修改之后 qemu-system-x86_64 -kernel ../../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img
    make rootfs

    //在GUI中输入replyhi,输入hello,收到hi,证明MenuOS网络正常工作。

    5.gdb调试

    1)重启QEMU

    cd linuxkernel/menu
    
    sudo vim Makefile //修改Makefile
    
    #qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S
    
    make rootfs

    结果:

    2)连接gdb server并调试
    重开终端:
    gdb
    file ~/linuxkernel/linux-5.0.1/vmlinux
    target remote:1234
    #设置断点对start_kernel进行跟踪
    break start_kernel
    c #继续运行
    list #查看上下文

     结果显示gdb可以追踪到start_kernel函数,断点在init/mian.c的538行

    继续在rest_init处设置断点

    break rest_init
    
    c

    断点在init/mian.c的402行

  • 相关阅读:
    Python Revisited Day 13 (正则表达式)
    Python Revisited Day 06 (面向对象程序设计)
    Python Revisited (变量)
    Python Revisited Day 05(模块)
    Python Revisited Day 04 (控制结构与函数)
    Python Revisited Day 03 (组合数据类型)
    Numpy
    Python Revisited Day 01
    Python3使用openpyxl读写Excel文件
    Python3操作YAML文件
  • 原文地址:https://www.cnblogs.com/zxy1122/p/12007375.html
Copyright © 2011-2022 走看看