一、实验环境
uname -a
本实验所用Linux系统为虚拟机,实验前已备份快照,为方便输入命令,采用SSH远程连接,最后启动QMENU在虚拟机终端运行。
二、编译Linux内核
1. 下载并解压linux_5.0.1内核
mkdir LinuxKernel #在root目录建立实验文件夹 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
ll
2.安装相关编译工具
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev
3.编译内核
make i386_defconfig make menuconfig make #编译内核
其中在make menuconfig 命令执行后会出现一个图像界面, 我们需要依次选择 Kernel hacking,Compile-time checks and compiler options,Compile the kernel with debug info 最后Save保存,退出界面。
!!!注意,最后是按Y确认,不是直接回车就可以确认选择,我就是由于这步错误,导致后面无法看到debug信息。
三、QMENU启动内核
cd LinuxKernal sudo apt-get install qemu git clone https://github.com/mengning/menu.git cd menu vi Makefile
#修改Makefile文件qemu-system-i386 -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img
make rootfs
四、测试网络程序
cd LinuxKernel #下载程序 git clone https://github.com/mengning/linuxnet.git cd linuxnet/lab2 #将lab2中的测试文件拷贝 make cd ../../menu/ make rootfs
#另开一终端 cd ~/LinuxKernel cd linuxnet/lab3#修改Makefile文件make rootfs
五、GDB调试
vi Makefile #修改其中的参数,在qemu后面加上-append nokaslr -s -S参数 make rootfs ##另开一个终端 gdb file ~/linuxlab/linux-5.0.1/vmlinux #连接刚刚停止的qemu target remote:1234 #在start_kernel处打上断点 b start_kernel #运行 c #可以看到已经在start_kernel函数处停止运行了