【Linux 内核系列】基于 VMware Ubuntu18 编译调试 Linux 内核
【1】环境与工具简介
环境 版本
Win10 Windows 10 家庭中文版
VMware
15
Ubuntu 18.04
Qemu 2.12.1
Busybox 1.35.0
Linux 内核 5.6.18
VsCode 1.68.1
Qemu、Busybox、Linux内核工具资源下载链接
https://download.csdn.net/download/qq_27788177/85749771
【2】Linux 内核编译
Linux 内核源码下载链接,https://www.kernel.org/
解压 Linux 内核源码
tar -xvf linux-5.6.18.tar.xz
安装相关依赖软件包
apt install flex
apt install bison
apt install libssl-dev
apt install libncurses5-dev libncursesw5-dev
配置 Linux 内核
编译打开配置界面
make menuconfig
开启 Linux Debug 功能
Kernel hacking --->
Compile-time checks and compiler options --->
[*] Compile the kernel with debug info
[*] Provide GDB scripts for kernel debuggin
关闭地址随机化,否则断点无法停止
Processor type and features ---->
[] Randomize the address of the kernel image (KASLR)
编译/安装 Linux 内核
编译 Linux 内核
sudo make
生成
linux-5.6.18/arch/x86_64/boot/bzImage
安装 Linux 内核模块
sudo make modules_install
安装 Linux 内核
sudo make install
VMware 启动时选择新编译的 LInux 内核
重启系统
reboot
在进入 VMware 启动界面时长按 shift 键,即可进入 grub 选择界面选择对应的内核版本
【3】Qemu 编译安装
Qemu 源码下载链接地址,https://download.qemu.org/
解压 Qemu 源码压缩包
tar -xvf qemu-2.12.1.tar.xz
安装相关依赖软件包
apt install zlib* zlib1g-dev
apt install build-essential pkg-config
apt install libglib2.0-dev
apt install binutils-dev
apt install libboost-all-dev
apt install autoconf libtool
apt install libssl-dev
apt install libpixman-1-dev
apt install libpython-dev python-pip python-capstone
apt install virtualenv
配置、编译、安装 Qemu
./configure
make
make install
【4】Busybox 编译与使用
Busybox 源码下载链接地址,https://busybox.net/downloads/
配置 Busybox
编译配置菜单界面
make menuconfig
配置 Busybox 为静态编译
Settings --->
[*] Build BusyBox as a static binary (no shared libs)
制作 rootfs 并将 busybox 安装到其中:
使用 dd 命令创建文件并格式化为 ext4 文件系统
dd if=/dev/zero of=rootfs.img bs=1M count=10
mkfs.ext4 rootfs.img
创建用于挂载该镜像文件的目录 fs,挂载后才能往里面写入 busybox
使用 mount 命令将 rootfs.img 挂载到 fs 目录,编译 busybox 并写入 fs 目录中
mkdir fs
sudo mount -t ext4 -o loop rootfs.img ./fs
sudo make install CONFIG_PREFIX=./fs
补充配置写入镜像的 busybox
sudo mkdir proc dev etc home mnt
sudo cp -r ../examples/bootfloppy/etc/* etc/
sudo chmod -R 777 fs/
卸载 rootfs.img
sudo umount fs
【5】Qemu 启动指定 Linux 内核以及关闭 Qemu 相关总结
Qemu 命令参数说明
-kernel # 指定编译好的内核镜像
-hda # 指定硬盘
-append
“root=/dev/sda” # 指示根文件系统
“console=ttyS0” # 把 QEMU 的输入输出定向到当前终端上
-nographic # 不使用图形输出窗口
-s # -gdb tcp::1234 缩写,监听 1234 端口
# 在 GDB 中可以通过 target remote localhost:1234 连接
Qemu 启动命令
正常启动 Qemu
qemu-system-x86_64 \
-kernel ./linux-5.6.18/arch/x86_64/boot/bzImage \
-hda ./busybox-1.35.0/rootfs.img \
-append "root=/dev/sda console=ttyS0 loglevel=8" \
-nographic
启动 Qemu 并开启 GDB 监听
qemu-system-x86_64 \
-kernel ./linux-5.6.18/arch/x86_64/boot/bzImage \
-hda ./busybox-1.35.0/rootfs.img \
-append "root=/dev/sda console=ttyS0 loglevel=8" \
-nographic \
-S \
-s \
关闭 Qemu
Ctrl+A 松开后按 X 退出 qemu
【6】VsCode 远程调试 Linux 内核代码
VsCode 调试 Linux Kernel 配置
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "/home/ubun/WorkSpace/linux-5.6.18/vmlinux", // 指定vmlinux路径
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb", // 指定gdb路径
"miDebuggerServerAddress": "192.168.163.133:1234", // gdb 连接
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
【附录】
【附录-A】VMware 进入 grub 选择界面的方式
VMware 启动 ubuntu 时,若想进入 grub 选择界面,在进入 VMware 启动界面时,长按 shift 键即可;
参考与致谢
本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。
【1】Linux内核编译
【2】Linux 内核调试 九:Linux 内核调试环境搭建
【3】ubuntu编译安装qemu
【4】QEMU调试Linux内核环境搭建
————————————————
原文链接:https://blog.csdn.net/qq_27788177/article/details/125409027