以下是构建调试Linux内核网络代码的环境MenuOS系统的完整步骤:

步骤1:在虚拟机中安装Linux系统 (推荐Ubuntu 18.04)

 1.1点击右上角的新建虚拟机

1.2 选择虚拟机镜像,然后点击下一步

1.3 输入Ubuntu 所需要的一切信息,然后一直点下一步!

Ubuntu就此安装完成

步骤二:下载Linux内核(Linux-5.0.1)

get 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

sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev #安装内核编译所需的库

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

执行上述命令之后:可以看见文件结构中已经有了linux-5.0.1文件夹

步骤3:制作带有debug调试的内核

make menuconfig #执行make menuconfig之后,会跳出一个图形化界面,就在图形化界面中完成以下操作,如果没有跳出,或者报错,自行解决界面大小适应问题:安装vmware tool,或者在设置中调整分辨率。

1:选择 Kernel hacking

2:选择 Compile-time checks and compiler options

3:选择 [ ]Compile the kernel with debug info

4:按Y 前面就多了一个 [*] Compile the kernel with debug info

 5:选择 save

 6:按 esc,直到退出图形化界面

步骤4: 编译

输入make指令

开始制作根文件系统:

步骤1:下载并加载QEMU虚拟机,并加载内核

sudo apt install qemu # 安装qemu命令

qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage #qemu虚拟机加载 linux-5.0.1内核,这条命令可以不用执行,因为后面构造menuOS的makefile中是包含了这条命令的

如果提示错误,请修改qemu中的makefile文件

步骤2:构造MenuOs

#下载menu系统,并在LinuxKernel目录下建一个子目录rootfs,当作menuOS的根目录

git clone https://github.com/mengning/menu.git

mkdir rootfs

sudo apt-get install libc6-dev-i386 #安装libc6-dev-i386

步骤3:编译并加载

cd menu

make rootfs

完成后应该有以下界面:

执行Gdb调试测试

步骤一:启动gdb server

关闭打开的menu OS 系统界面

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

步骤二:建立gdb连接(从另外一个命令行窗口打开)

gdb

file ~/LinuxKernel/linux-5.0.1/vmlinux

break start_kernel

target remote:1234

步骤三:测试gdb连接

在gdb窗口,按下c

观看调试信息,和menu OS系统启动停滞,在按下Enter后,继续执行,则表示gdb测试成功

构建Menu OS的网络功能

在这里首先看一下目前的文件结构·

步骤一:将TCP网络通信程序集成到MenuOS中

cd linux-5.0.1

git clone https://github.com/mengning/linuxnet.git

cd linuxnet/lab2

make

cd ../../../menu/

make rootfs #改一下Makefile

步骤2:将TCP通信的客户端集成到MenuOS中

cd ../linux-5.0.1/linuxnet/lab3

Make rootfs

在这里同样需要修改make file

当menuOS中包含replyhi和hello命令时,就已经制作成功了

到此,构建调试Linux内核(32位)网络代码的环境MenuOS系统完成。

02-13 05:00