【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 内核编译
tar -xvf linux-5.6.18.tar.xz
- apt install flex
- apt install bison
- apt install libssl-dev
- apt install libncurses5-dev libncursesw5-dev
- 编译打开配置界面
- 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 内核
- sudo make
-
- 生成
- linux-5.6.18/arch/x86_64/boot/bzImage
-
- 安装 Linux 内核模块
- sudo make modules_install
-
- 安装 Linux 内核
- sudo make install
- 重启系统
- reboot
-
- 在进入 VMware 启动界面时长按 shift 键,即可进入 grub 选择界面选择对应的内核版本
【3】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
- ./configure
- make
- make install
【4】Busybox 编译与使用
- 编译配置菜单界面
- make menuconfig
-
- 配置 Busybox 为静态编译
- Settings --->
- [*] Build BusyBox as a static binary (no shared libs)
- 使用 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 内核代码
- {
- // 使用 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 选择界面的方式
参考与致谢
本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。
【1】Linux内核编译