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:进入函数内部,一步步观察

#通信硬件人笔面经互助##秋招提前批启动你开冲了吗##牛客创作赏金赛#
全部评论

相关推荐

不愿透露姓名的神秘牛友
04-28 21:02
华思系统股份有限公司 嵌入式软件工程师 10k*15 本科985
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务