LINUX.ORG.RU

busybox: can't access tty; job control turned off

 , ,


0

1

Eсть плата с ARM, linux и initrd c busybox-1.21.0, на ней 2 последовательных интерфейса:

  • ttyS2 через него осуществляется вся работа;
  • ttyS3 сделан на ПЛИС с собственным драйвером.

Задача сделать упраляющий терминал на ttyS3, для этого запускаю:

# agetty 115200 ttyS3

На ttyS3 появляется приглашение ввода логина, логинюсь, появление приглашение sh, дальше терминал не работает. Но, если послать ^C на ttyS2, терминал ttyS3 начинает работать. Однако ^C, ^Z и др. работают через ttyS2.

Если убрать из inittab строку
S2:2345:respawn:/sbin/getty 115200 ttyS2
и запусть agetty, будет тот же результат, но перед приглашение sh на ttyS3 будет сообщение:

-sh: can't access tty; job control turned off

Как включить job control? Или все из-за кривого драйвера?

busybox FAQ читал, не заработало.


Ответ на: комментарий от GSA

Хм. Тогда непонятно, почему ttyS2 влияет на ttyS3. У них же разные драйверы?

alt-x ★★★★★
()
Ответ на: комментарий от arsi

Есть мысли, что будет достаточно через stty выставить параметры порта (управлющие последовательности, флаги и пр.), но stty не работает из-за кривого драйвера. В понедельник буду пробовать.

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

болезнь «can't access tty; job control turned off» с драйверами никак не связана. stdin (в данном случае последовательный порт) sh не является для него управляющим терминалом (controlling tty). я хз, как объяснить getty, что он должен предоставить sh управляющий терминал, но знаю как это объяснить базибоксовскому init: необходимо в inittab перед командой поставить минус, тогда он выполнит её с управляющим терминалом /dev/то_что_перед_первым_двоеточием. т.е. с «ttyS3::respawn:-/bin/sh -i» он запустит /bin/sh с управляющим терминалом /dev/ttyS3.

arsi ★★★★★
()
Ответ на: комментарий от arsi
ttyS3::respawn:-/bin/sh -i
  • Идентиификатор должен быть 1-4 символа
  • Can't execute -/bin/sh

Исправил - не помогло.

GSA
() автор топика
Ответ на: комментарий от arsi

http://git.busybox.net/busybox/tree/examples/inittab

Я так уже пробовал:
-sh: can't access tty; job control turned off

Смотрю код бузибокса, это сообщение выводится при неудачном вызове tcgetpgrp()

pgrp = tcgetpgrp(fd);
if (pgrp < 0) {
out:
  ash_msg("can't access tty; job control turned off");
  mflag = on = 0;
  goto close;
}
GSA
() автор топика
Ответ на: комментарий от slapin

Ну, группу терминала не может получить, потому, что login никто не делал.

С чем это может быть связано?

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

на больших системах группу терминалов назначает init. Что делает busybox init - не в курсе, так как им почти не пользовался.

slapin ★★★★★
()

А может не работать из-за того, что tcgetattr() возвращает структуру termios c неопределенными полями VINTR, VKILL, VLNEXT?

GSA
() автор топика
13 октября 2013 г.
Ответ на: комментарий от Landgraf

Драйвер писал другой программист, руководствуясь книгой Linux Device Drivers

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