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

实验目标

  • 通过本地Linux系统完成构建调试Linux内核网络代码的环境MenuOS系统
  • 截图证实已经在MenuOS上能够完成TCP客户端和服务器发送和接收hello/hi,也就是MenuOS的网络可以正常工作
  • 截图证实通过gdb可以跟踪到内核代码,比如start_kernel、sys_socketcall等内核函数

实验环境

  内核代码:Linux 5.0.1;
  操作系统:Ubuntu19.04;
  qemu:本次使用的模拟器,运行内核代码;
  gdb:linux下的断点调试工具;

实验过程

一、构建MenuOS系统

  创建一个目录kernel,下载linux-5.0.1内核,下载相关编译工具,编译。命令如下:

mkdir kernel   #创建目录
cd kernel   #进入此目录
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar     #下载内核
xz -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  #下载编译工具

接着开始配置

sudo make i386_defconfig #生成32位的配置文件
make menuconfig #开启文本菜单选项,对窗口有限制,尽量调大窗口

输入以上命令后出现如下界面:

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

 

 

 找到最后一个选项Kernel hacking

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

 

 

 按回车后,选则Compile-time checks and compiler options

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

 

 

 按回车后选择Compile the kernel with debug info,按Y,前面的方括号中出现星号即为选中

 

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

 

 

选择下方Save

 

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

 

 

 选择OK,然后一路EXIT退出。

接着漫长的编译过程。

make

编译完成后,安装模拟器qemu

sudo apt-get install qemu

构造MenuOS

cd /kernel #进入工作目录
mkdir rootfs #创建MenuOS根目录

sudo git clone https://github.com/mengning/menu.git #下载menu系统
cd menu 
sudo apt-get install libc6-dev-i386 #在64位环境编译32位需要安装

sudo chmod 777 Makefile #将Makefile从只读修改为可读写
vim Makefile  #修改Makefile中的内核版本

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

sudo make rootfs  #初始化根目录

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

 

 

测试MenuOS环境#

将TCP网络通信程序的服务器端集成到MenuOS系统

cd /kernel #进入工作目录 
sudo git clone https://github.com/mengning/linuxnet.git #下载实验代码

cd linuxnet/lab2 #进入服务器目录
sudo make #编译前检查一下Makefile文件中的目录是否与自己的匹配
cd ../../menu/
sudo make rootfs #编译,将服务器端集成到系统中

将TCP网络通信程序的客户端集成到MenuOS系统

cd /kernel #进入工作目录 

cd linuxnet/lab3 #进入客户端目录
sudo make #同样,在编译前检查一下Makefile,修改其内核版本
sudo make rootfs #编译,将客户端集成到系统中

在我们将客户端与服务器端都集成到系统之后,qemu虚拟机所显示的结果与之前构建MenuOS的相同。

但是输入命令help后会看到其中已经添加了客户端以及服务器端所对应的replyhihello命令。

 

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

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

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