【问题标题】:How to write to a tty from kernel space with only major and minor device numbers available?如何从只有主要和次要设备号可用的内核空间写入 tty?
【发布时间】:2019-05-21 03:00:00
【问题描述】:

我想从内核空间写入 tty,并且只能访问该特定 tty 的主要和次要设备号。

我通过一个工作正常的系统调用进入内核,并且能够通过使用来写入当前 tty

my_tty = current->signal->tty;

(my_tty->driver->ops->write) (my_tty,"Text message", SIZE);

问题是有时我希望写入不同的 tty,并且(据我所知)只能访问由 current->signal->tty 定义的 tty。

我所拥有的是我希望寻址的 tty 的主要和次要设备号,我将它们作为参数传递给系统调用。

任何人都可以就我可以研究的可用解决方案提供建议吗?

除了使用调用程序的当前 tty 的上述解决方案之外,我没有找到任何其他解决方案。也许我使用了不正确的搜索词。

我还没有示例代码,因为我没有向现有的系统调用添加任何内容。一旦我知道要使用什么,我会很高兴。也许已经有功能可以实现这一点?我只是希望得到一个关于使用什么或在哪里寻找的指针。

【问题讨论】:

    标签: c linux-kernel tty


    【解决方案1】:

    您不会通过将主要/次要数字传递给您的系统调用来做到这一点。

    相反,让用户空间端打开它想要的 tty,然后将生成的文件描述符传递给您的系统调用。然后使用序列{ fget(); kernel_write(); fput(); } 写入提供的文件描述符。

    【讨论】:

    • 是的,这行得通。作为记录,我使用了 kernel_write()。
    • @rhg910:这些不应该是替代品,fget()fput() 需要在 kernel_write() 调用周围,以确保文件不会被赛车线程关闭。我已经更新了答案,希望能更清楚。
    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多