这可能是一个很难且非常具体的问题。我必须将 2 个嵌入式硬件连接在一起,并从我的自定义 c++ 应用程序交换数据。一块板基于 STM32,并使用 cdc-acm 串行 over usb 和同时使用 usb hid 接口。另一个(主要单元)是基于 uClinux 2.6.17 的嵌入式设备。我看到并且可以在 PC Win10 下使用 STM32 板没有问题。
将基于 STM32 的板插入主机后,到目前为止我得到了什么:
dmesg:
usb 1-1.2:找到新的 USB 设备,idVendor=16c0,idProduct=27d9
usb 1-1.2:新的 USB 设备字符串:Mfr=1、Product=2、SerialNumber=3
usb 1-1.2:产品:USB按钮
usb 1-1.2:制造商:Sinftech ltd.
USB 1-1.2:序列号:1
USB 1-1.2:uevent
USB 1-1.2:usb_probe_device
usb 1-1.2:配置 #1 从 1 个选项中选择
USB 1-1.2:添加 1-1.2:1.0(配置 #1,接口 0)
USB 1-1.2:1.0:uevent
usb 1-1.2:添加 1-1.2:1.1(配置 #1,接口 1)
USB 1-1.2:1.1:uevent
usbhid 1-1.2:1.1:usb_probe_interface
usbhid 1-1.2:1.1:usb_probe_interface - 得到 id
generic-usb 0003:16C0:27D9.0003:输入、hiddev 和 hidraw 均未声明
USB 1-1.2:添加 1-1.2:1.2(配置 #1,接口 2)
USB 1-1.2:1.2: uevent
usb 1-1.2:添加 1-1.2:1.3(配置 #1,接口 3)
USB 1-1.2:1.3: uevent
驱动程序/usb/core/inode.c:创建文件'006'
集线器 1-1:1.0:状态 7 端口 2 chg 0000 evt 0004
$ cat /proc/bus/usb/devices
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 1
B: Alloc= 0/800 us ( 0%), #Int= 1, #Iso= 0
D: Ver= 2.00 Cls=09(hub) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P:供应商=1d6b ProdID=0002 Rev= 2.06
S:制造商=uClinux 2.6.29 ehci_hcd
S:产品=飞思卡尔片上 EHCI 主机控制器
S:序列号=fsl-ehci.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 2
D: Ver= 2.00 Cls=09(hub) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P:供应商=04cc ProdID=1520 Rev= 2.00
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms
T: Bus=01 Lev=02 Prnt=04 Port=01 Cnt=01 Dev#= 6 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P:供应商=16c0 ProdID=27d9 Rev= 1.00
S: 制造商=Sinftech ltd.
S:产品=USB按钮
S:序列号=1
C:* #Ifs= 4 Cfg#= 1 Atr=c0 MxPwr=100mA
A: FirstIf#= 2 IfCount= 2 Cls=02(comm.) Sub=02 Prot=00
I:* If#= 0 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
我:* 如果#= 1 Alt= 0 #EPs= 1 Cls=03(HID) Sub=00 Prot=00 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=125ms
I:* If#= 2 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=00 Driver=(none)
E: Ad=83(I) Atr=03(Int.) MxPS= 8 Ivl=128ms
I:* If#= 3 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none)
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms $
/proc/devices 没有新路径;
但看起来usbhid驱动程序已设置。
cdc-acm 也有问题。我确实运行 modprobe cdc-acm。然后: modprobe g_serial use_acm=1 ALL 执行正常。cat /rpoc/devices 现在为我提供了 166 ttyACM 的新路径正如主单元的硬件开发人员告诉我的那样,我的 /dev/ 是静态的,所以我现在必须创建自己的路径:mknod /tmp/myusb c 166 0 一切都很好,但是这不起作用: echo "123\r" > /tmp/myusb 错误 - /tmp/myusb 无法创建
dmesg 新信息:usbcore:已注册新接口驱动程序 cdc_acm cdc_acm:v0.26:USB 调制解调器和 ISDN 适配器的 USB 抽象控制模型驱动程序 ** 825 ** u_serial.c 调用 tty_register_driver g_serial 小工具:Gadget Serial v2.4 g_serial 小工具:g_serial准备好 fsl-usb2-udc:绑定到驱动程序 g_serial $
我尝试类似: echo "123\r" > /dev/ACM0 或 ACM1,2,3 或 ttyUSB0 并且总是有错误 - 无法创建。
===============
我的第一个问题是 - 我如何从我的 c++ 代码访问设备的 usbhid ?
我的第二个问题是 - 如果有任何想法可能会在尝试获取串行路径时遗漏
连接到驱动程序。
抱歉格式化 - 到目前为止,我一直在为粗体和从 linux 控制台复制的文本而苦苦挣扎。