Kernel
編寫具有讀寫操作的簡單 misc char 設備驅動程序
感謝您查看這個問題。
我正在編寫一個具有讀寫操作的簡單 misc char 設備。請繼續閱讀…
TEXT
當我這樣做時,以下程式碼僅列印一次所需的文本cat /dev/mydevice01
這是讀取函式的程式碼。
static ssize_t my_read(struct file *file, char __user *buff, size_t count, loff_t *ppos) { char *print_str = TEXT; if (*ppos != 0) return 0; if ((count < TEXT_LENGTH) || (copy_to_user(buff, print_str, TLF_ID_LENGTH))) return -EINVAL; *ppos += count; return count; }
TEXT
是使用定義的#define
,所以是TEXT_LENGTH
我覺得這段程式碼有點太複雜,因此我嘗試修改它。這是修改後的程式碼,但會一直列印所需的文本,直到我在程序中使用
SIGINT
(Ctrl+C
) :static ssize_t my_read(struct file *file, char __user *buff, size_t count, loff_t *ppos) { char *print_str = TLF_ID; if (copy_to_user(buff, print_str, TLF_ID_LENGTH)) return -EINVAL; return count; }
我是 Linux 核心程式的新手。我想知道程式碼出了什麼問題。如果可能的話,一行程式碼就可以實現相同的功能。提前致謝!
我自己想出來了,我會把答案留給其他尋找類似東西的人。
static ssize_t my_read(struct file *file, char __user *buff, size_t count, loff_t *ppos) { char *print_str = TEXT; int len = TEXT_LENGTH; return simple_read_from_buffer(buff, count, ppos, print_str, len); }
這按預期工作。只是不要忘記包含這些模組。
#include <linux/fs.h> #include <linux/init.h> #include <linux/miscdevice.h> #include <linux/module.h>
謝謝大家的幫助:)。