This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/J6EVM5777:在某些情况下、读取'/dev/ttyGS0和#39;(USB 通用串行)不起作用。

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/618117/linux-j6evm5777-reading-from-dev-ttygs0-usb-generic-serial-is-not-working-in-certain-cases

器件型号:J6EVM5777

工具/软件:Linux

您好!

[背景]

我正在尝试在 TI J6 (Android OS - 6.A.1.3)上实施 CarPlay。

我能够在 USB 2.0端口上配置 USB 小工具并触发 USB 角色开关、然后将 USB 端口更改为"设备"模式。

然后、iPhone (作为 USB 主机)执行 USB 枚举(TI J6的)、然后通过批量输入/输出接口开始通信。

我目前正在使用通用串行接口进行批量输入/输出、用于 IAP 通信。


[问题]

在通过 USB 通用串行接口(/dev/ttyGS0)交换数据包之前、情况一直良好。

我能够写入数据、但从通用串行接口(/dev/ttyGS0)中没有任何内容可读。

Beagle USB 480协议分析器确实显示数据在批量输入/输出上双向发送

但是'READ()'块或调用'ioctl (FD、FIONREAD,&n);'总是返回0。

我目前 正在使用两个文件描述符。 一个用于读取、一个用于写入:

>#define IAP2_END_PATH "/dev/ttyGS0

>m_fd_iap2_read = open (IAP2_endpoint_path、O_RDONLY | O_NOCTTY);

>m_fd_iap2_write = open (IAP2_endpoint_path、O_WRONLY | O_NOCTTY);

我还使用 Linux 主机在 TI J6设置为"设备"模式的情况下进行了测试。

在本例中、我在 TI J6上使用/dev/ttyGS0读取或写入数据时没有遇到任何问题。

我目前没有办法让您重现此问题、但您能否就可能出现的问题提供一些建议?

谢谢、

Alan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Alan:

    我已将您的问题转发给 USB 专家。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Alan:

    我只是想知道当您只使用 O_RDWR 打开一次时会发生什么情况?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     

    即使我使用使用使用 O_RDWR 打开的相同文件描述符、也是相同的。

    是否有关于确定或调试此问题原因的提示?

    谢谢、

    Alan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这里还有 TI J6启动后的'mesg'日志、如果它能提供任何线索的话。

    SELinux 模式是允许的、因此所有"AVC:Denied (AVC:拒绝)"日志仅供参考。

    我还执行'chmod 777 /dev/tGS0 '、并对我需要访问的所有目录或文件执行相同的操作。

    [141.130001] Android_work:未发送 uevent (0 0 (null))
    [141.135766] dwc3 48890000.usb: OTG:未注册小工具
    [141.141629] configfs-gadget 小工具:解除绑定函数'mtp'/ecdeec00
    [141.147950] configfs-gadget 小工具:解除绑定函数'function fs gadget'/ecd25da4
    [141.155611] init:服务'adbd'正在被终止...
    [141.164011] init:服务'adbd'(pid 210)被信号9杀死
    [141.169886] init:服务'adbd'(pid 210)会杀死进程组中的任何子项
    [141.346395]使用随机自以太网地址
    [141.350951]使用随机主机以太网地址
    [142.056897] usb0:主机 MAC 9a:73:64:A7:1e:bc
    [142.061716] usb0:Mac 3a:6a:E4:C4:53:a0
    [142.065844] dwc3 488d0000.usb: OTG:注册了小工具
    [142.071646] xhci-hcd xhci-hcd.2.auto: xHCI 主机控制器
    [142.077295] xhci-hcd xhci-hcd.2.auto:新 USB 总线已注册、分配的总线编号1
    [142.085893] xhci-hcd xhci-hcd.2.auto: HCC params 0x0220f04c HCI version 0x100 quirks 0x00210010
    [142.095940] xhci-hcd xhci-hcd.2.auto: IRQ 511、IO 内存0x488d0000
    [142.102172] USB USB1:找到新的 USB 器件、idVendor=1d6b、idProduct=0002
    [142.109022] USB USB1:新 USB 器件字符串:MFR=3、Product=2、SerialNumber=1
    [142.116294] USB USB1:产品:XHCI 主机控制器
    [142.121195] USB USB1:制造商:Linux 4.4.45-g12e865c xhci-hcd
    [142.127450] USB USB1:序列号:xhci-hcd.2.auto
    [142.133100]集线器1-0:1.0:找到 USB 集线器
    [142.136943]集线器1-0:1.0:检测到1个端口
    [142.141308] xhci-hcd xhci-hcd.2.auto: xHCI 主机控制器
    [142.146860] xhci-hcd xhci-hcd.2.auto:注册新 USB 总线、分配总线编号2
    [142.154663] USB USB2:我们不知道该主机的 LPM 算法、因此禁用了 LPM。
    [142.162933] USB USB2:找到新的 USB 设备、idVendor=1d6b、idProduct=0003
    [142.169779] USB USB2:新 USB 器件字符串:MFR=3、Product=2、SerialNumber=1
    [142.177076] USB USB2:产品:XHCI 主机控制器
    [142.181976] USB USB2:制造商:Linux 4.4.4.45-g12e865c xhci-hcd
    [142.188211] USB USB2:序列号:xhci-hcd.2.auto
    [142.193817]集线器2-0:1.0:找到 USB 集线器
    [142.197642]集线器2-0:1.0:检测到1个端口
    [142.4512] USB 1-1:使用 xhci-hcd 的新型高速 USB 器件编号2
    [142.595820] USB 1-1:找到新的 USB 器件、idVendor=05ac、idProduct=12a8
    [142.602552] USB 1-1:新 USB 器件字符串:MFR=1、Product=2、SerialNumber=3
    [142.609763] USB 1-1:产品:iPhone
    [142.613356] USB 1-1:制造商:Apple Inc.
    [142.617766] USB 1-1:SerialNumber:db4dae8ebd3fb4ea335a90332aad83d5812e4df3
    [142.625218] USB 1-1:EP 0x2 -舍入间隔为8微帧、EP desc 表示10微帧
    [142.633840] USB 1-1:EP 0x81 -舍入间隔为8微帧、EP desc 表示10微帧
    [143.067017] USB 1-1:usbfs:USBDEVFS_CONTROL 失败 cmd dROID.gallery3d rqt 128 rq 6 len 254 ret -71
    [151.225109] i2c i2c-2:new_device:instantiated device authchip at 0x10
    [158.930800]初始化:正在启动服务'adbd'。
    [158.938604]读取描述符
    [158.941508]读取字符串
    [166.195482] OMAP-IMU 55082000.MMU:55082000.MMU:2.1版
    [180.273358] OMAP-IMU 55082000.MMU:55082000.MMU:版本2.1
    [198.633343] OMAP-iommu 55082000.MMU:55082000.MMU:版本2.1
    [223.824684] type=1400 audit (1502911243.593:3):AVC:针对 pid=1418 comm=".sample.carplay" name="i2c-2" dev="tmpfs" ino-=6494 scontext=u:r:untrusted_app:s0:c512、c768 tcontext=u:object_examplenable_1:tchr
    [223.850231] type=1400 audit (1502911243.603:4):AVC:针对 pid=1418 comm=".sample.carplay" path="/dev/i2c-2 " dev="tmpfs" ino-6494 scontext=u:r:2c_app:s0:c512、c768 tcontext=u:object_r:ipensor_file=tchr:tchr =不受信任的 tchr 类0
    [223.874575] type=1400 audit (1502911243.603:5):AVC:针对 pid=1418 comm=".sample.carplay" path="/dev/i2c-2 " dev="tmpfs" ino=6494 ioctlcmd=703 scontext=u:r:per可能 的_app:s0:c512、c768=tchr =不受信任的 stype=1:tchr:tcr
    [223.983231] type=1400 audit (1502911243.753:6):AVC:针对 pid=1418 comm=".sample.carplay" name="/" dev="tmpfs" ino-9619 scontext=u:r:dir_app:s0:c512、c768 tcontext=u:object_r:pertenable= 0:tenorable1类
    [224.006279] xhci-hcd xhci-hcd.2.auto:删除、状态4
    [224.012604] type=1400 audit (1502911243.753:7):AVC:针对 pid=1418 comm=".sample.carplay" name="usb" dev="tmpfs" ino_14250 scontext=u:r:untrusted_app:s0:c512、c768 tcontext=u:object_r:usb_perment-tdir=1
    [224.013987] USB USB2:USB 断开连接、器件编号1
    [224.015400] xhci-hcd xhci-hcd.2.auto:已注销 USB 总线2
    [224.015419] xhci-hcd xhci-hcd.2.auto:删除、状态1
    [224.015436] USB USB1:USB 断开连接、器件编号1
    [224.015440] USB 1-1:USB 断开连接、器件编号2
    [224.054996] xhci-hcd xhci-hcd.2.auto:已注销 USB 总线1
    [224.071357] type=1400 audit (1502911243.753:8):AVC:针对 pid=1418 comm=".sample.carplay" path="/dev/bus/usb " dev="tmpfs" ino_14250 scontext=u:r:dir_app:s0:c512、c768 tcontext=u:object_r:tperoritable=1:tagenable_device
    [224.097101] type=1400 audit (1502911243.753:9):AVC:针对 pid=1418 comm=".sample.carplay" path="/dev/bus/usb/002/001 " dev="tmpfs" ino_14254 scontext=u:r:untrusted_app:s0:c512、c768 tcontext=u:object_r:usb_device=perorivenable_type=1
    [224.122156] type=1400 audit (1502911243.783:10):AVC:针对 pid=1418 comm=".sample.carplay" name="mode" dev="debugfs" ino-7260 scontext=u:r:debug_app:s0:c512、c768 tcontext=u:object_r:debugfs=u:pertenable_r:1:tfs=gperfs.html 类
    [224.351699] Android_work:已发送 uevent USB_State=已连接
    [224.365201] configfs-gadget 小工具:高速配置#1:b.
    [224.371554] Android_work:已发送 uevent USB_State=已配置
    [224.411298] MTP_OPEN
    [225.017746] type=1400 audit (1502911244.793:11):AVC:针对 pid=1418 comm="NmeIAPDetector 拒绝{读写}:" name="ttyGS0" dev="tmpfs" ino=14236 scontext=u:r:per可能 的_app:s0:c512、c512、cn=tmpfs" object=14236 scontext=u:r:pertagus_r:tchr:1:tagus=trusted_device_context=tchr
    [225.040957] type=1400 audit (1502911244.793:12):AVC:针对 pid=1418 comm="NmeIAPDetector 拒绝{open}:" path="/dev/ttyGS0 " dev="tmpfs" ino=14236 scontext=u:r:untrusted_app:s0:c512、c768 tcontext=u:tamperature_device:1:tchr 类
    [225.065883] type=1400 audit (1502911244.793:13):AVC:针对 pid=1418 comm="NmeIAPDetector 拒绝{getattr}:" path="/dev/ttyGS0 " dev="tmpfs" ino=14236 scontext=u:r:untrusted_app:s0:c512、ctcontext=u:tchr = u:1:peror_object:1:tchr
    [240.248480] OMAP-IMU 55082000.MMU:55082000.MMU:2.1版
    root@jacinto6evm:/#[300.249772] OMAP-iommu 55082000.MMU:55082000.MMU:2.1版
    [317.597208] OMAP-IMU 55082000.MMU:55082000.MMU:2.1版

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另一个观察结果。

    我启用了 USB_gadget_debug 和 USB_gadget_verbose 以获取更多调试日志(通过 dmesg)。

    下面是我看到的内容的一部分。 仅 TX、无 RX。

    [855.345807] GS_open:start ttyGS0
    [855.34587] GS_open:ttyGS0 (e86ddc00、e87a0180)
    [855.34622] GS_write_room:(0、e86ddc00) room =8191
    [ GS5.346233] GS_write:tty02
    0x856、edd00 (0x85dd00)
    [855.346275] gs_flush_chars:(0、e86ddc00)
    [855.349506] gs_write_room:(0、e86ddc00) room = 8191
    [855.349526] gs_pet_char:(0、e86ddc00) char = 0xff、调用 tty_put
    、gs_char
    
    (从 tty_gtty = 855.3450、e80_char char)[855.855.8560](从 tty_put、e80_char char char char char = 0x8565_p_char、g_char char = 0x855.855.45_g_g_g_g_g_g_g_put:[_g_g_char)[855.855.855.855.8560](从 tchar char char char、e80_g_g_g_g_g_g_
    (0、e86ddc00) char = 0x5e、从 tty_put char
    [ 855.349580] gs_put char:(0、e86ddc00) char = 0x40、从 tty_put _char
    [ 855.34990] gs_put _char:(0、e86ddc00、e80586_char)
    char = 0x855.85_8600]
    
    
    、从 tty_gs = 0x855.86_gs、tty_gs = 0x8580_gs、e80_gs [0x8580_gs、e80_9600_gs = 0x8580_gs、e80_char [0x8580_gs、e80_gs、e80_zh_char = 0x8580_gs、e80_gs = 0x8580_9600] char [0x8580_gs、e80_gs、e80_char [0x8580_gs =
    [856.346513] GS_WRITE_Room:(0、e86ddc00) Room = 8191
    [856.346524] GS_WRITE:ttyGS0 (e86ddc00)正在写入6个字节
    [856.346535] ttyGS0:TX len=6、0xff 0x55 0x02……
    [856.346562] GS_FLUSH_CHAR:(0、e86ddc00)
    [856.347660] GS_WRITE_Room:(0、e86ddc00) Room = 8191
    [856.347675] GS_Put char:(0、e86ddc00) char = 0xff、从 tty_put tty 调用[856.34760]
    
    
    
    、g_put char [0x856.87_char、e= 856.45](从 tty_p_g_g_char char)[856.876_p_char char = 0x856.486_p_g_g_g_g_g_char、[0](从 tty_g_p_g_g_g_g_p_g_g_char char char char = 856.456_char、[856.456_char、[0](从 t_p_p (0、e86ddc00) char = 0x5e、从 tty_put char
    [ 856.347727] gs_put char:(0、e86ddc00) char = 0x40、从 tty_put char
    [ 856.755 34773] gs_put char:(0、e8686ddc00、etty
    = 0x8560_gs、e806_gs) char [86_gs
    
    = 0x856.756_gs、从 tty_p_gs [_gs、e806_gs = 8560_char、e86_gs = 0x8560_gs、e86_char、e80_gs [+86_char、e80](从 tty_gs = 0x856.8560_gs、e86_gs = 8560_gs、e80_char)[+
    

    有一点奇怪的是、我每秒只写入6个字节的相同数据(iAP2初始化数据包)。

    不确定其他数据的9个字节(FF 55 5e 42 5e 40 ee 5e 50)来自何处且正在写入。

    它也由 USB 协议分析器接收。

    但仍然不读取。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现了9个字节的问题。
    我必须运行以下命令来关闭回波。
    > stty -echo </dev/ttyGS0

    但仍无法读取...

    [61815588] GS_open:start ttyGS0
    [6182.415658] GS_open:ttyGS0 (e6e1bc00、e6eec840)
    [6182.416027] GS_write_room:(0、e6e1bc00) room = 8191
    [6182.416037][6eGS0x2416027] gs_写入0x6b00:
    0x602b00
    [6182.416081] GS_FLUSH_CHARs:(0、e6e1bc00)
    [6182.419442] GS_FLUS_CHARs:(0、e6e1bc00)
    [6183.416301] GS_WRITE_Room:(0、e6e1bc00) Room = 8191 [6183.323bc00)[6x 写入0x416301] GS_0...6
    字节0x4160_0_2bdx 0_0_GS1802]
    
    [6183.416351] GS_FLUSH_CHARs:(0、e6e1bc00)
    [6183.417480] GS_FLUSE_CHARs:(0、e6e1bc00) 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Alan

    默认 stty 终端设置是什么?

    您能试试 wtih

    # stty -F /dev/ttyGS0 -icanon

    此致

    Ravi  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的

    感谢您的建议。

    这起作用了。 )

    现在、我们可以使用命令'TTY -F /dev/ttyGS0 -icanon -echo'从/dev/ttyGS0读取

    此致、

    Alan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alan

    很高兴看到您现在正在工作。
    因此该线程可以闭合。

    此致
    Ravi