首页 > 系统服务 > 详细

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

时间:2019-12-12 21:38:48      阅读:104      评论:0      收藏:0      [点我收藏+]

本次实验环境是:Ubuntu16.0.4 和 Linux5.0.1

一、下载、编译内核

1.1 下载内核

mkdir MenuOS
cd MenuOS
xz -d linux-5.0.1.tar.xz #解压 
tar -xvf linux-5.0.1.tar 
cd linux-5.0.1

 

1.2 配置内核

//安装所需依赖包
sudo apt-get install build-essential libelf-dev libncurses-dev flex bison libssl-dev
cd /linux-5.0.1/
#使用现存内核的配置文件:(xxx处使用TAB补全)
sudo cp /boot/config-xxx -r .config
#生成32位x86的配置文件
make i386_defconfig 
make menuconfig  #开启文本菜单选项

 

make menuconfig出现error:Your display is too small to run menuconfig!将terminal调大即可。

技术分享图片

之后会弹出如下图形界面,依次选择 Kernel hacking ->Compile-time checks and compiler options ->[ ]Compile the kernel with debug info 

然后按Y键,选择 Save ,选择Exit直到退出。

技术分享图片

make编译

make (这个过程比较慢,可以加参数-j * ,选择编译时的cpu核数,加快编译速度)

技术分享图片

二、Qemu加载内核

下载qemu、MenuOS

sudo apt install qemu  # 安装qemu
git clone https://github.com/mengning/menu.git #下载MenuOS

制作根文件系统镜像

mkdir rootfs #为MenuOS创建根目录
cd menu
sudo apt-get install libc6-dev-i386#在64位环境下编译32位

#此时注意在初始化根目录之前要修改Makefile的内容,因为实验楼的系统是Linux 3.18.6,这里要改为5.0.1,修改之后如下
#qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86_64/boot/bzImage -initrd ../rootfs.img
#注意在Makefile修改命令时开头需加上TAB键,否则会报错
#创建软链接
sudo ln -s /usr/bin/qemu-system-i386 usr/bin/qemu
make rootfs

初始化根目录(这里使用MenuOS带的文件系统)

技术分享图片

Qemu启动内核,可以看到内核正常启动

qemu -kernel linux-5.0.1/arch/x86_64/boot/bzImage  -initrd rootfs.img

技术分享图片

三、验证MenuOS的网络

cd ~/MenuOS/ 
#下载测试程序 git clone https:
//github.com/mengning/linuxnet.git cd linuxnet/lab2 make cd ../../menu/#这里要修改Makefile文件,同上 make rootfs

#另起一个终端
cd MenuOS/linuxnet/lab3
#修改Makefile文件
make rootfs

输入replyhi,输入hello,收到了hi,证明MenuOS的网络可以正常工作

技术分享图片

四、构建Linux内核gdb调试环境

Qemu中启动内核,可以看到Qemu启动显示黑屏,此时是qemu在等待gdb的连接。

cd ~/MenuOS/menu
vi Makefile
#修改Makefile,在qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86_64/boot/bzImage -initrd ../rootfs.img
末尾加上-append nokaslr -s -S
#这里-S freeze CPU at startup
-s shorthand for -gdb tcp::1234 若不想用1234端口,可以使用-gdb tcp::xx取代-s选项
make rootfs

技术分享图片

连接gdb server并调试

gdb
file ~/MenuOS/linux-5.0.1/vmlinux
target remote:1234
#设置断点对start_kernel进行跟踪
break start_kernel

技术分享图片

继续在rest_init函数设置断点

技术分享图片

 

 

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

原文:https://www.cnblogs.com/andyflyto/p/12031421.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!