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

前言

本来是打算在虚拟机下完成本次实验的,按照实验步骤一步步来,前面很正常,嗯,尤其是编译内核特别长,意外发生在升级系统内核那步,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的网络可以正常工作。构建调试Linux内核网络代码的环境MenuOS系统_第1张图片

 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

构建调试Linux内核网络代码的环境MenuOS系统_第2张图片

 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函数的上下文

构建调试Linux内核网络代码的环境MenuOS系统_第3张图片

  构建调试Linux内核网络代码的环境MenuOS系统_第4张图片

  构建调试Linux内核网络代码的环境MenuOS系统_第5张图片

  从中可以看到gdb可以追踪到start_kernel函数在main函数的第501行。

 

你可能感兴趣的:(构建调试Linux内核网络代码的环境MenuOS系统)