构建与调试 Linux 内核

Catalogue
  1. 1. 构建Linux内核
    1. 1.1. 安装 GCC
    2. 1.2. 构建配置
  2. 2. 准备运行环境
    1. 2.1. 准备 Ubuntu 镜像
    2. 2.2. 增加 kgdb 启动参数
    3. 2.3. 给宿主机增加串口虚拟文件
    4. 2.4. 替换我们的内核镜像
  3. 3. 连接系统进行调试
    1. 3.1. attach
    2. 3.2. gdb
    3. 3.3. 回复debug模式
  4. 4. 参考

本文以读者的 Linux 4.19 为构建目标

构建Linux内核

安装 GCC

1
sudo apt install gcc

构建配置

1
2
3
4
make menuconfig
# 选择 kernel hacking —> [*] compile the kernel with debug info 让其携带调试信息
make defconfig 生成配置文件
make 编译kernel

准备运行环境

因为我们只有一个 Kerenl,我们还需要可以运行的 rootfs 等,最简单的方式是基于已经成熟的 Linux 发行版进行替换内核的方式进行运行。

准备 Ubuntu 镜像

Virtualbox 中安装 ubuntu server 14.04

增加 kgdb 启动参数

在 /etc/default/grub 中增加 kgdb 的启动参数

1
kgdbwait kgdboc=ttyS0,115200 sysrq_always_enabled nokaslr

给宿主机增加串口虚拟文件

在virtualbox的settings里面选择serial port,勾选enable serial port,之后取消勾选connect to existing pipe/socket。port number、irq、I/O port就使用默认,port mode选择HOST PIPE,下面的目录填上/tmp/serial。

替换我们的内核镜像

1
make install

最后一步就是直接重启我们的系统,这个时候你会发现系统停留在启动页面了。

连接系统进行调试

attach

1
socat -d -d /tmp/serial PTY

gdb

1
2
gdb vmlinux
target remote /dev/pts/1

回复debug模式

1
echo g > /dev/sysrq-trigger

参考