執行除錯技巧
參考資料
本篇文章用來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。區別不是太大。
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 \
-sd $rootfs_img \
-s -s
# -s 表示 qemu 將會凍結虛擬機器
# -s 表示在 1234埠接收 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
QEMU GDB除錯核心
gdb qemu的方式是一種比較常見的除錯核心和驅動的方法,這裡寫的是我在安裝和使用gdb qemu時碰到的一些問題的筆記總結。環境準備 直接安裝 debian系統,可以直接apt get install qemu 開始我使用的安裝包直接安裝的gdb,但是在使用過程中會報下面的錯誤 圖1opncls...
使用Qemu gdb來除錯核心
昨天聽別人講使用qemu和gdb來實現原始碼級核心除錯,今天試了一下,果然非常方便,現簡單的記錄一下。qemu是乙個開源的虛擬機器軟體,能夠提供全系統的 可以執行在多個平台上,並 多個別的平台。qemu虛擬機器是採用動態翻譯來實現cpu的 的,對硬體的依賴程度低,通過它提供的眾多引數,你能夠對虛擬的...
使用Qemu gdb來除錯核心
昨天聽別人講使用qemu和gdb來實現原始碼級核心除錯,今天試了一下,果然非常方便,現簡單的記錄一下。qemu是乙個開源的虛擬機器軟體,能夠提供全系統的 可以執行在多個平台上,並 多個別的平台。qemu虛擬機器是採用動態翻譯來實現cpu的 的,對硬體的依賴程度低,通過它提供的眾多引數,你能夠對虛擬的...