QEMU & GDB 调试内核

简介

本篇文章用来QEMU & GDB 调试内核使用

文件的分布


ROOT=/root/runlinux/Chapter1

ROOTFS=$ROOT/fs
ROOTFS_IMG=$ROOT/rootfs.img
ROOTFS_IMG_MOUNT=/mnt/rootfs

KERNEL_ROOT=$ROOT/linux-4.0
KERNEL_IMG=$KERNEL_ROOT/arch/arm/boot/zImage
KERNEL_DTB=$KERNEL_ROOT/arch/arm/boot/dts/vexpress-v2p-ca9.dtb

编译内核

首先修改Makefile 文件中的架构以及编译工具链

# ARCH		?= $(SUBARCH)
ARCH 		?= arm
# CROSS_COMPILE	?= $(CONFIG_CROSS_COMPILE:"%"=%)
CROSS_COMPILE	?= arm-linux-gnueabi-

以及 将 优化等级修改为 -O1

ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS	+= -O1 $(call cc-disable-warning,maybe-uninitialized,)
else
KBUILD_CFLAGS	+= -O1
endif

最开始是想修改为 -O0 的,但是编译出现了问题。就只好修改为 -O1。区别不是太大。

修改config配置

root@zhou 12:03:35 ~/r/C/linux-4.0 # make vexpress_defconfig
root@zhou 12:03:48 ~/r/C/linux-4.0 # make menuconfig
#   Kernel hacking  --->
#       Compile-time checks and compiler options  --->
#           [*] Compile the kernel with debug info

编译

make bzImage -j2
make dtbs

运行

生成最小文件系统的步骤,暂时略过。大致的思路就是,制作一个镜像。然后将其格式化为 一个 ext3的文件系统镜像。其他的格式也可以。

    qemu-system-arm -M vexpress-a9 -smp 4 -m 100M -kernel $KERNEL_IMG \
    -dtb $KERNEL_DTB -nographic \
    -append "root=/dev/mmcblk0 rw rdinit=/linuxrc console=ttyAMA0 loglevel=8 slub_debug kmemleak=on" \
    -sd $ROOTFS_IMG \
    -S -s
    # -S 表示 QEMU 将会冻结虚拟机
    # -s 表示在 1234端口接收 GDB的调试

gdb 开始调试

root@zhou 14:27:57 ~ # apt-get install gdb-multiarch
root@zhou 14:28:06 ~ # cd runlinux/Chapter1/linux-4.0
# 在次文件夹下面拥有 vmlinux  文件
root@zhou 23:47:06 ~/r/C/linux-4.0 # gdb-multiarch vmlinux 
(gdb) set architecture arm
(gdb) target remote localhost:1234
(gdb) b start_kernel

调试技巧

断点

# 指定某文件夹下面的断点
(gdb) b path/to/filename: line
(gdb) b path/to/filename: funcation
(gdb) b funcation
(gdb) info b 
(gdb) delet index[1~Unlim]

显示

输出变量
(gdb) print ret

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值