QEMU除錯Linux系統的USB協議棧

2021-08-04 15:18:58 字數 1465 閱讀 5433

通過使用qemu除錯linux系統的usb協議棧來學習usb協議棧。

mingdu.zheng at gmail dot com

sudo apt-get install qemu-system

-i386

socat

tcp:localhost

:3333

stdio

在另乙個終端,使用socat將qemu monitor的輸出重定向到當前終端的標準輸入輸出。

gdb vmlinux-

2.6.32

-ex"dir linux-2.6.32"

-ex"target remote :1234"

-ex"b usb_init"

-ex"b ohci_hcd_mod_init"

-ex"b ehci_hcd_init"

-ex"b usb_stor_init"

-ex"b storage_probe"

-ex"c"

-ex 「dir /home/firm/linux/linux-2.6.32/」:gdb啟動後執行dir命令,指定源**查詢路徑 

-ex 「target remote :1234」:接著執行target命令,連線到qemu的gdb server 

-ex 「b usb_init」:接著執行b命令,設定斷點,usb_init為usb核心層的初始化入口函式 

-ex 「b ohci_hcd_mod_init」:繼續設定斷點,ohci_hcd_mod_init為ohci主機控制器的初始化入口函式 

-ex 「b ehci_hcd_init」:繼續設定斷點,ehci_hcd_init為ehci主機控制器的初始化入口函式 

-ex 「b usb_stor_init」:繼續設定斷點,usb_stor_init為mass storage類裝置驅動的初始化入口函式 

-ex 「b storage_probe」:繼續設定斷點,storage_probe為mass storage類裝置驅動的探測函式 

-ex 「c」:執行c命令,虛擬機器開始啟動 

斷點應按需設定

dd if=/dev/zero

of=usbdisk.img bs=512 count=102400

mkfs.ext2 usbdisk.img

id=my_usb_disk,if=none,file=usbdisk.img

ok(qemu) device_add usb-storage,id=my_usb_disk,drive=my_usb_disk

drive_add建立乙個虛擬的磁碟驅動器,usbdisk.img為磁碟映像檔案 

device_add新增優盤裝置到虛擬機器,使用上一步建立的磁碟驅動器

(qemu) device_del my_usb_disk

ubuntu用qemu除錯linux核心

出於對用虛擬機器 除錯 核心 看是否能對學習核心有比較大的幫助。進行了下驗證 中間 的命令僅作為參考,是使用過程中的一些記錄,檔案命名 路徑名 使用時 作出對應調整 需。wget 解壓 tar xvf linux 3.10.104.tar.xz cd linux 3.10.104 進行配置 make...

如何除錯執行在qemu上的riscv版uboot?

uboot有兩個階段,重定位之前和重定位之後,這兩個階段的符號表是不一樣的,因此需關注是除錯重定位之前的uboot還是重定位之後的uboot 以riscv版uboot為例 1.除錯重定位之前的uboot 1.1 使用qemu啟動uboot,並進入除錯模式 qemu system riscv64 no...

在qemu環境中用gdb除錯Linux核心

對使用者態程序,利用gdb除錯 是很方便的手段。而對於核心態的問題,可以利用crash等工具基於coredump檔案進行除錯。其實我們也可以利用一些手段對linux核心 進行gdb除錯,qemu就是一種。qemu是一款完全軟體模擬 binary translation 的虛擬化軟體,在虛擬化的實現中...