前言
本来是打算在虚拟机下完成本次实验的,按照实验步骤一步步来,前面很正常,嗯,尤其是编译内核特别长,意外发生在升级系统内核那步,reboot后Ubuntu桌面亮了,嗯,很亮,连任务栏鼠标右键也没有了,而又没有通过快照备份(没有这个意识),所以,直接在实验吧上完成了此次实验。当然,Ubuntu还是得再装一次,为了后面的实验,也要重新在做一次。ps. 一定要生成备份。
实验步骤
实验平台:实验楼 环境都搭建好了,用起来不要太方便哦。
1.首先打开终端,进入LinuxKernel目录,接下来验证MenuOS能否正常工作,我们将网络通信程序的服务端集成到 MenuOS 系统中。然后运行 make rootfs,脚本就可以帮助我们自动编译、自动生成根文件系统,还会帮我们运行起来 MenuOS 系统。
cd LinuxKernel git clone https://github.com/mengning/linuxnet.git cd linuxnet cd lab3 make rootfs
输入replyhi和hello,可以看到MenuOS的网络可以正常工作。
2.再打开一个终端,进入LinuxKernel目录,使用跟踪分析 ~/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
3.再打开一个终端,进入LinuxKernel目录,构建Linux内核的gdb调试环境。
cd LinuxKernel gdb
file linux-3.18.6/vmlinux #加载符号表
target remote:1234 #建立gdb和gdbserver之间的连接
break start_kernel #设置断点
break sys_socketcall
c
list #查看start_kernel函数的上下文
从中可以看到gdb可以追踪到start_kernel
函数在main函数的第501行。