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

Posted wudizs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建调试Linux内核网络代码的环境MenuOS系统相关的知识,希望对你有一定的参考价值。

1、创建实验目录并下载linux内核

mkdir LinuxKernel  #创建一个项目目录
cd LinuxKernel
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz #下载linux-5.0.1的内核
xz -d linux-5.0.1.tar.xz
tar -xvf linux-5.0.1.tar #解压缩
cd linux-5.0.1

2、安装内核编译工具并进行编译

sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev    # 安装编译依赖的工具
make i386_defconfig   #生成32位x86的配置文件
make menuconfig

  make menuconfig之后会进入一个图形化界面,可能会遇到分辨率问题,可以通过调大虚拟机窗口大小,并安装VMWare Tools来解决。

  进入图形化界面之后配置编译环境,依次选择:Kernel hacking  => Compile-time checks and compiler options => 在Compile the kernel with debug info项选择Y,之后退出该图形化界面,即可进行编译。

make      #时间会很久

  根据情况大概等待十多分钟即可编译完成。

3、制作根文件系统

cd  LinuxKernel
sudo apt install qemu  # 安装qemu命令
git clone https://github.com/mengning/menu.git    #下载menu系统
mkdir rootfs #创建一个根目录,当做menuos的根目录
cd menu
sudo apt-get install libc6-dev-i386 #安装libc6-dev-i386
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu #建立一个软链接 之后可以直接执行
qemu vim Makefile #修改一下Makefile文件
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img #创建的根文件系统
make rootfs #初始化根目录

4、构建gdb调试环境

  第一步首先打开gdb server。

qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append  nokaslr -s -S

  打开之后是一个等待连接的状态

  之后建立与geb server之间的连接。

gdb
file ~/LinuxKernel/linux-5.0.1/vmlinux # # 在gdb界面中targe remote之前加载符号表
break start_kernel # 断点的设置可以在target remote之前,也可以在之后
target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
c #按c 让qemu上的Linux继续运行
list #输入list指令可以查看断点处的代码。

  之后即可看到gdb server已经连接成功

  并且可以看到我们设置的断点处的代码:

5、构建调试环境menuos

cd ~/LinuxKernel  
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab2
make     
cd ../../menu/
vim Makefile #修改Makefile文件
make rootfs   #将tcp服务端集成到menuos环境中
cd ~/LinuxKernel  
cd linuxnet/lab3
vim Makefile #修改Makefile文件
make rootfs   #将tcp客户端集成到menuos环境中

  之后我们可以看到集成了新功能的menuos,通过help可以看到当前有哪些功能可用,我们可以看到新增了replyhi和hello两个命令,当我们输入replyhi之后即与客户端进行了连接,当我们输入hello之后可以发现此时可以在服务端和客户端进行hello/hi的信息传递。

以上是关于构建调试Linux内核网络代码的环境MenuOS系统的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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