码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2019-12-11 21:12:40      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:git clone   mono   过程   etc   bre   for   启动过程   terminal   ffffff   

 实验环境

实验楼(实验楼每次实验有时间限制,本次实验并非一次性做完的,所以截图上显示的时间会有一些错乱。)

初识 MenuOS 系统

我们已经在 LinuxKernel 目录构建好了基于 3.18.6 的内核环境,可以使用实验楼的虚拟机打开 Xfce 终端(Terminal), 运行 MenuOS 系统。

 技术图片

将网络通信程序的服务端集成到 MenuOS 系统中

接下来我们需要将 C/S 方式的网络通信程序的服务端集成到 MenuOS 系统中,成为 MenuOS 系统的命令 replyhi。

实际上我们已经给大家集成好了,我们 git clone 克隆一个 linuxnet.git,进入 lab2 目录执行 make 可以将我们集成好的代码 copy 到 menu 项目中。

然后进入 menu,我们写了一个脚本 rootfs,运行 make rootfs,脚本就可以帮助我们自动编译、自动生成根文件系统,还会帮我们运行起来 MenuOS 系统。

详细命令如下:

技术图片

其中我们增加了命令 replyhi,功能是回复 hi 的 TCP 服务.

技术图片

 使用跟踪分析 ~/Linux 内核的启动过程的 -s 和 -S 选项启动 MenuOS 系统:

$ 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 内核的启动过程的具体操作方法”进行跟踪调试了,

只是我们 socket 接口使用的是系统 sys_socketcall,可以将 sys_socketcall 设为断点跟踪看看。

# 打开 GDB 调试器 $ gdb

# 在 GDB 中输入以下命令:

# 在 gdb 界面中 targe remote 之前加载符号表

(gdb)file linux-3.18.6/vmlinux

# 建立 gdb 和 gdbserver 之间的连接

(gdb)target remote:1234

# 断点的设置可以在target remote之前,也可以在之后

(gdb)break start_kernel

# 按 c 让qemu上的Linux继续运行

(gdb)c

技术图片

 

 

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

标签:git clone   mono   过程   etc   bre   for   启动过程   terminal   ffffff   

原文地址:https://www.cnblogs.com/yongjason/p/12024932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!