読み書き操作で簡単なその他の文字デバイスドライバを作成する

読み書き操作で簡単なその他の文字デバイスドライバを作成する

この質問をご覧いただきありがとうございます。

私は、読み書き操作を含む単純なその他の文字デバイスを作成しています。読んでください...

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

このコードは少し複雑すぎるようで、修正しようとしています。修正されたコードは次のとおりです。使用するまで必要なテキストを印刷し続けます。SIGINTCtrl+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>

助けてくれてありがとう:)。

おすすめ記事