c - 串行通信重置/etc/profile (linux)

标签 c linux serialization

我正在研究 PC(ubuntu)和嵌入式 Linux(2.6.24)板之间的串行通信。串行通信本身似乎可以工作(我使用 http://serialib.free.fr/html/index.html 中的 Serialib ),但每次我在板上的应用程序停止监听/etc/profile 文件时,板都会调用它(对于不使用连续剧)。

要知道,当我在板上启动应用程序时,我在 PC 上打开了一个 gtkterm 来跟踪板的终端(也使用串行端口),我认为这是罪魁祸首/etc/profile 的重置,但我不确定。

我的阅读应用程序代码

#include <stdio.h>
#include "serialib.h"
#include <QCoreApplication>
#include <QSettings>
#include <QProcess>
#include <iostream>

#if defined (_WIN32) || defined( _WIN64)
#define         DEVICE_PORT             "COM1"                               // COM1 for windows
#endif

#ifdef __linux__
#define         DEVICE_PORT             "/dev/ttyS0"                         // ttyS0 for linux
#endif

int main()
{
    serialib LS;                                                            // Object of the serialib class
int Ret,res;                                                                // Used for return values
char Buffer[128];

// Open serial port

Ret=LS.Open(DEVICE_PORT,115200);                                        // Open serial link at 115200 bauds
if (Ret!=1) {                                                           // If an error occured...
    printf ("Error while opening port. Permission problem ?\n");        // ... display a message ...
    return Ret;                                                         // ... quit the application
}
printf ("Serial port opened successfully !\n");

// Read a string from the serial device
Ret=LS.ReadString(Buffer,'\n',128,5000);                                // Read a maximum of 128 characters with a timeout of 5 seconds
                                                                        // The final character of the string must be a line feed ('\n')
if (Ret>0)                                                              // If a string has been read from, print the string
    printf ("String read from serial port : %s",Buffer);  
else
    printf ("TimeOut reached. No data received !\n");                   // If not, print a message.

// Close the connection with the device

LS.Close();

return 0;
}

我在超时限制内将“TEXT\n”发送到串行,并且“从串行端口读取的字符串:TEXT”出现在 gtkterm 的终端副本上,后跟“正在运行 etc/profile”。就像我之前说的,我怀疑我在发送字符串的同时使用带有 gtkterm 的串口,但我必须让它工作才能使用该板,我想听听您对这个问题的意见。

感谢您 future 的回答。

最佳答案

您已将系统配置为在同一串行端口上运行另一个程序(login 或其类似程序)。

检查/inittab。确保没有使用该端口启动 logingetty 实例。 (您仍然希望它在另一个串行端口上运行,即您用于终端 session 的串行端口)

关于c - 串行通信重置/etc/profile (linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29921588/

相关文章:

每 32 字节复制一个二进制文件 32 字节

linux - bash重定向到同一个文件的一致性

c# - 谁应该负责膨胀数据对象?

ruby-on-rails - 从关联中序列化不可变数据是个好主意吗?

c - 我如何 "decode"一个 UTF-8 字符?

c++ - 重新定义 malloc/free with static linking has multiple definition error

c - 为什么我不能使用常量 int 来声明数组并在 C 中初始化它?

linux - 如何使用 iptables 重定向 ip 地址

c++ - 将 libstdc++ 静态链接是一个好习惯吗?

java - 在java中序列化数组列表