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

    1. Linux内核源码下载

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

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

    这里我创建了新的工作文件夹,将其解压在该文件夹中,

    mkdir LinuxKernel
    cd LinuxKernel
    xz -d linux-5.0.1.tar.xz tar -xvf linux-5.0.1.tar
    cd linux-5.0.1

    2.安装内核编译工具

    sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev

    可能会出现如下情况:

    这里只需

    sudo apt-get update

    进行软件源更新即可,继续执行:

     配置编译内核:

    make menuconfig

    接下来需要进行简单的配置,依次选择

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

    Save后一直Exit到命令行界面即可,之后进行编译:

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

    可以选择升级当前系统内核,注意该升级过程可能会导致系统崩溃,如果要升级记得提前系统备份。

    sudo make modules_install
    sudo make install
    sudo update-grub
    reboot 
    uname -a

    3. 构建MenuOS

    QEMU虚拟机加载内核:

    cd ~/LinuxKernel
    sudo apt install qemu

    构造MenuOS系统:

    git clone https://github.com/mengning/menu.git
    mkdir rootfs
    cd menu
    sudo apt-get install libc6-dev-i386

    这里需要编辑一下menu目录下Makefile文件夹内容,

     然后在~/LinnuxKernel/menu路径下执行

    make rootfs

    成功后可以看到如下界面:

     4. 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

    结果如图:

     5. 构造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

    可以看到断点处的代码,如下:

  • 相关阅读:
    Spring 源代码阅读之声明式事务
    Spring+Hibernate实现动态SessionFactory切换
    Servlet 启动顺序
    更改Request Parameters中的值
    在web.xml中配置404错误拦截
    Eclipse Debug Daemon Thread
    Eclipse validation
    零拷贝技术_转载
    Java Properties
    shiro框架中调用service失败(也就是bean注入失败)
  • 原文地址:https://www.cnblogs.com/seanloveslife/p/12018689.html
Copyright © 2011-2022 走看看