我在Linux设备驱动程序一书中找到的这个小小的驱动程序遇到了麻烦.我必须略微采用代码以满足我的要求,因此踢掉了任何不相关的代码(参见下面的代码).
我使用一个内核线程将"hello world"写入TTY层.如果我使用cat命令在终端中打开设备文件,我会收到预期的字符串.
但我面临两个问题:
如果在设备文件上使用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)