实验环境:
实验楼中老师的课程实验对这个实验进行了很好的封装进行起来很便捷,因此使用老师提供的实验楼的实验教程来完成此次实验:
先构建完整实验环境,实验楼的环境中已经有了Linux-3.18.6的文件的,只要的指定的文件夹下面进行编译即可:
$ cd ~/LinuxKernel/ $ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
menuos已经编译完成,可以成功启动了:
使用跟踪分析 ~/Linux 内核的启动过程的 -s 和 -S 选项启动 MenuOS 系统:
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage-initrd rootfs.img -s -S
使用gbd跟踪调试start_kernel 命令:
(gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表 (gdb)target remote:1234 # 建立gdb和gdbserver之间的连接 (gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后 (gdb)c # 按c 让qemu上的Linux继续运行
程序定位到指定的断点处:
将网络通信的服务集成到MENUOS中来,增加了命令replyhi,功能是回复hi的TCP服务. :
$ cd ~/LinuxKernel $ git clone https://github.com/mengning/linuxnet.git $ cd linuxnet/lab2 $ make $ cd ../../lab3/ $ make rootfs
如图所示,MENUOS已经可以进行TCP网络通信功能了: