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

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
Makefile

 执行下面的命令:

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

 

posted @ 2019-12-12 14:57  Xpeng2333  阅读(235)  评论(0编辑  收藏  举报