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

    工作环境:虚拟机下Ubuntu18.04.3(64位)

    一、下载编译内核

    首先在主目录下创建Linux Kernel文件夹,然后下载内核,解压,命令如下:

    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

    这里有一个小建议:如果内核下载过慢,可以考虑换个源,方法:将/etc/apt/source.list拷贝,然后双击拷贝文件,点击其他,切换源(我用的是aliyu)

    安装编译内核所需要的依赖包,这里可以一起install,但是建议一条一条执行,条理清楚,不容易乱:

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

    编译内核

    cd /linux-5.0.1/
    sudo cp /boot/config-xxx -r .config #使用现存内核的配置文件:(xxx处使用TAB补全)
    sudo make oldconfig
    sudo make localmodconfig
    sudo make menuconfig

    出现如下界面:

    依次选择 Kernel hacking ->Compile-time checks and compiler options ->[ ]Compile the kernel with debug info,然后点击Y键,选择“save”,然后一路“exit”

    sudo make

    编译内核时间一般在30分钟左右

    如果想要升级内核可以键入以下命令(不建议随便升级内核)

    sudo make modules_install  安装modules
    sudo make install   #升级
    sudo shutdown -r now  #重启
    uname -a  #查看内核版本

    二、装载QEMU

    cd ..   #回到上个目录
    sudo apt install qemu #下载qemu
    qemu-system-x86_64 -kernel linux-5.0.1/arch/x86_64/boot/bzImage  #在64位环境下编译32位需安装
    mkdir rootfs  #制作qemu根目录
    git clone https://github.com/mengning/menu.git 
    cd menu
    sudo apt-get install libc6-dev-i386  #在64位环境下编译32位

    此时需要修改~/MenuOS/menu目录下Makefile文件下的一行内容,因为实验楼的系统是Linux 3.18.6,这里要改为5.0.1,修改之后如下qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86_64/boot/bzImage -initrd ../rootfs.img(注意在Makefile修改命令时开头需加上TAB键,否则会报错)

    make rootfs

    进入如下界面:输入help

     

    三、验证MenuOS的网络

    将TCP网络通信程序的服务端集成到MenuOS 系统中,命令如下

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

    再将TCP网络通信程序的客户端集成到MenuOS系统中,在此之前需要先修改lab3下的Makefile文件,使其内容如下:

    qemu-system-x86_64 -kernel ../../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img

    cd ..
    cd ./linuxnet/lab3
    make rootfs

    客户端和服务端都集成入MenuOS后,此时可以在QEMU下输入replyhi,然后输入hello得到如下结果:


    四 gdb调试
    先修改menu目录下的Makefie文件,在上一次修改的那一行末尾添加  -append nokaslr -s -S
    重启qemu:
    cd ../../menu
    make rootfs

    千万不要关闭此终端和QEMU界面
    再重新开启一终端,如在MenuOS目录所在的用户家目录下,在这个终端内使用gdb,输入如下命令:
    gdb
    file ~/MenuOS/linux-5.0.1/vmlinux
    target remote:1234
    break start_kernel
    c
    list
    
    

    结果如下图,可以清楚看到gdb追踪到start_kernel函数,断点在init/mian.c的538行:





  • 相关阅读:
    React在componentDidMount里面发送请求
    React 术语词汇表
    React里受控与非受控组件
    React和Vue等框架什么时候操作DOM
    【LeetCode】79. Word Search
    【LeetCode】91. Decode Ways
    【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)
    【LeetCode】1. Two Sum
    【LeetCode】141. Linked List Cycle (2 solutions)
    【LeetCode】120. Triangle (3 solutions)
  • 原文地址:https://www.cnblogs.com/Liwj57csseblog/p/12019148.html
Copyright © 2011-2022 走看看