• 构建调试Linux内核网络代码的环境MenuOS系统


    首先先来构建一个简单的Linux内核。大体上是分为两个步骤,首先是现在内核源代码编译内核,然后制作根文件系统,而实验楼已经为我们已经搭建了实验环境,只需要至今cd进Linux 3.18.6就行了,以下是MenuOS正在启动

    到此为止就完成了一个简单的内核搭建。然后我们开始使用GDB调试,再重新打开一个终端可以进行如下步骤:
    打开shell终端,执行以下命令: 

    qemu -kernel linux-3.18.6/arch/x86/boot/bzImage-initrd rootfs.img -s -S

    关于-s和-S选项的说明:

    -S freeze CPU at startup (use ’c’ to start execution) 在系统启动的时候冻结CPU,使用c键继续执行后续操作

    -s shorthand for -gdb tcp::1234 打开远程调试端口,默认使用tcp协议1234端口,若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项
    指令的作用是在开始的时候就让CPU停止在启动的那一刻,我们可以看到如下的界面:

     此时在刚才新建的那个终端窗口输入gdb进入调试模式:

    gdb
    (gdb)filelinux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表
    (gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
    (gdb)breakstart_kernel # 断点的设置可以在target remote之前,也可以在之后

    可以看到进入gdb调试界面

     按c键继续执行到start_kernel()函数

     然后我们可以使用list命令常看停止断点的源代码:如下图所示就是start_kernel()部分的代码

     MenuOS的网络功能

    cd ~/LinuxKernel  
    git clone https://github.com/mengning/linuxnet.git
    cd linuxnet/lab2
    make
    cd ../../menu/
    sudo gedit Makefile 
    make rootfs
    
    cd ~/LinuxKernel  
    cd linuxnet/lab3
    sudo gedit Makefile
    make rootfs

     TCP连接正常

  • 相关阅读:
    Netty应用
    原生JDK网络编程- NIO之Reactor模式
    Kafka入门教程
    Java CAS
    Java读写锁
    遍历map的四种方法
    java selector
    Range Sum Query
    Increasing Triplet Subsequence
    Count Numbers with Unique Digits
  • 原文地址:https://www.cnblogs.com/xqqu/p/12016522.html
Copyright © 2020-2023  润新知