LINUX.ORG.RU

Особенности работы с ttyS*-attached device.


0

0

Добрый день.

Есть некая железка. Работает через serial. и некая прога от производителя, но в исходниках. Собирается, но при попытке запуска не работает: error opening device: Resource temporarily unavailable

Согласно strace, она открывает /dev/ttyS0 (успешно), после чего....

open("/dev/ttyS0", O_RDWR|O_NONBLOCK) = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_START or TCSETS, {B9600 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B9600 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B9600 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B9600 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_START or TCSETS, {B9600 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B9600 -opost -isig -icanon -echo ...}) = 0
read(3, 0xbffff8b7, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 1 (in [3], left {0, 198000})
read(3, "\0", 1) = 1
read(3, 0xbffff877, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\7", 1) = 1
read(3, 0xbffff877, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff857, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\0", 1) = 1
read(3, 0xbffff857, 1) = -1 EAGAIN (Resource temporarily unavailable)

С железкой точно все нормально. Под 98 вендой ее вроде завели, но нас 98 не устраивает... Железка -- широкополосный радиосканер WR-1550e

Этот фрагмент меня особенно смущает:
select(4, [3], NULL, NULL, {0, 200000}) = 1 (in [3], left {0, 198000})
read(3, "\0", 1) = 1
read(3, 0xbffff877, 1) = -1 EAGAIN (Resource temporarily unavailable)

Селект говорит, что там есть что читать. И в /dev/null читается. А в буфер -- нет.

Где может быть собака зарыта?

★★☆☆

Re: Особенности работы с ttyS*-attached device.

Чё тебя смущает??

Всё нормально работает

>Этот фрагмент меня особенно смущает:

>select(4, [3], NULL, NULL, {0, 200000}) = 1 (in [3], left {0, 198000})

>read(3, "\0", 1) = 1

>read(3, 0xbffff877, 1) = -1 EAGAIN (Resource temporarily unavailable)

select вывалился по первому принятому байту который был прочитан первым read второму read ничего не осталось следственно он вернул EAGAIN.

усли прога сама не настраивает порт то можешь настроить его вручную при помощи setserial а именно необходимо установить время ожидания прихода байта.

cvv ★★★★★
()
Ответ на: Re: Особенности работы с ttyS*-attached device. от cvv

Re: Особенности работы с ttyS*-attached device.

Устройство же пытается настроить порт, причем засем-то делает это два раза - сначала под 38400 бод, потом под 9600 (автонастройка какая-то происходит?). Похоже, что действительно компьютеру с девайсом договориться не удалось.

geekkoo
()
Ответ на: Re: Особенности работы с ttyS*-attached device. от geekkoo

Re: Особенности работы с ttyS*-attached device.

>Устройство же пытается настроить порт, причем засем-то делает это два раза - сначала под 38400 бод, потом под 9600 (автонастройка какая-то происходит?). >Похоже, что действительно компьютеру с девайсом договориться не удалось.

хм действительно.

cvv ★★★★★
()

Re: Особенности работы с ttyS*-attached device.

Что интересно, на машине с 2.4.27 все выглядит несколько иначе... Ни одного успешного read'а нет вообще:

open("/dev/ttyS0", O_RDWR|O_NONBLOCK) = 3
ioctl(3, SNDCTL_TMR_TIMEBASE, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_START, {B9600 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE, {B9600 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE, {B9600 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_START, {B9600 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE, {B9600 -opost -isig -icanon -echo ...}) = 0
read(3, 0xbffff9fb, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff9bb, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\7", 1) = 1
read(3, 0xbffff9bb, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff99b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\0", 1) = 1
read(3, 0xbffff99b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\0", 1) = 1
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff99b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\0", 1) = 1
read(3, 0xbffff99b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\0", 1) = 1
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff99b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\256", 1) = 1
read(3, 0xbffff99b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\3", 1) = 1
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
ioctl(3, SNDCTL_TMR_TIMEBASE, {B9600 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_START, {B38400 -opost -isig -icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE, {B38400 -opost -isig -icanon -echo ...}) = 0
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\r", 1) = 1
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
nanosleep({0, 200000000}, NULL) = 0
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\0", 1) = 1
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff99b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\0", 1) = 1
read(3, 0xbffff99b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\0", 1) = 1
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff99b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\0", 1) = 1
read(3, 0xbffff99b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
write(3, "\r", 1) = 1
read(3, 0xbffff98b, 1) = -1 EAGAIN (Resource temporarily unavailable)
select(4, [3], NULL, NULL, {0, 200000}) = 0 (Timeout)
close(3) = 0
dup(2) = 3
fcntl64(3, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat64(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000
_llseek(3, 0, 0xbffff854, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(3, "error opening device: Resource t"..., 55) = 55
close(3) = 0
munmap(0x40014000, 4096) = 0
_exit(1) = ?

Zulu ★★☆☆
() автор топика
Ответ на: Re: Особенности работы с ttyS*-attached device. от Zulu

Re: Особенности работы с ttyS*-attached device.

попытайся сравнить настройки com-порта c виндой при помощи setserial.

ещё при переключениях меж виндузой и линуксом никаких комутаций не производится типа смены/перебрасывания кабелей???

cvv ★★★★★
()
Ответ на: Re: Особенности работы с ttyS*-attached device. от cvv

Re: Особенности работы с ttyS*-attached device.

Винды на этой машине нет... Проверялось на другой машине, где винда есть. Но там не Линукса.... Попробую туда, что ли, поставить и проверить.

root@lab:~# setserial /dev/ttyS1
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3

root@lab:~# stty < /dev/ttyS1
speed 9600 baud; line = 0;
kill = ^X; min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

Zulu ★★☆☆
() автор топика
Ответ на: Re: Особенности работы с ttyS*-attached device. от Zulu

Re: Особенности работы с ttyS*-attached device.

>Проверялось на другой машине, где винда есть.

возможно отсюдова и копать надо

>root@lab:~# setserial /dev/ttyS1 >/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3

Здеся _надо_ юзать всякие verbose detailed & etc.

>root@lab:~# stty < /dev/ttyS1 >speed 9600 baud; line = 0; >kill = ^X; min = 1; time = 0; >-brkint -icrnl -imaxbel >-opost -onlcr >-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

Сильно похоже что здеся чегото не хватает

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