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

本次实验环境是:Ubuntu16.0.4 和 Linux5.0.1

一、下载、编译内核

1.1 下载内核

mkdir MenuOS
cd MenuOS
xz -d linux-5.0.1.tar.xz #解压 
tar -xvf linux-5.0.1.tar 
cd linux-5.0.1

 1.2 配置内核

//安装所需依赖包
sudo apt-get install build-essential libelf-dev libncurses-dev flex bison libssl-dev
cd /linux-5.0.1/
#使用现存内核的配置文件:(xxx处使用TAB补全)
sudo cp /boot/config-xxx -r .config
#生成32位x86的配置文件
make i386_defconfig 
#开启文本菜单选项
make menuconfig

 make menuconfig出现error:Your display is too small to run menuconfig!将terminal调大即可。

之后会弹出如下图形界面,依次选择 Kernel hacking ->Compile-time checks and compiler options ->[ ]Compile the kernel with debug info 

然后按Y键,选择 Save ,选择Exit直到退出。

编译

make (这个过程比较慢,可以加参数-j * ,选择编译时的cpu核数,加快编译速度)

二、Qemu加载内核

下载qemu、MenuOS

sudo apt install qemu  # 安装qemu
git clone https://github.com/mengning/menu.git #下载MenuOS

制作根文件系统镜像

mkdir rootfs #为MenuOS创建根目录
cd menu
sudo apt-get install libc6-dev-i386#下载在64位环境下编译32位所需库

#此时注意在初始化根目录之前要修改Makefile的内容,因为menu中配置文件是Linux 3.18.6,这里要改为5.0.1,修改之后如下
#qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img
#创建软链接,直接使用qemu命令
sudo ln -s /usr/bin/qemu-system-i386 usr/bin/qemu
make rootfs

初始化根目录(这里使用MenuOS带的文件系统)

Qemu启动内核,可以看到内核正常启动

qemu -kernel linux-5.0.1/arch/x86/boot/bzImage  -initrd rootfs.img

三、验证MenuOS的网络

cd ~/MenuOS/ 
#下载测试程序 git clone https:
//github.com/mengning/linuxnet.git cd linuxnet/lab2 make cd ../../menu/#这里要修改Makefile文件,同上 make rootfs

#另起一个终端
cd MenuOS/linuxnet/lab3
#修改Makefile文件
make rootfs

输入replyhi,输入hello,收到了hi,证明MenuOS的网络可以正常工作

四、构建Linux内核gdb调试环境

Qemu中启动内核,可以看到Qemu启动显示黑屏,此时是qemu在等待gdb的连接。

cd ~/MenuOS/menu
vi Makefile
#修改Makefile,在qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img
末尾加上-append nokaslr -s -S
#这里-S freeze CPU at startup
-s shorthand for -gdb tcp::1234 若不想用1234端口,可以使用-gdb tcp::xx取代-s选项
make rootfs

连接gdb server调试

gdb
file ~/MenuOS/linux-5.0.1/vmlinux
target remote:1234
#设置断点对start_kernel进行跟踪
break start_kernel

继续在rest_init函数设置断点

posted @ 2019-12-12 20:23  andyflyto  阅读(152)  评论(0编辑  收藏  举报