以下是构建调试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系统完成。