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

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

时间:2019-12-10 22:25:17      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:lex   hello   代码   menu   root   init   成功   with   通过   

1、创建实验目录并下载linux内核

mkdir 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 install build-essential flex bison libssl-dev libelf-dev libncurses-dev    # 安装编译依赖的工具
make i386_defconfig   #生成32位x86的配置文件
make menuconfig

  make menuconfig之后会进入一个图形化界面,可能会遇到分辨率问题,可以通过调大虚拟机窗口大小,并安装VMWare Tools来解决。

  进入图形化界面之后配置编译环境,依次选择:Kernel hacking  => Compile-time checks and compiler options => 在Compile the kernel with debug info项选择Y,之后退出该图形化界面,即可进行编译。

make      #时间会很久

  根据情况大概等待十多分钟即可编译完成。

3、制作根文件系统

cd  LinuxKernel
sudo apt install qemu  # 安装qemu命令
git clone https://github.com/mengning/menu.git    #下载menu系统
mkdir rootfs #创建一个根目录,当做menuos的根目录
cd menu
sudo apt-get install libc6-dev-i386 #安装libc6-dev-i386
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu #建立一个软链接 之后可以直接执行
qemu vim Makefile #修改一下Makefile文件
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img #创建的根文件系统
make rootfs #初始化根目录

4、构建gdb调试环境

  第一步首先打开gdb server。

qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append  nokaslr -s -S

  打开之后是一个等待连接的状态

技术图片

  之后建立与geb server之间的连接。

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指令可以查看断点处的代码。

  之后即可看到gdb server已经连接成功

技术图片

  并且可以看到我们设置的断点处的代码:

技术图片

5、构建调试环境menuos

cd ~/LinuxKernel  
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab2
make     
cd ../../menu/
vim Makefile #修改Makefile文件
make rootfs   #将tcp服务端集成到menuos环境中
cd ~/LinuxKernel  
cd linuxnet/lab3
vim Makefile #修改Makefile文件
make rootfs   #将tcp客户端集成到menuos环境中

  之后我们可以看到集成了新功能的menuos,通过help可以看到当前有哪些功能可用,我们可以看到新增了replyhi和hello两个命令,当我们输入replyhi之后即与客户端进行了连接,当我们输入hello之后可以发现此时可以在服务端和客户端进行hello/hi的信息传递。

技术图片

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

标签:lex   hello   代码   menu   root   init   成功   with   通过   

原文地址:https://www.cnblogs.com/zhang512/p/12019267.html

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