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

一、下载Linux内核源代码

 下载网址为:https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz

 然后将压缩包拷贝到home目录下,使用下述命令解压得到tar包

xz -d linux-5.0.1.tar.xz

 接下来解压tar得到Linux-5.0.1文件夹

tar -xvf linux-5.0.1.tar

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

二、安装内核编译工具

sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev

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

 三、配置编译内核

  1、生成64位x86的配置文件

make x86_64_defconfig  

  2、开启文本菜单选项

make menuconfig

 在出现图形界面中 依次选择Kernel hacking,Compile-time checks and compiler options,[*]Compile the kernel with debug info再选定Save。然后逐步选定Exit,直到退出该界面。

 3、最后在linux-5.0.1内核目录下编译内核,执行make命令。

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

 四、通过QEMU虚拟机加载内核

  1、首先要下载安装QEMU

sudo apt install qemu
qemu-system-x86_64 -kernel linux-5.0.1/arch/x86_64/boot/bzImage

 2、构造MenuOS

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

 在make rootfs之前先修改Makefile文件,将

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

 修改为

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

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

  编译以后,MenuOS启动成功在能看到如下界面 

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

 五、测试MenuOS上可以实现TCP客户端和服务器发送和接收hello/hi

  1、把程序集成到MenuOS上

    先将代码下载到MenuOS上

git clone https://github.com/mengning/linuxnet.git

 首先集成服务器端,

cd ./linuxnet/lab2
make

 然后集成客户端,需要修改一下lab3下Makefile的内容,将:

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

 修改为:

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

 然后对Lab3进行make,最后在menu文件下make rootfs把它集成到MenuOS中,完成之后我们就可以在MenuOS中进行测试

 2、MenuOS测试

    在QEMU下输入如下命令:

Replyhi
Hello

 出现下图所示则代表网络正常

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

六、GDB进行内核代码跟踪

首先,修改menu目录下的Makefie文件

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

将其修改为:

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

然后建立gdb与gdbserver之间的连接,打开一个新的命令行窗口,执行 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指令可以查看断点处的代码。

能够看到断点处的代码,可以发现在main.c的line 538处中断,结果如下: 

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

 

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