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

实验环境:基于Ubuntu18.0.4和Linux5.0.1

一、下载Linux内核源代码

下载地址:https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz
下载后放入~/LinuxKernel文件夹

执行

mv linux-5.0.1.tar.xz ~/LinuxKernel
xz -d linux-5.0.1.tar.xz
tar -xvf linux-5.0.1.tar
cd linux-5.0.1

二、安装内核编译工具

1、更换镜像源(可选)

若官方镜像源安装太慢,可以更换阿里云镜像源(可选)

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak  #备份原文件
sudo vim /etc/apt/sources.list

命令模式下输入ggdG全部删除即可,然后复制对应版本配置(此处为Ubuntu18.04),不同版本可查找 https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.53322f70pnGTJP

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

保存后,输入sudo apt-get update生效

2、安装编译工具

非常重要!必须保证都安装上,不然编译报各种错。

sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev

三、配置编译内核

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

make menuconfig #开启文本菜单选项,对窗口有限制,尽量调大窗口

通过↑↓键

  1. 选择Kernel hacking
  2. 选择Compile-time checks and compiler options
  3. []Compile the kernel with debug info 选项处按Y
  4. Save后Exit回车即可

开始编译内核

make -j*       # *为cpu核心数

我输入的是make -j4 编译速度有明显提升,这个步骤一般需要几十分钟

没有选择升级当前内核,由于升级之后无法正常开机,若要尝试,建议先执行快照进行备份,以下是升级内核的命令(不推荐)

sudo make modules_install # ⚠️安装前通过系统快照备份系统,以防出现故障前功尽弃
sudo make install
sudo update-grub
reboot
uname -a                 # 查看当前内核版本号

四、通过QEMU虚拟机加载内核

cd ~/LinuxKernel/
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-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage报错,是VFS:Unable to mount root fs on Unknown-block(xxx,xxx)并卡死,关闭窗口继续往下执行。

五、构造MenuOS

1、制作根目录

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

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

mkdir rootfs

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

修改Makefile

cd menu

vim Makefile

修改前:qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img

修改后:qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img

命令模式wq保存,执行

sudo ln -s /usr/bin/qemu-system-i386  /usr/bin/qemu

2、初始化根目录

#在menu目录下执行一下命令
make rootfs

结果如下:

六、构建Linux内核的gdb调试环境

在执行gdb 调试之前,保证make menuconfig那个步骤已经执行,不然编译的内核系统不含调试信息。

1、启动gdb server

关闭已启动的MenuOS窗口,执行

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

2、gdb客户端连接gdb server

打开另一个终端输入gdb

# 在提示下依次输入
file ~/LinuxKernel/linux-5.0.1/vmlinux
break start_kernel
target remote:1234
c
list



MenuOS窗口如下:

七、构建MenuOS的网络功能

1、将 TCP 网络通信程序的服务端集成到 MenuOS 系统中

cd ~/LinuxKernel  
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab2
make
cd ../../menu/
make rootfs

2、将 TCP 网络通信程序的客户端集成到 MenuOS 系统中

cd ~/LinuxKernel  
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab3
vim Makefile
# 修改rootfs为linux-5.0.1保存
make rootfs

结果如图:menuOS下面已经多了replyhi,和 hello命令

posted @ 2019-12-11 10:44  温冷  阅读(196)  评论(0编辑  收藏  举报