通過使用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 的虛擬化軟體,在虛擬化的實現中...