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

    一、安装linux-5.0.1

       1. 在home下创建menuOS目录,并下载 linux-5.0.1内核

        

      2. 解压内核

    xz -d linux-5.0.1.tar.xz
    tar -xvf linux-5.0.1.tar
    

        

      3. 安装内核编译工具

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

        

      4. 配置并编译内核

     生成64位x86配置文件,然后配置编译内核,在出现的界面中依次选择 Kernel hacking,Compile-time checks and compiler options,[ ]Compile the kernel with debug info ,按Y,出现[*]Compile the kernel with debug info,然后依次 Save,最后 Exit。然后在执行make命令。完成后可使用虚拟机快照功能保存当前状态。

    make x86_64_defconfig
    make menuconfig
    sudo make

        

             

       5. 在menuOS目录中下载并安装QEMU虚拟机,并用它来加载内核

    sudo apt install qemu #下载QEMU
    qemu-system-x86_64 -kernel linux-5.0.1/arch/x86_64/boot/bzImage 
    sudo apt install git   #下载git
    mkdir roofs        
    sudo git clone https://github.com/mengning/menu.git
    cd menu
    sudo apt-get install libc6-dev-i386 #安装
    

        

         编辑menu目录下Makefile文件的内容(可用sudo chmod 777 改变读写权限),如下图所示:

           

        在 menu 目录下 执行 make rootfs

          

     二、在menuos中实现 Hello Hi 的网络程序

        注意:先修改 lab3 文件夹下的makefile文件 如 上上图所示。

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

    在menuos中执行replyhi 和 hello 即可实现简单网络通信。

       

    三、实现gdb调试

    qemu-system-x86_64 -kernel linux-5.0.1/arch/x86_64/boot/bzImage -hda rootfs.img -append "root=/dev/sda init=/init nokaslr" -s -S
    #可以看到在新打开的qemu虚拟机上,整个是一个黑屏,此时qemu在等待gdb的连接
    #-S freeze CPU at startup (use ’c’ to start execution)
    #-s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项
    #nokaslr KASLR是kernel address space layout randomization的缩写
    

       

     在linux-5.0.1目录下新打开一个终端,执行以下命令,即可进行gdb调试:

    gdb
    file vmlinux #加载vmlinux中的符号表
    target remote:1234  #建立gdb和gdbserver之间的连接
    b start_kernel #在start_kernel处设置断点
    

       

  • 相关阅读:
    实用画刷填充图形
    PDA连接远程数据库的三种解决方案
    图形编程入门之如何创建用于绘制的 Graphics 对象
    使用渐变画笔填充形状
    使用钢笔绘制线条和形状
    How to: Display a Gradient Fill
    实现防火墙的“电话已关机”,“此号码已停机”,“号码不存在”等提示音的方法
    MSDN课程
    android振动器
    android视频播放
  • 原文地址:https://www.cnblogs.com/LiScott/p/12019977.html
Copyright © 2011-2022 走看看