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

一.Linux内核源码下载

本实验采用linux-5.0.1源码,下载网址为 https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz

下载完成后放入用户文件夹中,一般为home/用户名,

这里我创建了新的工作文件夹,将其解压在该文件夹中,依次执行如下命令:


mkdir LinuxKernel  #创建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 #进入linux-5.0.1目录

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


二..安装内核编译工具
1.执行如下命令:
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev

安装完成后如下:

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

 2.配置编译内核

make menuconfig

出现界面进行配置

Kernel hacking -> Compile-time checks and compiler options -> Compile the kernel with debug info 

Save后一直Exit到命令行界面即可

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

接下来进行编译

make  #时间较长  可选择make -j*  (*为线程数)命令加快编译速度

 成功后如下:

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

三.构建MenuOs

QEMU虚拟机加载内核

cd ~/LinuxKernel
sudo apt install qemu

下载MENU OS

git clone https://github.com/mengning/menu.git
mkdir rootfs
cd menu
 修改Makefile文件,将3.18.6修改为5.0.1,如图所示:
构建调试Linux内核网络代码的环境MenuOS系统


 然后在~/LinnuxKernel/menu路径下执行
make rootfs
 成功后出现如下界面:
构建调试Linux内核网络代码的环境MenuOS系统


四. MenuOS完成TCP客户端和服务器端发送和接受hello/hi
1.把程序集成到MenuOS:
cd ~/LinuxKernel
git clone https://github.com/mengning/linuxnet.git


 服务器端:
cd linuxnet/lab2
make
cd ../../menu
make rootfs


 

 客户端同上,集成lab3即可,这里需要修改一下lab3下Makefile的内容,修改内容同上:

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

2.测试

在MenuOS中输入以下命令:

replyhi

hello

 结果如下:

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

五. 构造gdb调试环境

 关闭qemu虚拟机,修改menu目录下的Makefile文件,修改位置同上
qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86_64/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S


 执行如下命令
make rootfs


 此时会出现qemu会出现黑屏,等待gdb连接,如下图所示:
构建调试Linux内核网络代码的环境MenuOS系统


 

接下来建立gdb与gdbserver之间的连接:


打开一个新的命令窗口,执行gdb命令,进入调试:

file ~/LinuxKernel/linux-5.0.1/vmlinux
break start_kernel
target remote:1234
c 
list
 可以看到如下断点处代码结果:
构建调试Linux内核网络代码的环境MenuOS系统