QEMU调试Linux系统的USB协议栈

通过使用QEMU调试Linux系统的USB协议栈来学习USB协议栈。

http://blog.csdn.net/zoomdy/article/details/50954190 
mingdu.zheng at gmail dot com

安装QEMU

sudo apt-get install qemu-system-i386
 
 
  • 1
  • 1

启动QEMU进入调试模式

qemu-system-i386 -kernel vmlinuz-2.6.32 -initrd initrd.img -append console=ttyS0 -nographic -S -s -monitor tcp::3333,server,nowait -device pci-ohci
 
 
  • 1
  • 1

-kernel vmlinuz-2.6.32:指定内核文件 
-initrd initrd.img:指定引导时使用的RAM Disk,RAM Disk中集成了BusyBox,包含一些基础命令 
-append console=ttyS:传递给内核的参数,将内核控制台输出重定向到串口 
-nographic:无图形窗口模式,纯文本模式,不需要窗口 
-S:启动虚拟机时不执行代码,当受到GDB指令时才执行 
-s:为-gdb tcp::1234的缩写形式,打开GDB Server,监听端口为1234 
-monitor tcp::3333,server,nowait:将monitor重定向到TCP流,创建TCP服务器,监听端口为3333 
-device pci-ohci:添加OHCI主机控制器到虚拟机

连接QEMU Monitor

socat tcp:localhost:3333 stdio
 
 
  • 1
  • 1

在另一个终端,使用socat将qemu monitor的输出重定向到当前终端的标准输入输出。

打开GDB连接到QEMU

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"
 
 
  • 1
  • 1

-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
 
 
  • 1
  • 2
  • 1
  • 2

通过QEMU Monitor插入优盘

(qemu) drive_add 0 id=my_usb_disk,if=none,file=usbdisk.img
OK
(qemu) device_add usb-storage,id=my_usb_disk,drive=my_usb_disk
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

drive_add创建一个虚拟的磁盘驱动器,usbdisk.img为磁盘映像文件 
device_add添加优盘设备到虚拟机,使用上一步创建的磁盘驱动器

通过QEMU Monitor移除优盘

(qemu) device_del my_usb_disk
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值