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

实验楼构建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

 

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

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

输入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 选项

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

 

4、接着再重新打开一个终端,进入gdb调试阶段。

cd LinuxKernel
gdb
(gdb)file linux-3.18.6/vmlinux   #在targe remote 之前加载符号表
(gdb)target remote:1234          # 建立 gdb 和 gdbserver 之间的连接

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

(gdb)break start_kernel        # 断点的设置可以在target remote之前,也可以在之后
(gdb) break sys_socketcall
(gdb)list    #查看start_kernel函数的上下文

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

从上图可以看出,函数start_kernel()在main函数的501行,函数sys_socketcall在2492行。

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