Linux kernel Linux设备驱动程序在8192字节后停止写入

Linux kernel Linux设备驱动程序在8192字节后停止写入,linux-kernel,linux-device-driver,kernel-module,Linux Kernel,Linux Device Driver,Kernel Module,我需要编写一个Linux内核模块,它应该非常简单,易于理解,可以将数据从用户传输到内核空间。我试图通过创建一个可以写入的字符设备来实现这一点。当接收到某个终止字符时,将调用解析函数来处理输入。该字符设备的读取操作只是重置状态 现在的问题是,在8192或2^13字节之后,字符设备会自动停止写入过程,因此,只要输入到模块中的字符串为,模块就可以工作。您应该包括来自设备驱动程序的代码,以便我们可以看到可能的问题。如果您将驱动程序设计为使用read和write,那么您不应该期望将整个数据输入(或读取)具

我需要编写一个Linux内核模块,它应该非常简单,易于理解,可以将数据从用户传输到内核空间。我试图通过创建一个可以写入的字符设备来实现这一点。当接收到某个终止字符时,将调用解析函数来处理输入。该字符设备的读取操作只是重置状态


现在的问题是,在8192或2^13字节之后,字符设备会自动停止写入过程,因此,只要输入到模块中的字符串为,模块就可以工作。您应该包括来自设备驱动程序的代码,以便我们可以看到可能的问题。如果您将驱动程序设计为使用
read
write
,那么您不应该期望将整个数据输入(或读取)具有单个
读取
写入
的驱动程序。您不应该试图强制这样做,因为在syscall的读写文档中明确指出,这些函数可以很好地处理少于请求量的数据。程序员需要考虑到这一点,从驱动程序的角度看,您对此无能为力。
write
系统调用本质上不限于8192字节。您的“写入”文件操作处理程序函数正在限制它,或者用户空间应用程序只是不尝试一次写入超过8192字节。@IanAbbott您是对的!我不知道为什么,但是使用cat txt>/dev/my_char_dev是个问题。做了一个简短的Python包装器,它立刻就工作了。我认为你的评论是解决这个问题的办法,但我不知道怎么做。你可能知道吗?@achnichtsowichtig你不能将评论标记为解决方案,因此,它必须是实际的答案。至于
cat
用于
write()
syscall的默认块大小:我想
dd
工具可以与指定的
bs=
param一起使用,无需为此实现Python包装器。
cat
可能限制块大小的原因可能是由于性能原因,可能是因为它试图遵守FS块大小,等等。也许您可以找到更多的见解。