2012-01-26 1 views
1

저는 리눅스를 처음 사용하고있어서 사용자가 장치 파일을 읽을 수있을뿐만 아니라 읽을 수있는 모듈을 만들었습니다. 다음 코드는 읽기가 제대로 작동하지만 쓰기 기능이 아닙니다.내 코드가 장치 파일에 읽고 쓰는 데 문제가 있습니까?

MODULE_LICENSE("DUAL BSD/GPL"); 

char message[80]; 
char *msg_ptr; 

int dev_major = 0; 
int dev_minor = 0; 

struct cdev *cdev; 

ssize_t dev_read(struct file *filp,char __user *buf,size_t count,loff_t *offset) 
{ 
int i; 
i=copy_to_user(buf,msg_ptr,count); 
printk(KERN_ALERT"buff:%s",buf); 


return 0; 
} 
    ssize_t dev_write(struct file *filp,const char __user *buf,size_t count,loff_t *offset) 
{ 
    int j; 
    msg_ptr = kmalloc(sizeof(*buf),GFP_KERNEL); 
    copy_from_user(msg_ptr,buf,sizeof(*buf)); 
//printk(KERN_ALERT"msg_ptr:%s",msg_ptr); 
    return 0; 
     } 

나는 문자 노드를 확인한 다음 하이>는/dev/my_dev 다음은 하이 인쇄 만/메시지/로그/var에에서 볼 수 있듯이 infintely 기록 에코 사용합니다.

답변

0

dev_write은 기록 된 바이트 수를 반환해야합니다.
0을 반환하면 Linux는 0 바이트를 썼다는 것을 알게되고 나머지는 다시 쓰도록 사용자를 호합니다. 그리고 다시 ...

같음 dev_read와 동일합니다.

1

이 줄은 잘못된 같습니다 당신은 가능성이 아키텍처에 따라 4 또는 8 바이트 sizeof(*buf) 바이트를 복사

copy_from_user(msg_ptr, buf, sizeof(*buf)); 

.

count 인수를 사용해야합니다.

+0

포인터가 가리키는 객체의 크기입니다. 따라서 최악의 경우 : sizeof (* buf)는 1입니다. – ouah

+0

copy_from_user (msg_ptr, buf, count); 나는 그것을 사용했지만 문제는 여전히 거기에있다 .......... 더 이상의 제안. – karan421

관련 문제