커널은 memory protection을 하고 있기 때문에. 바로 건들지 않고, copy 해와야 한다. 
관련함수는 copy_from_user(). copy_to_user() 이다. 
 

#include <asm/uaccess.h>
 copy_to_user(buf, &k_data, count);
 copy_from_user(&k_data, buf, count);



kmalloc시 
메모리 해제될 때까지 block 되었다가 기다리게 하는 것을 GFP_KERNEL 옵션
무조건 할당하고 없으면 즉시 NULL을 반환하는 것은 GFP_ATOMIC 옵션
연속된 물리 메모리를 할당받을 때 사용하는 것은 GFP_DMA 옵션

OS와 드라이버에 대한 깊은 이해가 필요한데. 과부하와 버그에 대해서 대처 방법을 모를 수 있다. 
내가 구현하고 싶은 디바이스 드라이버가 있으면, 가장 비슷한 디바이스 드라이버를 참조해서 도움이 된다.
함수로 쓰지 않는 것이 좋다고 한다. . (하지만, 천재는 제외겠지. ㅋ)




ssize_t sk_write (struct file *filp, const char *buf, size_t count, loff_t *f_pos) {
void * k_data;
k_data = kmalloc(count, GFP_KERNEL);
if (k_data == NULL) {

}


ret = copy_from_user(k_data, buf, count);
if(ret < 0) return -1;
....





Posted by '김용환'
,