gpt4 book ai didi

linux - 模拟物理 USB 设备 Linux

转载 作者:IT王子 更新时间:2023-10-29 00:00:52 29 4
gpt4 key购买 nike

我有一个 Linux 应用程序,我想对其进行一些自动化测试,它的状态应该根据某些设备的状态而改变,例如 USB 设备、WLAN 设备、WAN 设备。但是,我们不再拥有可供使用的物理 USB、WLAN、WAN 等设备,因此我需要想出一种方法来测试该程序,而无需实际插入物理设备、打开/关闭它们等。

我只是从简单地创建一个我可以从用户空间控制的虚拟 USB 设备开始,但是我缺乏基本的知识阻止我在这些论坛上采取任何类似的主题并将它们应用到我的项目。我觉得我需要创建某种虚拟 USB 驱动程序,然后让它与某些用户级程序而不是 usbfs 进行通信。然而,即使我创建了这个虚拟驱动程序,我如何从用户空间“插入”这个设备并让我的程序注册到这个特定的驱动程序?我尝试做的事情是否可行?

最佳答案

最好的方法是使用 Linux Gadget 驱动程序和硬件,让您成为 USB 设备。小工具驱动程序允许计算机“假装”为任何类型的设备。然后你的被测系统有一根 USB OTG 电缆连接到小工具盒。如果您的小工具盒有合适的硬件,您甚至不需要拔下电缆。 “小工具盒”可以是运行 Linux 的台式机/笔记本电脑(如果它支持 USB OTG),甚至是 Android 手机或 Raspberry Pi。 (注意 USB 数据线很烂。仅仅因为数据线合适并不意味着它为 USB OTG 连接正确。)

一旦您拥有合适的 USB OTG 硬件,您的小工具盒就是软件:

1) 如果您的被测设备支持 OTG,请确保您的小工具盒不会尝试成为 USB 主机。 (然后您的被测设备将成为 USB 客户端。)即确保像 usb_storage 这样的东西不会自动加载。

2) 开箱即用,内核支持 USB 集线器、USB 以太网、USB 串行端口和 USB 内存棒的小工具。只需在您的小工具盒上加载正确的模块,它就会“正常工作”。例如,要创建 USB 内存棒,请执行以下操作:“insmod g_file_storage.ko file=/dev/ram0”。远端会认为您插入了 U 盘。

对于串行设备,您的小工具可以运行用户空间代码,在/dev/USBx 上“拿起电话”并与您的被测设备通话。(大概模拟 4G 调制解调器或其他任何东西。)

大量设备实际上是“USB 串口”,因为制造商懒得理解 USB。

3) 通过稍微重新编译或配置,您可以让那些通用小工具设备伪装成各种 USB ID 或返回各种供应商字符串等。这与“针对真实硬件进行测试”不同,但至少您正在使用这些设备的通用版本进行测试。

4) 对于内核中尚未存在的设备类型(即 WiFi 或其他),您只能靠自己了。有了足够的血汗和泪水,您就可以使用编写自己的小工具类型了。 (理想情况下,尽可能多地保留在用户空间,并且只处理内核中的性能关键部分..)

注意:不可能同时理解和欣赏 USB。

关于linux - 模拟物理 USB 设备 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624815/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com