![읽기 및 쓰기 작업으로 간단한 기타 문자 장치 드라이버 작성](https://linux55.com/image/175347/%EC%9D%BD%EA%B8%B0%20%EB%B0%8F%20%EC%93%B0%EA%B8%B0%20%EC%9E%91%EC%97%85%EC%9C%BC%EB%A1%9C%20%EA%B0%84%EB%8B%A8%ED%95%9C%20%EA%B8%B0%ED%83%80%20%EB%AC%B8%EC%9E%90%20%EC%9E%A5%EC%B9%98%20%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84%20%EC%9E%91%EC%84%B1.png)
이 질문을 봐주셔서 감사합니다.
저는 읽기 및 쓰기 작업이 포함된 간단한 기타 문자 장치를 작성하고 있습니다. 계속 읽어주세요...
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>
도움을 주셔서 감사합니다 :).