Использование ncurses с initrd (linux mint 13 - ядро ​​по умолчанию)

Я пытаюсь изменить initrd в Mint 13 (производная от ubuntu). Основная идея состоит в том, чтобы программа, которую я делаю, запускалась сценарием local-top. То есть - когда ядро ​​запускается и загружает initrd, моя программа должна находиться в этом initrd и запускаться до того, как initrd будет выгружен из оперативной памяти. Обычно я хочу отображать окна и использовать некоторые функции библиотеки ncurses, но получаю сообщение об ошибке. Я, конечно же, включил библиотеку в свой файл initrd. Я получаю следующее сообщение об ошибке: Ошибка при открытии терминала: linux.

Возможно, у кого-то есть идея, как это исправить?


person M. Ivanov    schedule 12.12.2013    source источник
comment
Мне удалось использовать ncurses на этапе initramfs. Сейчас я проверю, могу ли я использовать с ним мышь.   -  person M. Ivanov    schedule 15.12.2013


Ответы (1)


Этого не достаточно. У Ncurses много файлов терминала, вероятно, они находятся в / etc / terminfo. Фактический тип терминала всегда хранится в переменной окружения TERM, вероятно, это вами "linux". Цель этой структуры - сделать приложения ncurses совместимыми или, по крайней мере, пригодными для использования где угодно. Например, wyse-терминал (древний терминал допотопной эпохи) имеет совершенно разные последовательности управления, как консоль linux или freebsd.

Недостаточно только копирования библиотеки, вам нужно скопировать и /etc/terminfo/l/linux.

Возможно, могут потребоваться дополнительные файлы, это вы можете проверить с помощью команды strace (если вы не можете интерпретировать ее вывод, Google - ваш друг или мы ждем вашего следующего вопроса). Синтаксис:

strace -s 200 -f -o sux.txt ./theCommandToTest

Он сбросит журнал вызовов ядра ./theCommandToTest в текстовый файл sux.txt.

В любом случае, чтобы протестировать эту вещь, лучшее решение, если вы загружаете свой Linux в командной оболочке (например, используйте параметр загрузки init = / bin / bash, или вы вызываете простой bash из локальной вершины). Таким образом, вы сможете запустить эту strace и поиграть с ней, чтобы узнать, что еще может понадобиться.

Удачи!

person peterh    schedule 12.12.2013
comment
Здравствуйте, большое спасибо за информацию, которую вы мне предоставили. Я просто попытался добавить файлы terminfo (я не знал, что старые терминалы использовали разные последовательности). В результате я больше не получаю эту ошибку, но получаю зависание (в настоящее время local-top автоматически запускает мое приложение). Кроме того, это не совсем замораживание, поскольку я несколько раз щелкнул в том месте, где должно быть окно (но, по-видимому, не отображается), и получил сообщение о том, что какая-то программа может пытаться напрямую получить доступ к аппаратным устройствам. Завтра я также попробую использовать strace, чтобы лучше понять, что именно происходит. - person M. Ivanov; 13.12.2013
comment
Щелкнуть? На консоли персонажа? Это возможно (google for: gpm console linux), но маловероятно. - person peterh; 13.12.2013
comment
Хорошо, теперь я могу запускать приложения ncurses в среде initramfs, но по-прежнему не могу использовать мышь. Итак, в настоящее время я пытаюсь понять, как поместить gpm или что-то еще в свой initrd и загрузить его (я пытался просто скопировать двоичный файл gpm, но он работал не так, как ожидалось, или, возможно, я сделал что-то не так). - person M. Ivanov; 15.12.2013
comment
gpm тоже нужна некоторая конфигурация. Лучше сначала настроить gpm в работающей системе и только в качестве второго шага перенести его на свой initrd. Но у вас все хорошо! Ровно так хорошо, как умеют российские (?) Программисты. :-) Я уверен, что вы могли бы быстро изучить эту странную штуку (а вместе с ней и API ядра unix). Ncurses имеет возможность подключения к мыши, он может обрабатывать щелчки мыши из gpm на консоли char или также работать в окне xterm, хотя я никогда не программировал его. - person peterh; 15.12.2013
comment
Спасибо за вашу помощь, я ценю это. Теперь я знаю, как все это сделать, но я предпочитаю больше - я хочу использовать графику, ncurses недостаточно для моих целей. Я научился использовать SDL - он имеет поддержку мыши и клавиатуры из коробки. Проблема в том, что он использует / dev / fb0, и я не могу понять концепцию, лежащую в основе этого. Я могу заставить его появиться, передав ядру vesafb: mtrr, ywrap vga = 0x319, но я слышал, что это устарело. Также используются файлы модулей, такие как / etc / modules, черные списки и т. Д. Настоящая проблема возникает, когда я использую Xen. Я вообще не могу заставить / deb / fb0 появиться. - person M. Ivanov; 21.12.2013
comment
Вместо вас я использовал Xvfb (виртуальный буфер кадра X), запустив на нем SDL, и связался с ним через vnc. Он мог работать везде, в виртуальной машине или на хост-ОС, хотя требовал взаимодействия трех сложных систем. - person peterh; 21.12.2013
comment
Я понимаю, как это работает, но не уверен, поможет ли это. Я понимаю, что с помощью Xvfb я могу использовать виртуальный буфер и что-то с ним делать, но для его отображения мне все еще нужен настоящий, подключенный к моему экрану. Если бы у меня было 2 системы - одна с Xvfb, x11vnc, например, а другая с реальным сервером x11 и клиентом vnc, это сработало бы. Но мне нужно, чтобы все было на одной машине (ноутбук без поддержки VT-D (также называемый IOMMU)). Также я до сих пор не могу понять, как работает x11-сервер без устройства / dev / fb0, а все остальное - SDL, DirectFB и т. Д. терпит неудачу. - person M. Ivanov; 21.12.2013
comment
паравиртуализированный xen имеет только консоль char, и так далее. Графической карты нет. Это эффективный очень сложный chroot / jail. Вместо вас я использовал vmware, потому что с ним у вас больше шансов получить хорошо оплачиваемую работу. Хотя в качестве хобби-проекта я использовал виртуальный бокс, потому что он с открытым исходным кодом и намного лучше, хотя и не так удобен для пользователя. - person peterh; 22.12.2013
comment
Что ж, я знаю, что могу использовать VirtualBox, но идея использования Xen заключается в повышении безопасности без потери аппаратных ресурсов. Возможно, вы читали про Qubes OS. Это Linux, основанный на идее использования нескольких доменов для разных приложений для создания изоляции. Проблема в том, что мой ноутбук не поддерживает IOMMU, поэтому Qubes OS на самом деле не вариант (он может работать, но имеет слишком много проблем, Qubes - это намного больше, чем Linux с Xen). Итак, я пытаюсь создать следующее: Grub загружает Xen, Xen загружает ядро, Initrd загружается, графическое приложение запускается, затем оно убивается, initrd fs выгружается, настоящая fs монтируется - person M. Ivanov; 22.12.2013