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行

  • 相关阅读:
    MySQL用户
    python -- 中
    Python -- 上
    Zabbix导入数据库时报错
    chmod无执行权限
    编译安装Tengine
    Nginx的调度算法
    nginx--第三方模块echo
    ngx_http_headers_module
    nginx---隐藏或添加后端服务器的信息
  • 原文地址:https://www.cnblogs.com/zxy1122/p/12007375.html
Copyright © 2011-2022 走看看