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

1 下载编译内核
  mdkir LinuxKernel#创建工作目录

  cd LinuxKernel#进入工作目录

  wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz

  xd -d linux-5.0.1.tar.xz

  tar -xvf linux-5.0.1.tar # 解压内核文件

  cd linux-5.0.1 #进入·内核·文件夹·

  sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev#安装内核编译工具

  make i386_defconfig

  make menuconfig

  make#编译内核

        

2 在menuOS目录中下载并安装QEMU虚拟机,并用它来加载内核

  sudo apt install qemu #下载QEMU

  qemu-system-x86_64 -kernel linux-5.0.1/arch/x86_64/boot/bzImage 

  sudo apt install git #下载git

  mkdir roofs

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

  cd menu

  sudo apt-get install libc6-dev-i386 #安装编译环境

  vim makefile#修改makefile,见下图

  make rootfs 

  cd .. #返回LinuxKernel

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

  

3 使用GDB跟踪调试内核

  emu-system-x86_64 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img -s -S

  # 关于-s和-S选项的说明 

  # -S freeze CPU at startup (use ’c’ to start execution)

  # -s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

  重新开启一个终端进入gdb调试

 (gdb)file linux-5.0.1/vmlinux # 在gdb界面中targe remote之前加载符号表

 (gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行

 (gdb)break start_kernel #

     


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


posted @ 2019-12-12 21:42  下饭java学习者  阅读(205)  评论(0编辑  收藏  举报