实验楼构建MenuOS
本次实验是在老师提供的实验楼上进行的,实验楼上是已经在 LinuxKernel 目录构建好了基于 3.18.6 的内核环境,可以直接可以使用实验楼的虚拟机打开 Xfce 终端, 运行 MenuOS 系统。
1、首先打开终端,进入LinuxKernel。
cd LinuxKernel
2、 接下来验证MenuOS能否正常工作,我们将网络通信程序的服务端集成到 MenuOS 系统中。
然后运行 make rootfs,脚本就可以帮助我们自动编译、自动生成根文件系统,还会帮我们运行起来 MenuOS 系统。
git clone https://github.com/mengning/linuxnet.git cd linuxnet cd lab3 make rootfs
输入replyhi,和hello
显示结果如上图,看出服务端和客户端是可以正常通信的。
3、重新打开一个终端,使用跟踪分析 ~/Linux 内核的启动过程的 -s 和 -S 选项启动 MenuOS 系统。
cd LinuxKernel 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) -s shorthand for -gdb tcp::1234 若不想使用 1234 端口,则可以使用 -gdb tcp:xxxx 来取代 -s 选项
4、接着再重新打开一个终端,进入gdb调试阶段。
cd LinuxKernel gdb (gdb)file linux-3.18.6/vmlinux #在targe remote 之前加载符号表 (gdb)target remote:1234 # 建立 gdb 和 gdbserver 之间的连接
(gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后 (gdb) break sys_socketcall (gdb)list #查看start_kernel函数的上下文
从上图可以看出,函数start_kernel()在main函数的501行,函数sys_socketcall在2492行。