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

     

    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

    sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev #安装内核编译所需的库

    make i386_defconfig  #生成32位x86的配置文件

    make menuconfig

    make

    QEMU虚拟机加载内核

    cd ~/LinuxKernel/

    sudo apt install qemu  # 安装qemu命令

    qemu-system-i386 -kernel  linux-5.0.1/arch/x86/boot/bzImage #qemu

    构造MenuOS

    #下载menu系统,并在LinuxKernel目录下建一个子目录rootfs,当作menuOS的根目录

     

    git clone https://github.com/mengning/menu.git

     

    mkdir rootfs

    安装libc6-dev-i386和修改Makefile

    安装libc6-dev-i386

    sudo apt-get install libc6-dev-i386

    修改makefile,

    cd menu

     

    vim Makefile

     

    qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img  #修改前

     

    qemu-system-i386 -kernel  ../linux-5.0.1/arch/x86/boot/bzImage  -initrd ../rootfs.img #修改后

    64为的就修改为 qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86_64/boot/bzImage -initrd ../rootfs.img

    初始化根目录

    linux启动后期会在根⽬录中寻找⼀个应⽤程序来运⾏,在根⽬录下提供init是⼀种可选⽅案

    #在menu目录下执行一下命令

    make rootf

     

    gdb 调试

    启动gdb server

    1 关闭 之前打开的menuOS系统界面

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

    gdb客户端连接gdb server

    #打开另一个终端

    gdb

    file ~/LinuxKernel/linux-5.0.1/vmlinux

    break start_kernel

    target remote:1234

    c

    list

    构建MenuOS的网络功能

    将 TCP 服务端集成到 MenuOS 系统中

    cd ~/LinuxKernel 

    git clone https://github.com/mengning/linuxnet.git

    cd linuxnet/lab2

    make

    cd ../../menu/

    make rootfs #改一下Makefile

    将 TCP 客户端集成到 MenuOS 系统中

    cd ~/linuxkernel 

    git clone https://github.com/mengning/linuxnet.git

    cd linuxnet/lab3

    make rootfs  #报错之后,修改Makefile

    结果如图:menuOS下面已经多了replyhi,和 hello命令。

  • 相关阅读:
    Java反编译代码分析(一)
    Java信号量Semaphore
    Ubuntu SVN安装&使用&命令
    Android -- Dialog动画
    Android -- EventBus使用
    Android -- queryIntentActivities
    解决:fatal: authentication failed for https
    MySQL表名大小写敏感导致的问题
    Publish to a Linux Production Environment
    layer.js 弹窗组件API文档
  • 原文地址:https://www.cnblogs.com/buzhidao1/p/12008475.html
Copyright © 2011-2022 走看看