在系统挂起期间使设备文件保持打开状态会导致问题

时间:2018-06-27 19:59:24

标签: c++ linux linux-kernel

我有一个C ++应用程序,该应用程序在基于Arch Linux的嵌入式Linux安装上运行。我遇到的问题是我有一个终端设备文件,可以打开以进行读写。它连接到外部串行设备。

在不挂起系统之前,与串行设备的连接非常有效。系统挂起时,我不会关闭设备文件。系统唤醒后,它会等待epoll事件从串行设备读取。它的确接收到了这些事件,但是数据包似乎是在挂起之前已经包含了旧数据,或者有时数据包中的最后一个字节似乎被“丢弃”了。请参阅下面的示例。您可能会认为我应该能够通过关闭/重新打开设备文件或通过在设备文件上运行tcflush()来从中恢复,但是这些东西似乎都没有帮助。设备文件似乎永久不同步,直到下一次冷启动为止。要暂停我要在/ sys / power / state中写入“ mem”的系统,请参见下面的配置。

序列示例

睡觉前收到的最后一件事: f1 01 01 41 40 02 01 03 01 f2

醒来时收到的第一件事: 00 01 03 01 f2 f1 01 01 41 40 02 01 03 01 f2

唤醒时实际上是通过RS232发送的: f1 01 01 f2 f1 01 01 41 40 02 01 03 01 f2

操作系统配置

/ sys / power / state:

mem

/ sys / power / mem_sleep:

[s2idle]

C ++代码示例

std::string m_DeviceName = ""/dev/ttymxc1""
m_FileDescriptor = open(m_DeviceName.c_str(), O_RDWR|O_NOCTTY|O_CLOEXEC);

0 个答案:

没有答案