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

1.下载linux kernel源码,并配置所需库

mkdir linuxkernel

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

cd linux-5.0.1

sudo apt-get install aptitude  //我的ubuntu版本使用apt-get来安转内核编译所需库会出现依赖问题,所以我使用 aptitude来安装

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

make i386_defconfig

截止目前:

2.配置debug信息

make menuconfig 进入GUI界面

kernel hacking-->compile-time checks and compiler options -->[]compile the kernel with debug info-->按Y-->save-->esc退出GUI界面

3.编译 

make

 制作根文件系统:

1)安装qemu命令:

sudo apt install qemu

2)构造menuOS

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

mkdir rootfs

//安装libc6-dev-i386

sudo apt-get install libc6-dev-i386

//修改MakeFile

qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img #修改前 qemu-system-i386 -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img #修改后

make rootfs

 4.验证MenuOS的网络 

1)将TCP网络通信程序的服务端集成到MenuOS系统中

cd linuxkernel

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

cd linuxnet/lab2

make

cd ../../menu

make rootfs

2)将TCP网络通信程序的客户端集成到MenuOS系统中

cd linuxkernel
cd linuxnet/lab3
sudo vim Makefile  //修改makefile
//未修改之前qemu -kernel ../../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img
//修改之后 qemu-system-x86_64 -kernel ../../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img
make rootfs

//在GUI中输入replyhi,输入hello,收到hi,证明MenuOS网络正常工作。

5.gdb调试

1)重启QEMU

cd linuxkernel/menu

sudo vim Makefile //修改Makefile

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

make rootfs

结果:

2)连接gdb server并调试
重开终端:
gdb
file ~/linuxkernel/linux-5.0.1/vmlinux
target remote:1234
#设置断点对start_kernel进行跟踪
break start_kernel
c #继续运行
list #查看上下文

 结果显示gdb可以追踪到start_kernel函数,断点在init/mian.c的538行

继续在rest_init处设置断点

break rest_init

c

断点在init/mian.c的402行

原文地址:https://www.cnblogs.com/zxy1122/p/12007375.html