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

一、实验工具

  1、本地虚拟机上的ubuntu16.04

  2、qemu模拟器

    QEMU是一款开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。

  3、gdb调试器
二、实验步骤
  1.下载linux-5.0.1.tar.xz    地址为  https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz
mkdir LinuxKernel  #创建LinuxKernel根目录
cd ~/LinuxKernel/
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz #下载Linux内核,这里用的是5.0.1版本
xz -d linux-5.0.1.tar.xz #解压 
tar -xvf linux-5.0.1.tar 
cd linux-5.0.1

  2.安装相应的依赖包

#如果已经安装过就忽略这一步
sudo apt-get install build-essential
sudo apt-get install libelf-dev
sudo apt-get install libncurses-dev
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install libssl-dev

  3.配置编译内核

make i386_defconfig#生成32位x86的配置文件
make menuconfig

  4.进入图形界面:

选择:Kernel hacking 回车

选择:Compile-time checks and compiler options回车

选择:Compile the kernel with debug info 键入y

选择:save 回车

选择:ok 回车

选择:exit 回车

一直按esc直到退出图形界面
make  #编译 时间有点长

  5.安装qemu命令

sudo apt install qemu # 安装qemu命令
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu #建立一个软链接 之后才可以使用qem

  6.构建menu系统

git clone https://github.com/mengning/menu.git
mkdir rootfs
cd menu
sudo apt-get install libc6-dev-i386 #安装libc6-dev-i386
vim Makefile  #修改一下Makefile文件
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img  #创建的根文件系统
make rootfs  #初始化根目录

 构建调试Linux内核网络代码的环境MenuOS系统_第1张图片

三、构建linux内核的gdb调试环境

  1.先关闭qemu虚拟机,在qemu中启动gdb server

qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append  nokaslr -s -S
//在新打开的qemu虚拟机上,出现的是一个黑屏,此时的qemu在等待gdb的连接

  2.建立gdb与gdbserver之间的连接

  另外打开一个终端

gdb
file ~/LinuxKernel/linux-5.0.1/vmlinux # # 在gdb界面中targe remote之前加载符号表
break start_kernel # 断点的设置可以在target remote之前,也可以在之后
target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
c #按c 让qemu上的Linux继续运行
list #输入list指令可以查看断点处的代码。

 构建调试Linux内核网络代码的环境MenuOS系统_第2张图片

 四、构建调试Linux内核网络代码的环境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 make rootfs

构建调试Linux内核网络代码的环境MenuOS系统_第3张图片

 

构建调试Linux内核网络代码的环境MenuOS系统_第4张图片

 结果如上图所示

 

 

 

 

 

你可能感兴趣的:(构建调试Linux内核网络代码的环境MenuOS系统)