小编Mr.*_*. T的帖子

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

我在Linux设备驱动程序一书中找到的这个小小的驱动程序遇到了麻烦.我必须略微采用代码以满足我的要求,因此踢掉了任何不相关的代码(参见下面的代码).

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

但我面临两个问题:

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

    echo test > /dev/tiny_tty
    bash: echo: write error: Invalid argument
    
    Run Code Online (Sandbox Code Playgroud)

驱动程序在Raspberry Pi内核4.9.56-v7上运行.

非常感谢!

此致,托马斯

更新:使用tty_flip_buffer_push()中的解决方案(部分)解决了第一个问题,将数据发送回自身.有没有办法直接在设备驱动程序中执行此操作,因此用户不需要进行任何交互?

/*
 * Tiny TTY driver
 *
 * Base on tiny tty driver from Greg Kroah-Hartman
 */

#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/wait.h>
#include <linux/tty.h>
#include <linux/tty_driver.h>
#include <linux/tty_flip.h>
#include <linux/serial.h>
#include <linux/sched.h>
#include <linux/seq_file.h>
#include <asm/uaccess.h>
#include <linux/kthread.h>
#include <linux/jiffies.h>

#define USE_SIMULATOR

#define DELAY_TIME      HZ * 2  /* …
Run Code Online (Sandbox Code Playgroud)

linux tty linux-device-driver

6
推荐指数
1
解决办法
334
查看次数

标签 统计

linux ×1

linux-device-driver ×1

tty ×1