构建调试Linux内核网络代码的环境MenuOS系统
Posted 宫挽月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建调试Linux内核网络代码的环境MenuOS系统相关的知识,希望对你有一定的参考价值。
实验环境:实验楼平台远程环境https://www.shiyanlou.com/courses/1198/learning/?id=8925
若点击无访问权限,则请访问“庖丁解牛Linux网络核心”课程主页https://www.shiyanlou.com/courses/1198,关注后再次尝试。
进入虚拟环境后,双击Xfce图标进入控制台,值得注意的是,这里有一个坑:实验楼平台提供字符和桌面两种界面
但不是所有命令都能在字符界面中执行,请使用图形界面的Xfce终端而不是字符界面
输入以下两条指令:(如果复制黏贴请不要复制$)
$ cd ~/LinuxKernel/
$ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
这个时候会跳出一个黑色的控制台界面并快速刷新信息
停止时的信息为:
我们测试两条指令
replyhi和help
不出意外的话,第一条指令应当不能成功,因为还没有被添加入系统
结果符合我们的预期
下一步我们使用-s和-S分析启动过程
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
-S表示暂停启动时的CPU的执行
-s等于-gdb tcp::1234
如果发现鼠标不能移动,请使用CTRL+Alt释放鼠标
应当看到:
打开另一个Xfce终端,执行如下命令
# 进入LinuxKernel文件夹,这一步没有后续会提示找不到文件
$ cd ~/LinuxKernel/
# 打开 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
你应当看到
以及
下一步我们把replyhi命令集成进MenuOS
从git clone 克隆一个 linuxnet.git(!!!这个过程可能会比较缓慢,这个过程中不要在这个界面使用键盘,否则clone有可能停止,),进入 lab2 目录执行 make 将我们集成好的代码 copy 到 menu 项目中。
然后进入 menu,已经有了一个脚本 rootfs,运行 make rootfs,脚本就可以帮助我们自动编译、自动生成根文件系统,还会帮我们运行起来 MenuOS 系统。
详细命令如下:
$ cd ~/LinuxKernel
$ git clone https://github.com/mengning/linuxnet.git
$ cd linuxnet/lab2
$ make
$ cd ../lab3
$ make rootfs
这个时候我们把replyhi添加进系统中了
以上是关于构建调试Linux内核网络代码的环境MenuOS系统的主要内容,如果未能解决你的问题,请参考以下文章