2013-04-29 61 views
4

我試圖在Qemu上模擬cavium octeon的mips64 linux內核。我目前在使用模式init代碼時遇到了一些問題,並且想要調試init.i,我正在使用-s -S選項啓動Qemu在命令行中使用命令使用gdb在Qemu上調試初始化

DDD --debugger/OCTEON-SDK /工具/斌/ MIPS64-OCTEON-Linux的GNU的GDB /OCTEON-SDK/linux/kernel_2.6/linux/運行GDB的vmlinux

,然後用命令附接的gdb

目標遠程本地主機:1234

gdb當前只顯示在內核空間中運行的指令。

我想問的是,有什麼方法可以像內核空間的情況下一步一步地調試usermode init和庫指令? 例如,如果printf是從init發出的,那麼我想看看哪些指令正在庫中執行,以及如何將控制返回給內核?

+0

這將取決於gdb是否支持MIPS可以處理內核和用戶空間之間的轉換。嘗試在內核的resume_userspace中放置一個斷點,然後單步執行,看看是否處理了該過渡。 – stsquad 2014-07-03 14:35:44

回答

0

我已成功使用在描述的過程步驟調試的BusyBox的/sbin/initIs it possible to use gdb and qemu to debug linux user space programs and kernel space simultaneously?

你要記住的唯一額外的東西:

  • /sbin/init僅僅是一個符號鏈接busybox,所以您必須使用/bin/busybox作爲對象文件
  • 「主」功能/sbin/init實際上是init_main,以下調用的T BusyBox的」慣例他主要針對每個僞可執行文件,如<exec>_main

這是有點片狀,但大多隻是工作。