微小的tty linux设备驱动程序的奇怪行为

时间:2017-11-23 19:47:57

标签: linux linux-device-driver tty

我在Linux设备驱动程序一书中找到的这个小小的驱动程序遇到了麻烦。我不得不稍微采用这些代码来满足我的要求,因此删除了任何不相关的代码(参见下面的代码)。

我使用一个内核线程将“hello world”写入TTY层。如果我使用cat命令在终端中打开设备文件,我会收到预期的字符串。

但我面临两个问题:

  1. 为什么在tty_insert_flip_char(...)时调用tiny_write(...) 在我的内核线程(tiny_thread)中调用?只有在写入设备文件时才应该调用tiny_write(...)函数吗?如果在读取或写入操作期间调用它,如何区分此函数?
  2. 如果在设备文件中使用echo,为什么会出现错误?

    ngAfterViewInit() {
      console.log(this.item.toArray());
      this.item.changes.subscribe(() => {
        console.log(this.item.toArray());
      });
    }
    
  3. 驱动程序在Raspberry Pi内核4.9.56-v7上运行。

    非常感谢!

    此致 托马斯

    更新:使用tty_flip_buffer_push() sends data back to itself中的解决方案(部分)解决了第一个问题。有没有办法直接在设备驱动程序中执行此操作,因此用户不需要进行任何交互?

    echo test > /dev/tiny_tty
    bash: echo: write error: Invalid argument
    

1 个答案:

答案 0 :(得分:0)

帖子已经过时了,但是我偶然发现了相同的问题,并决定分享解决方案:

  1. 您可以通过在termios结构中设置适当的标志来关闭回显:

    tiny_tty_driver->init_termios.c_lflag &= ~ECHO;
    
  2. 这是因为tiny_write总是返回-EINVAL,请在返回前设置retval = count;来解决此问题。