kmalloc
-
디바이스 드라이버 / 부 번호에 의한 파일 처리Linux/Linux Device Driver 2020. 9. 1. 12:41
부 번호에 의한 파일 처리는 register_chrdev() 함수를 사용해야 합니다. 그럼 register_chrdev() 함수를 사용하는 이유는 뭘까요? 바로 부 번호로 제어를 하기 위해서는 디바이스 파일과 1:N으로 대응해야 하기 때문입니다. pi@raspberrypi:~/Documents/minor $ nano minor_driver.c #include #include #include #include // file_operations 포인터 함수 #include // copy_to_user() #include // kmalloc() #define MAJOR_DEV_NAME "major_dev" #define MAJOR_DEV_NUM 200 static int minor1_open(struct ino..
-
디바이스 드라이버 / 주 번호에 의한 파일 처리Linux/Linux Device Driver 2020. 9. 1. 12:41
주 번호에 의한 파일 처리는 register_chrdev()와 register_chrdev_region() 두 가지 함수를 사용할 수 있습니다. pi@raspberrypi:~/Documents/major $ nano major_driver.c #include #include #include #include // file_operations #include // copy_to_user() #include // kmalloc() #define MAJOR_DEV_NAME"major_dev" #define MAJOR_DEV_NUM200 static int major_open(struct inode *inode, struct file *file) { printk("major_open\n"); return 0; }..
-
디바이스 드라이버 / 동적 메모리 할당Linux/Linux Device Driver 2020. 9. 1. 12:40
kmalloc() 연속된 물리 메모리를 연속된 가상 공간에 매핑하여 할당 받는다. GFP_KERNEL 플래그는 kmalloc() 함수에서 사용하는 대표적인 인자값으로 동적 메모리 할당이 항상 성공하도록 요구한다. 이 값으로 kmalloc() 함수를 사용하면 커널이 관리하는 메모리가 충분하지 않을 경우에는 디바이스 드라이버를 호출한 프로세스가 수행을 멈추고, 동적 메모리를 할당할 수 있는 상태가 될 때까지 잠든다. 그러다 다른 프로세스에서 메모리를 반환해 커널이 동적 메모리를 할당할 수 있는 상태가 되면 깨어난다. 그래서 kmalloc() 함수를 인터럽트 서비스에서 사용할 때는 이 값을 사용하면 안된다. GFP_ATOMIC 플래그를 사용하는 경우 슬립되지 않으므로 인터럽트 핸들러에서도 사용될 수 있다. v..