LINUX.ORG.RU

не видит com порт


0

0

У меня проблема при работе с com портом. Делов в том что, на моей маме 2 com порта с одним линукс работает прекрасно и обменивается данными с модемом (модем внешний), с другим нет. Хотя в винде с тем и тем портом все нормально работает. Я перебрал все потрты которые у меня есть в линукс начиная с ttyS1 (как я уже сказал с ttyS0 работае хорошо) и кончая ttyS4 и нефига не ввидит второй com порт как будто линукс и хоть ты тресни. В чем может быть проблема? (просто в линукс я полный ноль).

вот текст тестовой программы: ============================================================ #include <termios.h> #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/signal.h> #include <sys/types.h>

#define BAUDRATE B38400 #define MODEMDEVICE "/dev/ttyS1" #define FALSE 0 #define TRUE 1

void signal_handler_IO (int status); //definition of signal handler int wait_flag=TRUE; //TRUE while no signal received char devicename[80] = MODEMDEVICE;

long BAUD = BAUDRATE; // derived baud rate from command line long DATABITS = CS8; long STOPBITS = 0; long PARITYON = PARENB; long PARITY = 0;

main(int Parm_Count, char *Parms[]) { int fd, res; struct termios newtio; //place for old and new port settings for serial port struct sigaction saio; //definition of signal action unsigned char buf[255]; //buffer for where data is put

//open the device(com port) to be non-blocking (read will return immediately) fd = open(devicename, O_RDWR | O_NOCTTY | O_NONBLOCK); if (fd < 0) { perror(devicename); _exit(-1); }

//install the serial handler before making the device asynchronous saio.sa_handler = signal_handler_IO; sigemptyset(&saio.sa_mask); //saio.sa_mask = 0; saio.sa_flags = 0; saio.sa_restorer = NULL; sigaction(SIGIO,&saio,NULL);

// allow the process to receive SIGIO fcntl(fd, F_SETOWN, getpid()); // Make the file descriptor asynchronous (the manual page says only // O_APPEND and O_NONBLOCK, will work with F_SETFL...) fcntl(fd, F_SETFL, FASYNC);

// set new port settings for canonical input processing newtio.c_cflag = BAUD /*| CRTSCTS*/ | DATABITS | STOPBITS | PARITYON | PARITY | CLOCAL | CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; newtio.c_lflag = 0; //ICANON; newtio.c_cc[VMIN]=1; newtio.c_cc[VTIME]=0; tcsetattr(fd,TCSANOW,&newtio);

// loop while waiting for input. normally we would do something useful here while (1) { unsigned char a[] = {0x00, 0x00, 0x00, 0x00, 0xe6};

write(fd,&a[0],5); //write 1 byte to the port printf("byte is write! '%02x%02x%02x%02x%02x'\n", a[0],a[1],a[2],a[3],a[4]); // after receiving SIGIO, wait_flag = FALSE, input is available and can be read if (wait_flag==FALSE) //if input is available { res = read(fd,buf,2); printf("%i bytes read! \n", res); wait_flag = TRUE; /* wait for new input */ } //end if wait flag == FALSE

usleep(2000000);

} //while stop==FALSE // restore old port settings close(fd); //close the com port //end if command line entrys were correct } //end of main

/*************************************************************************** * signal handler. sets wait_flag to FALSE, to indicate above loop that * * characters have been received. * ***************************************************************************/

void signal_handler_IO (int status) { //printf("received SIGIO signal.\n"); wait_flag = FALSE; } ============================================================ Спасибо

anonymous

В биос заглядывал? может там порт/прерывание совсем нестандартные стоят?

Можешь в венде посмотреть, какие ресурсы (порт/прерывание) используются и в линуксе выполнить примерно такую командочку:

setserial /dev/ttyS1 port 0x1a8 irq 5 autoconfig

Соответственно подставив нужные параметры.

ansky ★★★★★
()

> Я перебрал все потрты которые у меня есть в линукс начиная с ttyS1

Радикально, но желательно узнать что думает на эту тему

dmesg | grep ttyS

iBliss
()
Ответ на: комментарий от iBliss

Я все сравнил как с виндой так и с линуксом вот что пишет:
ttyS00 at 0x03f8 (irq = 4) is a 16550A
ttyS01 at 0x02f8 (irq = 3) is a 16550A

в винде адреса и прерывания те же самые, но увы по прежнему все не пашет :(

anonymous
()

А, собственно, каким именно образом не пашет? Ошибка при открытии или при попытке чтения/записи, и какая именно? От рута запускать пробовал?

anonymous
()

гляньте stty настройки вашего рабочего порта, и попробуйте тем-же stty выставить аналогичные для неработающего.

ovax ★★★
()
Ответ на: комментарий от anonymous

Ошибок при открытии порта никаких нет, в том числе все правильно возвращают функции (один в один как и с рабочим портом):

fcntl
write
tcsetattr
open

под рутом тоже самое
а как проверить настройки порта?
setserial я уже делал не помогает

anonymous
()
Ответ на: комментарий от ovax

вот что у меня получилось, оказывается мой второй ком порт работает под линуксом, но работает только на прием а на передачу ни-ни.
Хотя под виндой передача есть. Почему так? Может где выставлен запрет??? 

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.