Linux kernel 通过USB与Android设备通信

Linux kernel 通过USB与Android设备通信,linux-kernel,usb,embedded-linux,Linux Kernel,Usb,Embedded Linux,我正在基于Am3352的主板上开发一个应用程序,需要通过USB与android设备(平板电脑/手机)通信。我需要通过USB交换一些自定义数据字节(只有我的应用程序和在android设备上运行的应用程序才能理解) 当我将android平板电脑连接到我的AM3352板时,我在控制台上得到带有VID PID等的打印,这表明设备被检测到。我需要知道的是,如何让内核为设备分配一个dev文件。例如,当我们将usb连接到串行转换器时,我们将获得/dev/ttyUSBx文件,这样我们就可以打开它并写入/读取该文

我正在基于Am3352的主板上开发一个应用程序,需要通过USB与android设备(平板电脑/手机)通信。我需要通过USB交换一些自定义数据字节(只有我的应用程序和在android设备上运行的应用程序才能理解)

当我将android平板电脑连接到我的AM3352板时,我在控制台上得到带有VID PID等的打印,这表明设备被检测到。我需要知道的是,如何让内核为设备分配一个dev文件。例如,当我们将usb连接到串行转换器时,我们将获得/dev/ttyUSBx文件,这样我们就可以打开它并写入/读取该文件。同样,是否可以直接连接usb

我希望生成一个/dev/ttyACMx设备文件,以便可以对其进行写入和读取。在内核中启用了CDC/调制解调器支持。(我不确定这是否有帮助,但还是尝试了一下)


请告诉我如何获取与设备相关联的设备文件名,以便我可以对其进行读写。

首先,您必须知道android设备的USB类型。如何在linux机箱上识别此设备?作为大容量存储或CDC或其他什么?然后你可以试着和它交流。而且您不必在/dev/中创建任何设备就可以通过USB与android通信。看看libusb库


在您的示例中,创建了-/dev/ttyUSBx,因为内核知道这是通信设备类。所以你还需要知道这个安卓设备是什么样的USB设备

我的理解是android设备可以在不同的模式下运行,对吗?连接usb后,平板电脑中会显示一个弹出窗口,询问要在哪种模式下工作。当我选择Camera(PTP)时,我能够将设备检测为LIB_CLASS_PTP(0x06),当我选择内置CDROM选项时,它被检测为LIB_CLASS_MASS_STORAGE(0x08)。我需要知道是否有任何机制使其作为通信类设备(0x02)或数据类设备(0x0A)工作。如果是这样的话,我认为当设备连接时,会自动生成一个/dev/ttyUSBx或/dev/ttyACMx文件,该文件可用于fopen、读取和写入通信功能。这是可能的吗?如果我理解正确-你想通过自己的协议通过USB进行通信。首先,你需要让平板电脑起到通讯设备的作用,它可以在Android内核中完成。要做到这一点,你需要看看Android内核的小工具驱动程序,如果有任何(可能是G_串行)可以用作此类设备的话。然后你需要为Android编写程序来维护这样的设备。谢谢。我现在正在寻找解决办法。android设备将作为主机,我的设备作为从机。我正在查看可用的usb从机示例代码。如果你知道任何事情,请告诉我。哎呀,好像我误解了你。我原以为Android将是usb设备,但你希望它能作为usb主机。嗯,你的设备应该表现为usb通信设备。如果你在上面运行Linux,你可以在上面使用g_串行小工具驱动程序。在这种情况下,当您将其插入android后,您可以在android上使用libusb或仅使用/dev/ttyUSBx与usb设备通信。您还有另一种可能性-您可以为您的usb设备编写自己的驱动程序(usb无类或专用),所有通信协议由您决定。祝你好运