我有一个Linux应用程序,我想自动执行某些测试,其状态应根据某些设备的状态而改变,即USB设备,WLAN设备,WAN设备。但是,我们不再拥有物理USB,WLAN,WAN等设备,因此我需要找到一种方法来测试该程序,而无需实际插入物理设备,打开/关闭等等。
我开始只是创建一个我可以从用户空间控制的虚拟USB设备,但是我的基本缺乏知识阻止我在这些论坛上采用任何类似的主题并将它们应用到我的项目。我觉得我需要创建某种虚拟USB驱动程序,然后让它与某些用户级程序而不是usbfs进行通信。但是,即使我创建了这个虚拟驱动程序,如何从用户空间“插入”此设备并使用此特定驱动程序注册我的程序?我正在努力做甚么可能吗?
答案 0 :(得分:9)
最好的方法是使用Linux小工具驱动程序和硬件,使您成为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
”。远端会认为你插上了USB记忆棒。
对于串行设备,您的小工具可以在/ dev / USBx上运行“拿起电话”的用户空间代码并与您正在测试的设备通话。(可能是模拟4G调制解调器或其他任何设备。)
很多设备真的是“USB串口”,因为制造商懒得理解USB。
3)通过一些重新编译或配置,您可以让这些通用小工具设备伪装成各种USB ID或返回各种供应商字符串等。这与“针对真实硬件进行测试”不同,但至少你正在测试这些设备的通用版本。
4)对于尚未在内核中的设备类型(即WiFi或其他设备),您可以自己动手。有了足够的血汗和泪水,您可以使用自己编写的小工具类型。 (理想情况下,尽可能多地保留用户空间,并且只处理内核中的性能关键部分。)
注意:不可能同时理解和欣赏USB。
答案 1 :(得分:0)
您可以使用VMWare在虚拟环境中测试您的应用程序吗?然后,您可以将主机上的任何虚拟设备“插入”到来宾VM,并以这种方式测试您的应用程序。