串行通信重置 /etc/profile (linux)
serial communication reset /etc/profile (linux)
我正在研究 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" 发送到串口,并且 "String read from serial port : TEXT" 出现在 gtkterm 的终端副本上,然后是 "running etc/profile"。就像我之前说的,我怀疑我在发送字符串的同时使用带有 gtkterm 的序列号,但我必须让它工作才能使用该板,我想听听您对这个问题的看法。
感谢您以后的回答。
您已将系统配置为 运行 同一串口上的另一个程序(login
或其亲属)。
勾选/inittab
。确保没有使用该端口启动 login
或 getty
的实例。 (您仍然需要 运行在另一个串口上使用它,即您用于终端会话的串口)
我正在研究 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" 发送到串口,并且 "String read from serial port : TEXT" 出现在 gtkterm 的终端副本上,然后是 "running etc/profile"。就像我之前说的,我怀疑我在发送字符串的同时使用带有 gtkterm 的序列号,但我必须让它工作才能使用该板,我想听听您对这个问题的看法。
感谢您以后的回答。
您已将系统配置为 运行 同一串口上的另一个程序(login
或其亲属)。
勾选/inittab
。确保没有使用该端口启动 login
或 getty
的实例。 (您仍然需要 运行在另一个串口上使用它,即您用于终端会话的串口)