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

    一、下载内核源代码编译内核

    1.下载linux-5.0.1的内核

    mkdir LinuxKernel  #创建一个项目目录
    cd LinuxKernel
    wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz #下载linux-5.0.1的内核
    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
    make i386_defconfig#生成32位x86的配置文件

    3. 配置编译内核

    make menuconfig

    进入图形界面:

    选择:Kernel hacking 回车

    选择:Compile-time checks and compiler options回车

    选择:Compile the kernel with debug info 键入y

    选择:save 回车

    选择:ok 回车

    选择:exit 回车

    一直按esc直到退出图形界面

    make  #编译 时间有点长

    4.升级当前系统内核

    #升级内核这里建议别做了,我试了3次没成功过。。。
    sudo make modules_install  #安装前通过系统快照备份系统,以防出现故障前功尽弃
    sudo make install
    sudo update-grub
    reboot
    uname -a

    二、制作根文件系统

    1. QEMU虚拟机加载内核

    cd ~/LinuxKernel/
    sudo apt install qemu  # 安装qemu命令

    2. 构造MenuOS

    #下载menu系统,并在LinuxKernel目录下建一个子目录rootfs,当作menuOS的根目录
    git clone https://github.com/mengning/menu.git
    mkdir rootfs
    cd menu
    sudo apt-get install libc6-dev-i386 #安装libc6-dev-i386
    sudo ln -s /usr/bin/qemu-system-i386  /usr/bin/qemu #建立一个软链接 之后可以直接执行qemu
    vim Makefile  #修改一下Makefile文件
    qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img  #创建的根文件系统
    make rootfs  #初始化根目录

    三、构建Linux内核的gdb调试环境

    1.先关闭qemu虚拟机,在qemu中启动gdb server

    qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append  nokaslr -s -S

     在新打开的qemu虚拟机上,出现的是一个黑屏,此时的qemu在等待gdb的连接

    2. 建立gdb与gdbserver之间的连接

    打开另一个终端

    gdb
    file ~/LinuxKernel/linux-5.0.1/vmlinux # # 在gdb界面中targe remote之前加载符号表
    break start_kernel # 断点的设置可以在target remote之前,也可以在之后
    target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
    c #按c 让qemu上的Linux继续运行
    list #输入list指令可以查看断点处的代码。

    四、构建调试Linux内核网络代码的环境MenuOS

    1.将TCP网络通信程序的服务端集成到MenuOS 系统中

    cd ~/LinuxKernel  
    git clone https://github.com/mengning/linuxnet.git
    cd linuxnet/lab2
    make
    cd ../../menu/
    vim Makefile #修改Makefile文件
    make rootfs 

    2.将TCP网络通信程序的客户端集成到MenuOS系统中

    cd ~/LinuxKernel  
    cd linuxnet/lab3
    vim Makefile #修改Makefile文件
    make rootfs

    menuOS下多出了replyhi,和hello命令

    3.查看结果

    在MenuOS中输入replyhi,再输入hello

  • 相关阅读:
    处理键盘弹出
    纯手码自动布局
    ios 随机色 宏定义
    linux下自定义pid实现任意数据采集
    http://blog.chinaunix.net/uid-9845710-id-1996675.html snmpd配置
    http://www.360doc.com/content/10/0928/12/11991_57014502.shtml
    pingall脚本
    http://lihuipeng.blog.51cto.com/3064864/643960
    elf 文件
    php中获取周几的方法
  • 原文地址:https://www.cnblogs.com/yll333/p/12002621.html
Copyright © 2011-2022 走看看