この質問をご覧いただきありがとうございます。
私は、読み書き操作を含む単純なその他の文字デバイスを作成しています。読んでください...
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カーネルプログラミングに初めて触れました。コードに何が問題なのか知りたいです。可能であれば、1行のコードで同じ機能を実装できます。よろしくお願いします!
答え1
私はそれを自分で見つけて、似たようなものを探している他の人に答えを残します。
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>
助けてくれてありがとう:)。