읽기 및 쓰기 작업으로 간단한 기타 문자 장치 드라이버 작성

읽기 및 쓰기 작업으로 간단한 기타 문자 장치 드라이버 작성

이 질문을 봐주셔서 감사합니다.

저는 읽기 및 쓰기 작업이 포함된 간단한 기타 문자 장치를 작성하고 있습니다. 계속 읽어주세요...

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

나는 그것을 스스로 알아 냈고 비슷한 것을 찾는 다른 사람들에게 대답을 남길 것입니다.

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>

도움을 주셔서 감사합니다 :).

관련 정보