LINUX.ORG.RU

поддержка Unix98 PTY


0

0

Уважаемые ЛОРовцы, надо включить в ядре поддержку терминала Unix98 PTY (UNIX98_PTYS) (opensuse 11.0, kernel 2.6.25 ). Моя проблема заключается в том, что у меня эта опция недоступна, т. е. поиском я ее нахожу (make xconfig), но она помечена как недоступная. Какие опции должны быть включены, чтобы я смог ее активировать? НА сколько я понял, оно должно находится в Device Drivers->Character devices… Там я у меня включено Legacy (BSD) PTY support (LEGACY_PTYS), но это не совсем то, сто мне надо. Заранее спасибо).

Поясню суть: мне надо запустить древнюю программу (времен RedHat 7.1), которая есть только в бинарниках и пересобрать ее нету возможности (коммерческий продукт). При ее зщапуске получаю: All pty's in use XView error: NULL pointer passed to xv_set

В Opensuse 10.3 все работало, но в 11,0 - не хочет.

spike_by
() автор топика

"all ptys are in use" - это как раз от BSD PTYs. А unix98 PTYs у тебя уже включены.

Так что формулируй задачу с самого начала: выяснить, какой именно вид pty нужен XView. Это делается такой командой:

strace -f -e open XView

Вывод в студию.

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

strace: XView: command not found

что делать теперь?

поставил пакет с сайта http://www.physionet.org/physiotools/xview/ - не помогло.

А никто не знает чем ядря отличаются (в плане этих терминалов), ведь в 10,3 все пахало?

spike_by
() автор топика

Кстати это может еще быть от отсутствующей или расположенной не в том месте программы pt_chown

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

> strace: XView: command not found

как ты обычно запускаешь XView? предположим, xview --foo bar/baz

Припиши к этой строчке в начало strace -f -e open

AEP ★★★★★
()

если сделать тоже самое для программы, которую я запускаю: strace -f -e open {имя программы}

выдает оочень много информации, последние строчки которой:

[pid 14719] open("/tmp/tty.txt.7NUtA7", O_RDWR|O_CREAT|O_EXCL, 0600) = 10 [pid 14719] open("/home/science/.ttyswrc", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 14719] open("/usr/openwin/lib/.ttyswrc", O_RDONLY) = 10 All pty's in use XView error: NULL pointer passed to xv_set

Может это как то поможет?

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

я xview не запускаю. Похоже оно вызывается из самой программы.

Прошу извинить за плохое форматировани евывода команды. Исправляюсь:

[pid 14719] open("/opt/silvaco/var/fonts/.text_extras_menu.C", O_RDONLY) = -1 ENOENT (No such file or directory)

[pid 14719] open("/opt/silvaco/var/fonts/.text_extras_menu", O_RDONLY) = 9

[pid 14719] open("/opt/silvaco/var/fonts/.text_extras_menu", O_RDONLY) = 10

[pid 14719] open("/tmp/tty.txt.7NUtA7", O_RDWR|O_CREAT|O_EXCL, 0600) = 10

[pid 14719] open("/home/science/.ttyswrc", O_RDONLY) = -1 ENOENT (No such file or directory)

[pid 14719] open("/usr/openwin/lib/.ttyswrc", O_RDONLY) = 10

All pty's in use XView error: NULL pointer passed to xv_set

вот.

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

Ну это уже прогресс. А насчет вызова из другой программы - на этот предмет есть флаг "-f". Осталось только добавить системный вызов stat и выфильтровать ненужное. Что-то вроде:

strace -o file.log -e open,stat,stat64 -f программа_которую_надо_запускать

grep /dev file.log

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

Ну и на всякий случай, для проверки гиподезы про pt_chown, еще strace -f -e execve программа_которую_надо_запускать

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

> Ну это уже прогресс. А насчет вызова из другой программы - на этот предмет есть флаг "-f". Осталось только добавить системный вызов stat и выфильтровать ненужное. Что-то вроде:

>strace -o file.log -e open,stat,stat64 -f программа_которую_надо_запускать

там много строк, но большенство одинаковые. Вот различные строки, что там есть (это для краткости, бо файл получается большой):

22398 open("/dev/urandom", O_RDONLY) = 5

22398 open("/dev/null", O_RDONLY|O_LARGEFILE) = {цивра} //в разных строка разные

22414 open("/dev/tty", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3

22414 open("/dev/null", O_RDONLY|O_LARGEFILE) = 0

22414 open("/dev/tty", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3

22414 open("/dev/null", O_RDONLY|O_LARGEFILE) = 0

22414 open("/dev/tty", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3

22414 open("/dev/null", O_RDONLY|O_LARGEFILE) = 0

22414 open("/dev/tty", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3

22398 stat64("/dev/ptyp0", 0xbf8e083c) = -1 ENOENT (No such file or directory)

остальное содержимое файла - повтор этих строк (в основном с /dev/null)

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

> Ну и на всякий случай, для проверки гиподезы про pt_chown, еще strace -f -e execve программа_которую_надо_запускать

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

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

> stat64("/dev/ptyp0", 0xbf8e083c) = -1 ENOENT (No such file or directory)

Вот ошибка и попалась. У тебя BSD PTYs в ядре включены, а в правилах udev запрещены. Или ищи, где они запрещены, или отдай такие команды от root (результат действителен до перезагрузки):

mknod /dev/ptyp0 c 2 0

mknod /dev/ttyp0 c 3 0

chmod 666 /dev/ptyp0 /dev/ttyp0

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

> Вот ошибка и попалась. У тебя BSD PTYs в ядре включены, а в правилах udev запрещены. Или ищи, где они запрещены, или отдай такие команды от root (результат действителен до перезагрузки)

хорошо, сделал, но онп просит теперь тоже самое для ptypq0 ptypr0 ..s0 и т.д. как много их нпдо создпапть?)

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

Не знаю. см. http://www.lanana.org/docs/device-list/devices.txt на предмет правильных параметров mknod. Ну или если скрипт MAKEDEV это поддерживает, запусти в /dev команду MAKEDEV pty.

Ну и сразу вопрос - а программа их обоснованно пытается открыть, или натыкается на ошибку и именно поэтому пробует другое устройство?

strace -o file.log -e open,stat64 -f программа_которую_надо_запускать

grep /dev/pty file.log

вывод в студию.

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

Спасибо за помощь, разобрался! Дело было так (если вдруг кому-то понадобится):

Залез в /etc/udev/rules.d/50-udev-default.rules

и сделал так:

#KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660", OPTIONS="last_rule"

#KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660", OPTIONS="last_rule"

KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0666", OPTIONS="last_rule"

KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0666", OPTIONS="last_rule"

затем, зашел в исходники ядра и набрал:

$make cloneconfig

получил таким образом конфигурационный файл с настройками моего рабочего ядра

Затем заметил, что количество BSD терминалов стоит равным нулю. Соответственно, поставил число большее нуля (256).

собрал измененное ядро, перезагрузился и - все работает!

Еще раз спасибо за помощь (про udev сам бы не догадался).

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