构建调试Linux内核网络代码的环境MenuOS系统
Posted wangp19
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建调试Linux内核网络代码的环境MenuOS系统相关的知识,希望对你有一定的参考价值。
1、环境搭建
mkdir LinuxKernel cd LinuxKernel wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz #下载内核,下载速度较慢,我是在国内镜像网站上下载的 xz -d linux-5.0.1.tar.xz tar -xvf linux-5.0.1.tar cd linux-5.0.1
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev#安装内核编译工具
make i386_defconfig#生成32位x86的配置文件
make menuconfig
之后会出现图形界面
将图中第一项选中保存退出
make #编译内核,时间较长
sudo apt install qemu # 安装qemu虚拟机
#构造Menuos git clone https://github.com/mengning/menu.git cd menu sudo apt-get install libc6-dev-i386 # 在64位环境下编译32位需安装 make rootfs cd .. qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img # make i386_defconfig qemu-system-x86_64 -kernel linux-5.0.1/arch/x86_64/boot/bzImage -initrd rootfs.img
2、gdb命令跟踪分析linux内核启动过程
使用跟踪分析内核启动过程的-s和-S选项启动MenuOS系统
$ qemu -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img -s -S
关于-s
和-S
选项的说明:
-S
freeze CPU at startup (use ’c’ to start execution) cpu初始化前冻结-s
shorthand for -gdb tcp::1234 若不想使用 1234 端口,则可以使用 -gdb tcp:xxxx 来取代 -s 选项
此时窗口当前状态是被冻结的
然后另开一个shell窗口
# 打开 GDB 调试器 $ gdb # 在 GDB 中输入以下命令: # 在 gdb 界面中 targe remote 之前加载符号表 (gdb)file linux-5.0.1/vmlinux # 建立 gdb 和 gdbserver 之间的连接 (gdb)target remote:1234 # 断点的设置可以在target remote之前,也可以在之后 (gdb)break start_kernel # 按 c 让qemu上的Linux继续运行 (gdb)c
此时运行结果如下,内核启动到断点处,即start_kernel处停止
我们可以通过list命令查看到start_kernel前后的代码,当然我们也可以设置更多的断点,比如可以设置一个break rest_init,系统执行到rest_init停止,使用list可以查看到rest_init前后的代码
3、将网络通信程序集成到MenuOS系统中
1)将TCP网络通信程序的服务端集成到MenuOS系统中
$ cd ~/LinuxKernel $ git clone https://github.com/mengning/linuxnet.git $ cd linuxnet/lab2 $ make $ cd ../../menu/ $ make rootfs
2)将TCP网络通信程序的客户端集成到MenuOS系统中
cd ~/LinuxKernel cd linuxnet/lab3 make rootfs
注意将lab3目录下Makefile文件中的linux内核版本修改为linux-5.0.1,此时发现MenuOS下多出了replyhi和hello命令
输入replyhi和hello命令,查看运行结果,发现在MenuOS上能够完成TCP客户端和服务器发送和接收hello/hi
参考资料:https://github.com/mengning/net/tree/master/lab3
以上是关于构建调试Linux内核网络代码的环境MenuOS系统的主要内容,如果未能解决你的问题,请参考以下文章