모듈 사용 횟수 관리

17

description

모듈 사용 횟수 관리. 커널 2.4 MOD_INT_USE_COUNT : 모듈 사용 횟수를 증가시킨다 . MOD_DEC_USE_COUNT : 모듈 사용 횟수 감소시킨다 . MOD_IN_USE : 모듈 사용 횟수가 0 이 아니면 참값을 반환한다. 커널 2.6 Try_module_get(THIS_MODULE) : 모듈 사용 횟수를 증가시킨다 . Module_put(THIS_MODULE) : 모듈 사용 횟수 감소시킨다. 모듈 사용횟수 관리 함수. 문자 디바이스 드라이버 동작. read. - PowerPoint PPT Presentation

Transcript of 모듈 사용 횟수 관리

Page 1: 모듈 사용 횟수 관리
Page 2: 모듈 사용 횟수 관리
Page 3: 모듈 사용 횟수 관리
Page 4: 모듈 사용 횟수 관리
Page 5: 모듈 사용 횟수 관리
Page 6: 모듈 사용 횟수 관리
Page 7: 모듈 사용 횟수 관리
Page 8: 모듈 사용 횟수 관리
Page 9: 모듈 사용 횟수 관리

모듈 사용 횟수 관리• 모듈 사용횟수 관리 함수커널 2.4MOD_INT_USE_COUNT : 모듈 사용 횟수를 증가시킨다 .MOD_DEC_USE_COUNT : 모듈 사용 횟수 감소시킨다 .MOD_IN_USE : 모듈 사용 횟수가 0 이 아니면 참값을 반환한다 .

커널 2.4MOD_INT_USE_COUNT : 모듈 사용 횟수를 증가시킨다 .MOD_DEC_USE_COUNT : 모듈 사용 횟수 감소시킨다 .MOD_IN_USE : 모듈 사용 횟수가 0 이 아니면 참값을 반환한다 .

커널 2.6Try_module_get(THIS_MODULE) : 모듈 사용 횟수를 증가시킨다 .Module_put(THIS_MODULE) : 모듈 사용 횟수 감소시킨다 .

커널 2.6Try_module_get(THIS_MODULE) : 모듈 사용 횟수를 증가시킨다 .Module_put(THIS_MODULE) : 모듈 사용 횟수 감소시킨다 .

Page 10: 모듈 사용 횟수 관리

문자 디바이스 드라이버 동작

응용 프로그램 장치파일 문자 디바이스

드라이버 하드웨어

read dev-read

returnreturn

* 단일 방식의 호출규칙을 통해 다양한 개념과 다양한 형태의 하드웨어를 제어 가능하다

Page 11: 모듈 사용 횟수 관리

문자 디바이스 드라이버 동작* 커널은 디바이스 파일에 기록된 디바이스 타입과 주번호를 이용해 커널 내에 등록된 디바이스 드라이버 함수를 연결한다 .

* 문자 디바이스 드라이버의 경우 커널 2.6 에서 fs/char_dev.c 에 chrdevs 라는 전역변수를 다음과 같이 정의한다 .

static struct char_device_struct { // 커널 2.6.20 에서 문자 디바이스 드라이버를 관리하는 구조체

struct char_devi ce_struct *next; unsigned int major; unsigned int baseminor; int minorct; char name[64]; struct file_operations fops; struct cdev *cdev;} * chrdevs[CHRDEV_MAJOR_HASH_SIZE];

1. 응용 프로그램에서 open 으로 장치 파일을 열어 타입 정보와 주번호를 얻는다 .2. 이 정보를 이용하여 chrdevs 변수에 등록된 디바이스 드라이버의 인덱스를 얻는다 .3. 이 인덱스값으로 chrdevs 변수에 등록된 file_operation 구조체 주소를 얻는다 .

Page 12: 모듈 사용 횟수 관리

커널 2.6 의 파일 오퍼레이션 구조체

struct file_operations{ struct module *owner; int (*open)(struct inode *, struct file *); . . .}

* 디바이스 드라이버의 file_operations 에서 정의되지 않았거나 NULL 로 채워진 필드는 커널에 의해서 default 처리를 한다 .

Page 13: 모듈 사용 횟수 관리

문자 디바이스 드라이버의 등록과 해제 및 구성

<linux/fs.h> 를 추가하고

int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);

를 이용해 커널에 디바이스 드라이버의 file_operations 을 등록한다 .( 중요 !!!)*디바이스 드라이버가 등록된다는 것은 주번호에 연관된 file_operations 구조체가 커널에 등록된다는 의미 .

int unregister_chrdev(unsigned int major, const char *name);

를 이용해 등록된 디바이스 드라이버를 해제한다 .

* 두값을 모두 비교해서 해제할 디바이스 드라이버를 선택한다 .

주번호는 응용 프로그램에서 디바이스 파일을 이용해디바이스 드라이버를 찾을 때 사용

디바이스 드라이브명은 proc 파일 시스템이나 오류정보를커널에 나타내기 위해 사용한다 . 디바이스 드라이버를 제거할때 구별자로도 사용된다 .

Page 14: 모듈 사용 횟수 관리

#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/errno.h>#include <linux/types.h>#inlcude <linux/fcntl.h>int xxx_open (struct inode *inode, struct file *filp){}int xxx_release(struct inode *inode, struct file *filp){}struct file_operations xxx_fops ={ .owner = THIS_MODULE,

.open = xxx_open,

.release = xxx_release,};int xxx_init(void){ register_chrdev(240, “char_dev”, &xxx_fops);}void xxx_exit(void) { unreister_chrdev(240, “char_dev”);}module_init(xxx_init);module_exit(xxx_exit);

Page 15: 모듈 사용 횟수 관리
Page 16: 모듈 사용 횟수 관리
Page 17: 모듈 사용 횟수 관리