1.编译Linux 5.0.1内核
下载Linux内核源码并解压在当前工作目录menuLab:
mkdir menuLab cd menuLab 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目录
安装编译Linux内核所需的依赖:
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev
生成编译内核所需的配置文件:
make i386_defconfig make menuconfig
此时会出现一个图形界面,按下面操作步骤进行:
Kernel hacking -> Compile-time checks and compiler options -> Compile the kernel with debug info 按y键勾选该选项。通过Tab键可以切换下面的选项,在下方选择save回车保存 ,然后选择下方的Exit依次退出当前界面:
再执行make命令开始编译,通过 -j4参数可以使得编译速度大大提高:
make -j4
2.qemu加载MenuOS
首先安装qemu命令,然后在目录menuLab下执行以下命令:
sudo apt install qemu #如果提示未找到请先执行sudo apt update
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu #相当于命令重命名
下载MENU OS,并安装编译程序所需的依赖库:
git clone https://github.com/mengning/menu.git
sudo apt install libc6-dev-i386 #为了支持在64位系统中编译32位程序
mkdir rootfs
cd menu
修改Makefile文件,将3.18.6修改为5.0.1:
CC_PTHREAD_FLAGS = -lpthread CC_FLAGS = -c CC_OUTPUT_FLAGS = -o CC = gcc RM = rm RM_FLAGS = -f TARGET = test OBJS = linktable.o menu.o test.o all: $(OBJS) $(CC) $(CC_OUTPUT_FLAGS) $(TARGET) $(OBJS) rootfs: gcc -o init linktable.c menu.c test.c -m32 -static -lpthread gcc -o hello hello.c -m32 -static find init hello | cpio -o -Hnewc |gzip -9 > ../rootfs.img qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img .c.o: $(CC) $(CC_FLAGS) $< clean: $(RM) $(RM_FLAGS) $(OBJS) $(TARGET) *.bak
执行下面的命令:
make rootfs
执行后显示如下:
关闭此界面。
3.gdb调试MenuOS
通过下面的命令在qemu中启动gdb server:
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S
保持当前终端不变,打开另一个终端进入工作目录menuLab并执行下面的命令:
gdb file ./linux-5.0.1/vmlinux break start_kernel target remote:1234 c list
可以看到下面的输出信息:
4.验证MenuOS网络
进入menuLab目录,执行以下命令:
git clone https://github.com/mengning/linuxnet.git cd linuxnet/lab2 make cd ../../menu/ make rootfs
再次切换到menuLab目录,执行下面命令,将Makefile文件中的3.18.6改为5.0.1:
cd linuxnet/lab3
vi Makefile #3.18.6改为5.0.1 make rootfs
在QEMU窗口中输入以下命令:
replyhi
hello
执行结果如下:
我们可以看到menuOS的网络可以正常运行。
5.参考资料
https://github.com/mengning/linuxnet
https://github.com/mengning/menu
https://github.com/mengning/menu