使用的ncurses用initrd文件(Linux Mint的13 - 默认内核)

问题描述:

我想修改薄荷13(Ubuntu的衍生物)的initrd文件。主要想法是我制作的程序由本地*脚本运行。也就是说 - 当内核启动并加载initrd时,我的程序必须在initrd中运行,并在initrd从ram中卸载之前运行。基本上我想显示窗口并使用一些ncurses库函数,但我得到一个错误。我已将该库包含在我的initrd文件中。 我得到的错误是: 错误打开终端:linux。使用的ncurses用initrd文件(Linux Mint的13 - 默认内核)

也许有人在这里有关于如何解决这种想法?

+0

我成功地在initramfs的阶段使用ncurses的。现在我将测试是否可以使用鼠标。 –

这是不够的。 Ncurses有很多终端文件,它们可能在/ etc/terminfo中。实际的终端类型总是存储在TERM环境变量中,这可能是你的“linux”。这个结构的目标是使ncurses应用程序兼容,或者至少可以在任何地方使用。例如,wyse终端(来自前古老时代的古老终端)具有完全不同的控制顺序,如linux或freebsd控制台。

只复制库是不够的,你需要复制/etc/terminfo/l/linux为好。

也许能需要进一步的文件,这时候可以用strace的命令来测试(如果你无法解释它的输出,谷歌是你的朋友或大家都在等待您的下一个问题)。语法:

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

它将转储./theCommandToTest的内核调用记录到sux.txt文本文件。不管怎么说,要测试这个东西,最好的解决方案是如果你在命令行中引导你的linux(例如,使用init =/bin/bash引导选项,或者从本地顶端调用一个简单的bash)。所以你将能够运行这个strace,并与此一起玩,找出可能还需要的东西。

祝你好运!

+1

您好,非常感谢您向我提供的信息。我只是尝试添加terminfo文件(我不知道旧的终端使用不同的seqs)。结果是我不再得到那个错误,但我得到一个冻结(目前本地顶部自动启动我的应用程序)。此外,它不完全冻结,因为我多次点击窗口(但显然未显示),并且收到一条消息,指出某些程序可能试图直接访问硬件设备。明天我会尝试使用strace,以便我可以更清楚地了解到底发生了什么。 –

+0

点击?在字符控制台上?这是可能的(谷歌为:gpm console linux),但它不是很可能。 – peterh

+0

好吧,现在我可以在initramfs环境中运行ncurses应用程序,但我仍然无法使用鼠标。所以目前我想弄清楚如何在我的initrd中加入gpm或其他东西并加载它(我试着复制gpm二进制文件,但它没有像预期的那样工作,或者我做错了什么)。 –