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

Posted zhouxinghui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建调试Linux内核网络代码的环境MenuOS系统相关的知识,希望对你有一定的参考价值。

1.下载Linux内核,解压

mkdir shanyan3 #创建实验目录
cd shiyan3
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz
#也可以在浏览器中输入https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz,手动下载
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

 

3.安装qemu虚拟机

sudo apt install qemu

 

4.配置编译内核生成bzImage文件

make defconfig #默认生成.config ,也可以make x86_64_defconfig为64配置,而make i386_defconfig为32为x86配置
make menuconfig # Kernel hacking—>Compile-time checks and compiler options  ---> [*] Compile the kernel with debug info 
make # 或者使用make -j4,其中4为多核CPU核心数,可以加快编译过程

 

make x86_64_defconfig成功如下图

 

make menuconfig出现下图,按上下键,选中kernel hacking,回车,再选中Compile-time checks and compiler options按下回车,再选中 [*] Compile the kernel with debug info

找到按下键盘y键开启此选项。下面要保存退出,按键盘上左右键,选中save回车,选中ok回车。再一步一步选择exit,按下回车,直到回到terminal。

 

make -j4生成bzImage文件,路径为linux-5.0.1/arch/x86/boot/bzImage

 

5.测试qemu虚拟机是否能正常启动

qemu-system-x86_64 -kernel linux-5.0.1/arch/x86/boot/bzImage

 

会出现kernel panic问题在于需要挂载文件系统

 

 

6.制作文件系统

过程为:制作根文件系统镜像,形成根目录结构(可以用busybox,这里是直接拷贝老师的根文件)

git clone https://github.com/mengning/menu.git
cd menu
sudo ln -s /usr/bin/qemu-system-x86_64  /usr/bin/qemu #创建qemu的软链接
sudo apt-get install gcc-multilib make rootfs#Makefile中的命令中的目录与我们自己的不符,需要根据自己的实际修改再编译,如下图所示

#会发现shiyan3目录下生成了rootfs.img,使用如下命令可以再次运行QEMU

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

 

运行成功后按回车可以输入命令,现在只有help、version和quit三个命令,可以尝试自己添加更多的命令


Makefile中的命令中的目录与我们自己的不符,根据自己的实际修改,这里是我修改后的。

 

 7.gdb调试

启动gdbserver

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

 

打开另一个terminal,输入gdb,运行gdb。

file shiyan3/linux-5.0.1/vmlinux
break start_kernel   #设置断点 
target remote:1234   #继续运行
list                  #查看断点处相关源代码

 

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

git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab2
make
cd ../../menu/
make rootfs 

 

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

../linuxnet/lab3
make rootfs #这里同样需要修改Makefile中命令中的目录

 

现在可以输入replthi和hello了


以上是关于构建调试Linux内核网络代码的环境MenuOS系统的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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