构建调试Linux内核网络代码的环境MenuOS系统
本实验是在虚拟机中的Ubuntu 18.04系统下进行的。
一、安装编译Linux内核
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

解压结果如图
安装所需依赖:
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev
然后直接编译:
make
编译结果如图:

二、制作根文件目录
sudo apt install qemu #安装qemu命令
mkdir rootfs
git clone https://github.com/mengning/menu.git
cd menu
sudo apt-get install libc6-dev-i386
vim Makefile
修改Makefile的内容为如图所示:

然后启动MenuOS系统
make rootfs
如图所示:

三、在MenuOS上完成TCP客户端和服务器发送和接收hello/hi
下载测试通信代码:
cd ~/LinuxKernel/ git clone https://github.com/mengning/linuxnet.git cd linuxnet/lab2 make cd ../../menu/ make rootfs
修改lab3下的Makefile的qemu为自己电脑的绝对路径:
cd ~/LinuxKernel/ cd linuxnet/lab3 vim Makefile
然后运行
make rootfs
最后在qemu中输入:
replyhi
hello
结果如图:

四、证实通过gdb可以跟踪到内核代码
在qemu中启动gdb server:
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S
重新打开一个终端:
gdb file ~/LinuxKernel/linux-5.0.1/vmlinux target remote:1234 break start_kernel c list
结果如图所示:

结果显示gdb可以追踪到内核代码

浙公网安备 33010602011771号