Vscode 调试arm64 linux内核

对于linux内存系列的阅读和测试记录。

https://zhuanlan.zhihu.com/p/105069730 https://zhuanlan.zhihu.com/p/510289859

搭建arm64内核调试环境:

安装工具: sudo apt-get install gcc-aarch64-linux-gnu sudo apt-get install libncurses5-dev build-essential git bison flex libssl-dev

还要安装支持aarch64的gdb: sudo apt-get install gdb-muliarch

下载内核: /media/wlz/beifen/neihe$ wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.0.tar.gz /media/wlz/beifen/neihe$ tar -xvf linux-5.0.tar.gz /media/wlz/beifen/neihe$ cd linux-5.0/

配置+编译: /media/wlz/beifen/neihe/linux-5.0$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig /media/wlz/beifen/neihe/linux-5.0$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8

安装qemu-arm版: sudo apt-get install qemu-system-arm 安装的为4.2.1。

制作根文件系统:

由于初期是调试启动代码为主,所以先制作一个简单的文件系统:

https://zhuanlan.zhihu.com/p/105069730

制作完成后运行qemu: qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 2 -m 4096M -kernel ./linux-5.0/arch/arm64/boot/Image -nographic -append “console=ttyAMA0 init=/linuxrc ignore_loglevel” -initrd ./rootfs -S -gdb tcp::1234

参考https://zhuanlan.zhihu.com/p/345232459

关于qemu-system-aarch64的几个参数解释如下:

-smp 核数目 -m 物理内存大小 -kernel 内核压缩镜像位置 -initrd rootfs位置 -nographic 不使用图形界面,不加可能会因为无法启动图形界面而失败 -append cmdline启动参数 -S 在入口处阻塞CPU -gdb tcp::xxxx 指定通信通道为 本地tcp通道(因为是在同一个机器上),端口号为xxxx,如果不需要指定端口号可以用-s 代替

此时gdbserver已启动,需在另一个窗口启动gdb并连接:

gdb-multiarch ./linux5.0/vmlinux (gdb)target remote :1234 (gdb)break start_kernel (gdb)continue (gdb)step

此时基本的流程结束。

vscode调试: https://zhuanlan.zhihu.com/p/510289859

通过vscode进行gdb调试可以更直观。

先在vscode中下载gdb扩展:

然后打开linux源码目录并设为工作空间: Debug - configure打开configure文件并编辑: { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 “version”: “0.2.0”, “configurations”: [ { “name”: “kernel debug”, “type”: “cppdbg”, “request”: “launch”, “program”: “ w o r k s p a c e F o l d e r / v m l i n u x " , " c w d " : " {workspaceFolder}/vmlinux", "cwd": " workspaceFolder/vmlinux","cwd":"{workspaceFolder}”, “MIMode”: “gdb”, “miDebuggerPath”:“/usr/bin/gdb-multiarch”, “miDebuggerServerAddress”: “localhost:1234” } ] }

随后和前章节类似,先开启qemu并运行gdbserver: qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 2 -m 4096M -kernel ./linux-5.0/arch/arm64/boot/Image -nographic -append “console=ttyAMA0 init=/linuxrc ignore_loglevel” -initrd ./rootfs -S -gdb tcp::1234

然后在vscode中添加一个断点: 点击运行:

经验分享 程序员 微信小程序 职场和发展