주번호

리눅스에서 주번호(Major Number)는 디바이스를 구분하기 위해 사용된다. 첫 번째 IDE 하드디스크는 /dev/hdaXX로 표시되고, 주번호는 3번이다. tty 디바이스는 /dev/ttyXX로 표시되며, 주번호는 4번이다.

주번호가 다르다는 것은 물리적인 디바이스도 다르고, 사용되는 디바이스 드라이버도 다르다는 것을 의미한다.

커널 2.4에서는 주번호에 8 비트, 부번호에 8 비트를 사용하기 때문에 최대 256개의 주번호를 사용할 수 있다. 2.4 커널에서 주번호와 부번호는 kdev_t 형식에 저장된다.

typedef unsigned short kdev_t;

커널 2.6에서는 주번호 12 비트, 부번호 20 비트로 확장하여, 총 4096개의 주번호를 사용한다. 2.4 커널은 디바이스 번호에 16 비트 데이터형을 사용했으며, 2.6 커널은 디바이스 번호에 32비트 데이터형을 사용한다.

typedef __u32 __kernel_dev_t;
typedef __kernel_dev_t dev_t;

참고로 문자 디바이스와 블록 디바이스의 주번호는 각각 독립되어 있다. 문자 디바이스와 블록 디바이스는 서로 다른 인터페이스와 API를 제공한다.

  부번호

부번호(Minor Number)는 동일한 디바이스가 여러 개 있을 때, 이들 디바이스를 구분하기 위한 용도로 사용한다. 예를 들어, 리눅스 터미널을 의미하는 /dev/ttyXX는 모든 주번호 4번를 갖습니다. 주번호가 4인 것은 모두 같은 종류의 디바이스라는 것을 의미하지만, 부번호를 사용해서 각 터미널을 구분해서 처리하게 된다.

부번호는 커널에서 사용하지 않으며, 각 디바이스 드라이버 내부에서 디바이스를 구분하기 위해 사용한다.

  misc 디바이스

Misc(miscellaneous) 디바이스는 다소 특별한 형태의 디바이스 드라이버이다. 디바이스를 구별하기 위해 주번호 외에 부번호까지 사용하는 디바이스로 부족한 디바이스 번호할당 문제를 해결하기 위해 제안된 것이다. 때문에, 별도의 함수와 자료구조를 갖는다.

커널에서 사용하는 주번호와 사용자가 사용할 수 있는 주번호는 커널 소스의 Documentation/device-list/에서 확인 할 수 있다.

현재 시스템에 장착되어 있는 디바이스들의 정보는 커널 내 정보들을 보여주는 profs에서(cat /proc/devices)로 확인할 수 있다.


+ Recent posts