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行:





  • 相关阅读:
    C#实现注册码
    多表链接 Left join
    Repeater 一行显示两列数据
    Repeater一行显示数据库中多行表记录
    HP QC(Quality Center)在Windows 7 IE8 IE9下不能工作解决方案
    Android应用换肤总结
    Lua 第一个应用程序 Hello World
    JNI 技术与 Android 应用
    NSAutoreleasePool' is unavailable: not avail
    1-2基础控件
  • 原文地址:https://www.cnblogs.com/Liwj57csseblog/p/12019148.html
Copyright © 2011-2022 走看看