Я пытаюсь открыть последовательный порт с помощью кода c, и я создал узел с помощью следующей команды;
mknod /tmp/ttyACM0 c 100 0;
chmod 700 /tmp/ttyACM0;
и затем запустите исполняемый файл, который открывает последовательный порт, следующим способом:
static int OpenSerialPort(const char *bsdPath)
{
int fileDescriptor = -1;
struct termios options;
fileDescriptor = open(bsdPath, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fileDescriptor == -1 || flock(fileDescriptor, LOCK_EX) == -1 )
{
printf("Error opening serial port %s - %s(%d).\n",
bsdPath, strerror(errno), errno);
goto error;
}
if (fcntl(fileDescriptor, F_SETFL, 0) == -1)
{
printf("Error clearing O_NONBLOCK %s - %s(%d).\n",
bsdPath, strerror(errno), errno);
goto error;
}
if (ioctl(fileDescriptor, TIOCEXCL, (char *) 0) < 0) {
printf("Error setting TIOCEXCL %s - %s(%d).\n",
bsdPath, strerror(errno), errno);
goto error;
}
memset(&options,0,sizeof(options));
options.c_iflag=0;
options.c_oflag=0;
options.c_cflag=CS8|CREAD|CLOCAL;
options.c_lflag=0;
options.c_cc[VMIN]=1;
options.c_cc[VTIME]=5;
cfsetospeed(&options, B115200);
cfsetispeed(&options, B115200);
if (tcsetattr(fileDescriptor, TCSANOW, &options) == -1)
{
printf("Error setting tty attributes %s - %s(%d).\n",
bsdPath, strerror(errno), errno);
goto error;
}
return fileDescriptor;
error:
if (fileDescriptor != -1)
{
close(fileDescriptor);
}
exit(1);
return -1;
}
и он возвращается;
Error opening serial port /tmp/ttyACM0 - No such device or address(6).
На самом деле в каталоге / tmp есть файл ttyACM0, но он возвращает мне сообщение об ошибке. Что я могу сделать, чтобы передать эту ошибку?
EDIT:
Когда я смотрю на файл / proc / devices, устройства ttyACM0 нет. Теперь я думаю, что причина моей проблемы может быть в этом.