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

        本次实验在实验楼(https://www.shiyanlou.com/courses/1198)完成,已经配置配置好实验所需的环境(基于3.18.6的Linux内核环境)。

  •  运行MenuOS

      使用实验楼中的Xfce终端,

$ cd ~/LinuxKernel/
$ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

 

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

    接下来我们需要将 C/S 方式的网络通信程序的服务端集成到 MenuOS 系统中,成为 MenuOS 系统的命令 replyhi。

    使用git将实验内容克隆过来

  • $ cd ~/LinuxKernel  
    $ git clone https://github.com/mengning/linuxnet.git

   然后进入 menu,运行 make rootfs,脚本就可以帮助我们自动编译、自动生成根文件系统,还会帮我们运行起来 MenuOS 系统。

 

    接下来测试集成的命令输入replyhi(命令 replyhi,功能是回复 hi 的 TCP 服务.),和hello

  • 进行跟踪调试

 新打开一个终端输入:

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

接下来再新打开一个终端,执行gdb

# 打开 GDB 调试器
$ gdb

# 在 GDB 中输入以下命令:

# 在 gdb 界面中 targe remote 之前加载符号表
(gdb)file linux-3.18.6/vmlinux 

# 建立 gdb 和 gdbserver 之间的连接
(gdb)target remote:1234

# 断点的设置可以在target remote之前,也可以在之后
(gdb)break start_kernel 

# 按 c 让qemu上的Linux继续运行
(gdb)c    

 

    上面将 sys_socketcall 设为断点跟踪,最终结果如下。

原文地址:https://www.cnblogs.com/smjsoftware/p/12031166.html