맨첫 포스트에서 말했듯이, 애플리케이션(User Level)에서는 디바이스 드라이버로(Kernel Level)에 직접 접근할 수 없기 때문에 이둘을 연결해주는 역할인 장치파일이 필요하다.
mknod로 만들 수 있으며, 장치 파일과 디바이스 드라이버는 장치번호로 연결된다.
mknod [옵션] 파일이름 종류 주번호 보조번호
사용방법은 위와같으며, 하나하나 알아보자....
먼저 종류에는 c를주어 문자 장치 파일 혹은 b는 블록 장치 파일로 만들 수 있다.
이건 뭘까?
그리고 주번호 보조번호는 뭘까?
디바이스 드라이버의 종류
1.문자 디바이스 (Char Device)
앞서 보았듯 /dev파일에서 맨앞에 c가 있으면 char device 파일이다.
블록디바이스와 비교하면서 보는게 좀 더나은데 몇가지 특징을 정리하면 아래와 같다.
문자 단위로 데이터 처리:
- 문자 디바이스는 데이터를 1바이트씩 순차적으로 처리한다. 이는 데이터가 순차적으로 읽히거나 쓰이는 장치에서 유용하다.
- 대표적인 문자 디바이스로는 키보드, 마우스, 직렬 포트, 터미널 등이 있다. 모두 순차적인 처리를 사용하기 때문이라고 볼 수 있다.
순차적 접근 방식:
- 문자 디바이스는 순차적으로 데이터를 읽거나 쓴다. 즉, 파일 내의 특정 위치로 바로 접근하는 기능(랜덤 액세스)은 제공되지 않는다.
- 이러한 순차적 접근 방식은 파일이나 데이터를 처음부터 끝까지 읽거나 쓸 때 적합하다.
운영체제 인터페이스:
- 운영체제는 문자 디바이스와의 상호작용을 위해 표준화된 시스템 호출을 제공한다. 예를 들어, open(), read(), write(), close()와 같은 시스템 호출을 사용하여 문자 디바이스에 접근할 수 있다.
단순한 인터페이스:
- 문자 디바이스는 매우 간단한 인터페이스를 가지고 있으며, 대부분의 경우 단순한 읽기(read)와 쓰기(write) 작업만 지원한다.
- 이 간단함은 많은 종류의 장치가 같은 방식으로 처리될 수 있게 한다.
거의 아마 문자 디바이스 드라이버를 많이 다룰 것이다...
2.블록 디바이스 (Block device )
그리고 맨앞에 b가 있으면 block device 파일이다.
아래는 특징이다.
블록 단위 데이터 처리:
- 블록 디바이스는 데이터를 정해진 크기의 블록 단위(일반적으로 512바이트, 1KB, 4KB 등)로 처리한다.
- 이 방식은 디스크 드라이브와 같은 장치에서 효율적으로 데이터를 읽고 쓰는 데 적합한다.
랜덤 액세스(Random Access):
- 블록 디바이스는 파일이나 데이터를 임의의 위치에서 읽거나 쓸 수 있는 랜덤 액세스 기능을 제공한다.
- 예를 들어, 파일 시스템은 특정 파일의 중간 부분에 있는 데이터를 빠르게 접근할 수 있다.
대표적인 예시:
- 하드 디스크 드라이브(HDD): 대용량 데이터를 저장하고, 파일 시스템과 상호작용하는 대표적인 블록 디바이스이다.
- SSD(Solid State Drive): 빠른 속도의 비휘발성 메모리 기반 저장 장치로, 블록 디바이스로 사용된다.
- USB 메모리: 플래시 메모리 기반 저장 장치로, 블록 디바이스의 일종이다.
- RAM 디스크: 물리적 메모리의 일부를 디스크처럼 사용하는 방식으로, 블록 디바이스로 구현된다.
이렇듯 주변 장치는 거의 문자 디바이스, 메모리 관련은 거의 블록디바이스로 처리되는 듯하다.
주번호(Major Number), 부번호(Minor Number)
그리고 장치 파일을 다시 보면, 두 숫자가 있는데 앞에거가 주번호, 뒤에거가 부번호이다.
주번호:
- 커널에서 디바이스 드라이버를 구분/연결하는데 사용한다.
- 같은 디바이스 종류를 지칭. 1Byte (0~255 사이의 값)
즉, 주번호는 장치파일이 디바이스 드라이버와 연결되기 위한 값이라고 식별자로 생각하면된다. 그리고 장치마다 부여되는 고유 번호이다.
마우스와 키보드는 다른 장치이므로 다른 주번호를 갖지만, 하드디스크 여러개가 부착된다고 하면 같은 주번호를 갖게된다.
부번호:
- 장치 드라이버에 의해 관리되는 장치의 특정 인스턴스를 식별
- 드라이버가 관리하는 여러 장치 중에서 어떤 장치와 통신할지 나타냄
- 여러 개의 파티션이 있는 하드 드라이브에서는 동일한 드라이버가 관리하는 각 파티션마다 다른 보조번호가 할당
같은 장치라도 여러개의 파티션이 있다면 다른 보조번호가 할당된다.
하지만 같은 종류의 장치이므로 하나의 디바이스 드라이버가 관리할 수 있다.
그리고 한가지 기억할 건 블록디바이스와 문자디바이스의 주번호를 별개라서 다른 장치라도 같은값을 가질 수 있다.
'리눅스 > 디바이스 드라이버' 카테고리의 다른 글
[디바이스 드라이버] 5.GPIO 디바이스 드라이버 (0) | 2024.09.23 |
---|---|
[디바이스 드라이버] 4. 장치파일과 디바이스 드라이버 연결하기 (2) | 2024.09.02 |
[디바이스 드라이버] 2. 모듈 프로그래밍 (1) | 2024.09.01 |
[디바이스 드라이버] 1. 디바이스 드라이버란? (0) | 2024.09.01 |