커널은 디바이스 파일에 기록된 디바이스 타입주 번호를 이용해 커널 내에 등록된 디바이스 드라이버 함수를 연결한다. 문자 디바이스 드라이버의 경우, 커널 2.6에서는 fs/char_dev.c에 chrdevs라는 전역 변수를 다음과 같이 정의 한다.

static struct char_device_struct {

    struct char_device_struct *next;

    unsigned int major;

    unsigned int baseminor;

    int minorct;

    char name[64];

    struct cdev *cdev;      /* will die */

} *chrdevs[CHRDEV_MAJOR_HASH_SIZE];



이 전역 변수는 struct file_operations *ops; 라는 필드(struct cdev  필드에 있음)를 포함한 문자 디바이스 드라이버를 관리하는 구조체다.

응용 프로그램에서 open() 함수로 디바이스 파일을 열어 타입 정보와 주 번호를 얻고, 이 정보를 이용하여 chrdevs 배열에 등록된 디바이스 드라이버의 인덱스를 얻고, 여기서 얻은 인덱스 값으로 chrdevs 변수에 등록된 file_operations 구조체 주소를 얻는다. 결국 디바이스 파일 타입 정보와 주 번호를 이용해 커널 내의 디바이스 드라이버를 찾는다.


 

+ Recent posts