码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2019-12-11 17:08:49      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:代码   ssl   code   append   gdb   group   linux内核   虚拟   margin   

一、构建调试系统

  下载内核:

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:

1     git clone https://github.com/mengning/menu.git
2     cd menu
3     sudo yum install libc6-dev-i386 // 在64位环境下编译32位需安装
4     make rootfs
5     //注意这里编译可能会出问题,缺少c的静态库,安装即可
6     cd ..
7     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上运行网络程序

  将服务端程序加载到menuOS:

1     cd ~/LinuxKernel  
2     git clone https://github.com/mengning/linuxnet.git
3     cd linuxnet/lab2
4     make
5     cd ../../menu/
6     make rootfs

  将客户端程序加载到menuOS:

1     cd ~/LinuxKernel  
2     cd linuxnet/lab3
3     make rootfs

  这里需要注意的是上述克隆下来的文件中,要将Makefile文件里关于Linux的版本修改为当前版本,即menuOS用的Linux内核,为linux 5.0.1;

  然后menuOS系统就出现了reolyhi和hello命令,执行,发现可以完成通信;

技术图片

三、通过gdb可以跟踪到内核代码

    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前后的代码

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

标签:代码   ssl   code   append   gdb   group   linux内核   虚拟   margin   

原文地址:https://www.cnblogs.com/meijlin/p/12016049.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!