qemu+kernel (2) 单步调试arm64 linux kernel
pre:
gdb-multiarch
kernel debug:
第一步:qemu启动内核并暂停等待(暂停是可选的,如果不调启动,可以去掉),同时需要建立网络端口等待gdb attach;
命令:
qemu-system-aarch64 -machine virt,virtualization=true,gic-version=3 -nographic -m size=1024M -cpu cortex-a72 -smp 2 -kernel /local/mnt2/workspace/lx/talos/lkp10/kernel_platform/out/kernel-qcm6490-qclinux-base/dist/Image -drive format=raw,file=rootfs.img -append "root=/dev/vda rw nokaslr" -s -S
# -s 是-gdb tcp::1234 的简写,如果需要换端口可以用-gdb tcp::1234替换-s参数
# -S 是freeze cpu at startup的指令,也就是kernel 启动时就挂起,等待调试连接,如果不需要调试内核启动,这个参数也
可以去掉
# nokaslr 关闭KASLR,它是内核启动添加随机地址保护
第二步:启动gdb(target=arm64)加载对应kernel Image的vmlinux, attach到指定端口即可
gdb-multiarch --tui vmlinux
target remote:1234
第三步:如果是启动是挂起,直接设置断点即可调试
b 函数名称:可以在相应函数打断点
bt看堆栈,可以用frame去看每一层关系
s和n都是一行一行执行代码:
n:不进入函数内部,整个函数会被执行
s:进入函数内部,一步步观察
#通信硬件人笔面经互助##秋招提前批启动你开冲了吗##牛客创作赏金赛#