近期往 openstack 里倒腾 USB passthrough[1],遂把 USB 知识做较为全面的整理,以供分享。
USB device
什么是 USB device, 上图机智的小萌狗就是 USB device,你的鼠标是 USB device, 键盘是 USB device,U 盘更是典型的 USB device。说了这么多例子,还是得用一个专业的名词一语概之,所谓 USB,即是 Universal Serial Bus(通用串行总线),它是用来连接 USB device 和计算机,从而实现 USB device 和计算机之间的通讯[2]。
当把 U 盘插入到计算机的 USB 口时,我们便能在操作系统中找到该 USB device 并使用之,是不是很简单? 可对码农来说,却不简单,简直是复杂...... 下图解释了了 USB device 如何与计算机系统交互。USB device 不能直接和操作系统通信,它需要 USB controller interface 这座桥梁才能在硬件上接入到计算机上。HCD(Host Controller Device)则是则是硬件商向程序员提供的开发接口。
USB device 通过 USB controller 和计算机交互得遵守一套标准,这套标准我们称之为 USB 协议:
USB版本 | 最大传输速率 | 速率称号 | 最大输出电流 | 推出时间 |
USB1.0 | 1.5Mbps(192KB/s) | 低速(Low-Speed) | 500mA | 1996年1月 |
USB1.1 | 12Mbps(1.5MB/s) | 全速(Full-Speed) | 500mA | 1998年9月 |