本次实验在实验楼(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 设为断点跟踪,最终结果如下。