实验环境:Ubuntu 18.04 LTS
1.编译Linux 5.0.1内核
下载Linux内核源码并解压:
mkdir LinuxKernel #创建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 #进入linux-5.0.1目录
安装编译工具
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev
配置编译内核
make i386_defconfig #创建32默认位配置文件 make menuconfig
之后会进入图形界面,再图形界面完成配置,具体操作步骤如下:
Kernel hacking =>Compile-time checks and compiler options=>Compile the kernel with debug info 输入y勾选该选项。 完成后在下方选择save ,然后选择下方的Exit依次退出
再执行make命令开始编译,大概20min左右:
make
2.qemu加载MenuOS
安装qemu命令
在LinuxKernel目录下执行以下命令:
sudo apt install qemu #安装qemu命令 sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu #建立一个软链接 之后可以直接执行qemu
下载MENU OS,并安装依赖
git clone https://github.com/mengning/menu.git mkdir rootfs cd menu sudo apt-get install libc6-dev-i386 #安装libc6-dev-i386
修改Makefile文件,将3.18.6修改为5.0.1,如图所示:
初始化根目录
make rootfs
执行后显示如下:
3.gdb调试MenuOS
先关闭qemu虚拟机,在qemu中启动gdb server
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S
连接gdb server
重开一个终端依次执行下面的命令
gdb file ~/linux-5.0.1/vmlinux break start_kernel target remote:1234 c list
连接成功后显示如下:
4.验证MenuOS的网络
将TCP网络通信程序的服务端集成到MenuOS 系统中
进入LinuxKernel目录,依次执行以下命令
git clone https://github.com/mengning/linuxnet.git cd linuxnet/lab2 make cd ../../menu/ make rootfs
将TCP网络通信程序的客户端集成到MenuOS系统中
进入LinuxKernel目录,执行以下命令
和上面一样,把lab3目录下的Makefile文件中的linux3.18.6改为linux5.0.1
cd linuxnet/lab3
make rootfs
在QEMU窗口中输入以下命令:
replyhi
hello
执行结果如下:
MenuOS的网络可以正常工作