• 【Linux 内核系列】基于 VMware Ubuntu18 编译调试 Linux 内核


    【Linux 内核系列】基于 VMware Ubuntu18 编译调试 Linux 内核

    【1】环境与工具简介

    环境版本
    Win10Windows 10 家庭中文版
    VMware

    15

    Ubuntu18.04
    Qemu2.12.1
    Busybox1.35.0
    Linux 内核5.6.18
    VsCode1.68.1

    Qemu、Busybox、Linux内核工具资源下载链接icon-default.png?t=M5H6https://download.csdn.net/download/qq_27788177/85749771

    【2】Linux 内核编译

    tar -xvf linux-5.6.18.tar.xz
    • 安装相关依赖软件包
    1. apt install flex
    2. apt install bison
    3. apt install libssl-dev
    4. apt install libncurses5-dev libncursesw5-dev
    • 配置 Linux 内核
    1. 编译打开配置界面
    2. make menuconfig
    3. 开启 Linux Debug 功能
    4. Kernel hacking --->
    5. Compile-time checks and compiler options --->
    6. [*] Compile the kernel with debug info
    7. [*] Provide GDB scripts for kernel debuggin
    8. 关闭地址随机化,否则断点无法停止
    9. Processor type and features ---->
    10. [] Randomize the address of the kernel image (KASLR)

    • 编译/安装 Linux 内核
    1. 编译 Linux 内核
    2. sudo make
    3. 生成
    4. linux-5.6.18/arch/x86_64/boot/bzImage
    5. 安装 Linux 内核模块
    6. sudo make modules_install
    7. 安装 Linux 内核
    8. sudo make install
    • VMware 启动时选择新编译的 LInux 内核
    1. 重启系统
    2. reboot
    3. 在进入 VMware 启动界面时长按 shift 键,即可进入 grub 选择界面选择对应的内核版本

    【3】Qemu 编译安装

    tar -xvf qemu-2.12.1.tar.xz
    • 安装相关依赖软件包
    1. apt install zlib* zlib1g-dev
    2. apt install build-essential pkg-config
    3. apt install libglib2.0-dev
    4. apt install binutils-dev
    5. apt install libboost-all-dev
    6. apt install autoconf libtool
    7. apt install libssl-dev
    8. apt install libpixman-1-dev
    9. apt install libpython-dev python-pip python-capstone
    10. apt install virtualenv
    • 配置、编译、安装 Qemu
    1. ./configure
    2. make
    3. make install

    【4】Busybox 编译与使用

    1. 编译配置菜单界面
    2. make menuconfig
    3. 配置 Busybox 为静态编译
    4. Settings --->
    5. [*] Build BusyBox as a static binary (no shared libs)
    • 制作 rootfs 并将 busybox 安装到其中
    1. 使用 dd 命令创建文件并格式化为 ext4 文件系统
    2. dd if=/dev/zero of=rootfs.img bs=1M count=10
    3. mkfs.ext4 rootfs.img
    4. 创建用于挂载该镜像文件的目录 fs,挂载后才能往里面写入 busybox
    5. 使用 mount 命令将 rootfs.img 挂载到 fs 目录,编译 busybox 并写入 fs 目录中
    6. mkdir fs
    7. sudo mount -t ext4 -o loop rootfs.img ./fs
    8. sudo make install CONFIG_PREFIX=./fs
    9. 补充配置写入镜像的 busybox
    10. sudo mkdir proc dev etc home mnt
    11. sudo cp -r ../examples/bootfloppy/etc/* etc/
    12. sudo chmod -R 777 fs/
    13. 卸载 rootfs.img
    14. sudo umount fs

    【5】Qemu 启动指定 Linux 内核以及关闭 Qemu 相关总结

    1. Qemu 命令参数说明
    2. -kernel # 指定编译好的内核镜像
    3. -hda # 指定硬盘
    4. -append
    5. “root=/dev/sda# 指示根文件系统
    6. “console=ttyS0” # 把 QEMU 的输入输出定向到当前终端上
    7. -nographic # 不使用图形输出窗口
    8. -s # -gdb tcp::1234 缩写,监听 1234 端口
    9. # 在 GDB 中可以通过 target remote localhost:1234 连接
    1. Qemu 启动命令
    2. 正常启动 Qemu
    3. qemu-system-x86_64 \
    4. -kernel ./linux-5.6.18/arch/x86_64/boot/bzImage \
    5. -hda ./busybox-1.35.0/rootfs.img \
    6. -append "root=/dev/sda console=ttyS0 loglevel=8" \
    7. -nographic
    8. 启动 Qemu 并开启 GDB 监听
    9. qemu-system-x86_64 \
    10. -kernel ./linux-5.6.18/arch/x86_64/boot/bzImage \
    11. -hda ./busybox-1.35.0/rootfs.img \
    12. -append "root=/dev/sda console=ttyS0 loglevel=8" \
    13. -nographic \
    14. -S \
    15. -s \
    1. 关闭 Qemu
    2. Ctrl+A 松开后按 X 退出 qemu

    【6】VsCode 远程调试 Linux 内核代码

    • VsCode 调试 Linux Kernel 配置
    1. {
    2. // 使用 IntelliSense 了解相关属性。
    3. // 悬停以查看现有属性的描述。
    4. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    5. "version": "0.2.0",
    6. "configurations": [
    7. {
    8. "name": "(gdb) 启动",
    9. "type": "cppdbg",
    10. "request": "launch",
    11. "program": "/home/ubun/WorkSpace/linux-5.6.18/vmlinux", // 指定vmlinux路径
    12. "args": [],
    13. "stopAtEntry": false,
    14. "cwd": "${workspaceFolder}",
    15. "environment": [],
    16. "externalConsole": false,
    17. "MIMode": "gdb",
    18. "miDebuggerPath": "/usr/bin/gdb", // 指定gdb路径
    19. "miDebuggerServerAddress": "192.168.163.133:1234", // gdb 连接
    20. "setupCommands": [
    21. {
    22. "description": "为 gdb 启用整齐打印",
    23. "text": "-enable-pretty-printing",
    24. "ignoreFailures": true
    25. }
    26. ]
    27. }
    28. ]
    29. }

    【附录】

    【附录-A】VMware 进入 grub 选择界面的方式

    • VMware 启动 ubuntu 时,若想进入 grub 选择界面,在进入 VMware 启动界面时,长按 shift 键即可;

    参考与致谢

    本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。

    【1】Linux内核编译

    【2】Linux 内核调试 九:Linux 内核调试环境搭建

    【3】ubuntu编译安装qemu

    【4】QEMU调试Linux内核环境搭建

  • 相关阅读:
    LeetCode Hot-100
    SSH详解
    C++编写的局域网tcp license认证服务
    SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.1 缓存的作用
    羽夏看Linux内核——引导启动(下)
    职场经验:为什么要学习自动化测试?过来人告诉你答案
    写给正在互联网经历孤独和迷茫的你
    Spring Boot 2020 官方基础68课程第24个Spring Boot and OAuth2
    Jmeter 性能测试工具使用
    我的写作心得
  • 原文地址:https://blog.csdn.net/qq_27788177/article/details/125409027