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

环境准备


切换内核

下载linux-5.0.1内核源码,解压

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
配置编译内核,使其带有gdb调试环境

make defconfig
make menuconfig
Kernel hacking —> Compile-time checks and compiler options  ---> [*] Compile the kernel with debug info 

开始编译

make 
#或者用
make -j*  #*为分配cpu数量,越大编译越快

升级当前系统内核

sudo make modules_install # 安装前通过系统快照备份系统,以防出现故障前功尽弃
sudo make install
sudo update-grub
reboot
uname -a

成功切换内核后显示如下

安装QEMU虚拟机

sudo apt install qemu

构造MenuOS


下载MenuOS源代码,安装编译工具

git clone https://github.com/mengning/menu.git
cd menu
sudo apt-get install libc6-dev-i386 # 在64位环境下编译32位需安装

修改makefile文件中的内核版本和qemu启动方式
构建调试Linux内核网络代码的环境MenuOS系统_第1张图片
制作根目录文件

make rootfs

Gdb调试


启动QEMU后界面为黑屏,gdbserver正等待gdb调试
构建调试Linux内核网络代码的环境MenuOS系统_第2张图片

建立gdb连接

重开一个终端,运行gdb

(gdb)file linux-5.0.1/vmlinux  #读取符表
(gdb)target remote:1234  #建立连接

追踪内核源码

(gdb)break start_kernel  #设置断点
(gab)c  #运行至断点
list  #查看break_kernel源码

构建调试Linux内核网络代码的环境MenuOS系统_第3张图片

测试网络功能


下载hello/hi网络通信程序,将其集成至MenuOS中

cd ~  
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab3

对lab3中的makefile做与上面gdb调试同样的修改,之后运行MenuOS

make
make rootfs

运行gdb,直接continue后MenuOS正常运行
在MenuOS中运行replyhi/hello
构建调试Linux内核网络代码的环境MenuOS系统_第4张图片
追踪三次握手协议的tcp_v4_connect 函数

(gdb)file linux-5.0.1/vmlinux
(gdb)break tcp_v4_connect
(gdb)c
MenuOS>>replyhi 
MenuOS>>hello
(gdb)list

构建调试Linux内核网络代码的环境MenuOS系统_第5张图片

你可能感兴趣的:(构建调试Linux内核网络代码的环境MenuOS系统)