我尝试在调试模式下构建 Linux 内核版本 3.10.107 和 4.13.8。我使用了以下步骤来构建内核。
主机装有 Ubuntu 16.04 操作系统,并尝试将其内核更新到带有调试信息的最新版本(4.13.8)。
获取最新的内核源码
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.13.8.tar.xz
mkdir linux-4.13.8 && tar xvf linux-4.13.8.tar.xz -C $(pwd)/linux-4.13.8/
cd linux-4.13.8
从主机 linux 复制 .config
cp /boot/config-`uname -r`* .config
启用以下选项以在调试模式下构建内核
gedit .config
CONFIG_DEBUG_KERNEL=y
CONFIG_FRAME_POINTER=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_DEBUG_INFO=y
验证了 menuconfig 的 gui 菜单
make menuconfig
在内核黑客选项中,(内核调试、编译内核调试信息、Printk 选项)已启用,默认调试消息和控制台级别为 7。
执行了make命令。内核构建成功。
使-j4
安装内核
sudo make modules_install install
更新了Grub2
sudo update-grub2
重新启动操作系统
reboot
操作系统更新为最新的内核 4.13.8 并且运行良好,但在 dmesg 控制台输出和日志文件(如(var/log/kern.log、dmesg、syslog)中看不到调试信息和 printk 输出)
我还尝试使用 gdb 调试内核映像,它显示(未找到调试符号)
请帮忙调试内核。我的目的是详细调试和分析系统调用、陷阱、用户空间到内核空间的切换、内存管理。 (预期比 strace 输出有更多的调试信息)