0
Linux 드라이버에서 char 장치 드라이버를 구현하려고합니다. 드라이버에 문자열을 에코하려고하면 결과가 매우 이상합니다.Dmesg가 char 장치 모듈에서 linux 커널로 출력합니다.
문자열을 I 입력을 저장하는 내 코드 :
int max_size = 1;
char store[1] = {0};
char message[100] = {0};
ssize_t hello_write(struct *filep, const char *buffer, size_t length, loff_t *position)
{
if(length> max_size)
length = max_size;
if(copy_from_user(message, buffer, length))
return -EFAULT;
strncpy(store, message, max_size);
printk(KERN_INFO "Actually stored in kernel:%s", store);
return max_size;
}
ssize_t hello_read(struct file *filep, char *buffer, size_t length, loff_t *postion)
{
int error_count = 0;
error_count = copy_to_user(buffer, store, max_size);
if(error==0){
printk(KERN_INFO "read message from kernel: %s", store);
return 0;
}
else{
printk(KERN_INFO "failed to send %d chars to user", error_count);
return -EFAULT;
}
}
테스트 :
echo ginger > /dev/test cat /dev/test
나는 기능을 가진 첫 번째 각 입력 문자열의 편지, 아무것도 저장하려는 strncpy
? write
콜에 의해 반환
감사합니다, 나는 포인터를 재배치하는 것을 잊었다 깨달았다. 이제는 꽤 잘 작동합니다. 다시 한 번 감사드립니다! – Ethan