咏月东南 2019-12-11
一、构建调试系统
下载内核:
make -p /lab3/linuxkernel //这里可以选择从国内镜像下载内核,官网下载速度太慢,国内镜像地址 //http://mirror.bjtu.edu.cn/kernel/linux/kernel/v5.x/linux5.0.1.tar.xz wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux5.0.1.tar.xz //解压进入 xz -d linux-5.0.1.tar.xz tar -xvf linux-5.0.1.tar cd linux-5.0.1
安装内核编译工具,这里需要注意的是我们使用的是centOS8,和老师给的实验指导用的Ubuntu安装命令是不同的,centOS安装指令为yum,且安装的包名是有变化的;
Ubuntu下:
1 sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev
centOS下:
1 yum groupinstall "Development Tools" 2 yum install openssl-devel elfutils-libelf-devel ncurses-libs ncurses-devel
配置编译内核:
make i386_defconfig // configuration written to .config make menuconfig//在菜单模式下选择开启哪些内核功能 //这里要注意将Compile the kernel with debug info选上,这样会有调试信息 make //编译内核
安装QEMU虚拟机:
1 yum -y install qemu-kvm
构造menuOS:
git clone https://github.com/mengning/menu.git cd menu sudo yum install libc6-dev-i386 // 在64位环境下编译32位需安装 make rootfs //注意这里编译可能会出问题,缺少c的静态库,安装即可 cd .. qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage - initrd rootfs.img 8 qemu-system-x86_64 -kernel linux5.0.1/arch/x86_64/boot/bzImage -initrd rootfs.img
至此,调试环境menuOS就搭建好了;
将服务端程序加载到menuOS:
cd ~/LinuxKernel git clone https://github.com/mengning/linuxnet.git cd linuxnet/lab2 make cd ../../menu/ make rootfs
将客户端程序加载到menuOS:
1 cd ~/LinuxKernel 2 cd linuxnet/lab3 3 make rootfs
这里需要注意的是上述克隆下来的文件中,要将Makefile文件里关于Linux的版本修改为当前版本,即menuOS用的Linux内核,为linux 5.0.1;
然后menuOS系统就出现了reolyhi和hello命令,执行,发现可以完成通信;
cd ~/linuxlab/menu vim Makefile //修改其中的参数,在qemu后面加上-append nokaslr -s -S参数 make rootfs //执行完后出现一个stop的qemu,处于等待连接状态 //重新打开一个终端 gdb file ~/lib3/linuxkernel/linux-5.0.1/vmlinux //连接刚刚停止的qemu target remote:1234 //在start_kernel处设置断点 b start_kernel run //可以看到已经在start_kernel函数处停止运行了
如有需要,可以设置更多断点用以调试程序,例如可以通过break rest_init,在rest_init处设置断点,并可以使用list可以查看到rest_init前后的代码