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:进入函数内部,一步步观察
#通信硬件人笔面经互助##秋招提前批启动你开冲了吗##牛客创作赏金赛#
秋招之旅结束大半,目前也拿到了一些公司的offer,各种方向的: 芯片公司:兆芯,联发科,大普微等 产品公司:小米,联想,影石,虹软,诺瓦等 汽车公司:长安,博世,经纬恒润等 国央企研究所:32所,52所,712,星网,航空工业上电所 接下来会分享一些面试经验和学习经验