디바이스 드라이버란
시스템이 지원하는 하드웨어를 응용 프로그램에서 사용할 수 있도록 커널에서 제공하는 라이브러리
응용 프로그램이 하드웨어를 제어하기 위해서는
커널에 자원 사용을 요청 -> 커널은 이런 요청에 따라 시스템을 관리
커널에 자원 사용을 요청하는 방법은 두 가지
1. 시스템 호출 방식
시스템 제어에 필요한 호출 규칙을 정해 놓고, 소프트웨어 인터럽트 서비스를 이용하여 으용 프로그램에서 요청하는 처리를 커널이 수행하는 방식
커널은 각 기능별로 번호를 할당하고, 이 번호에 해당하는 제어 루틴을 커널 내부에 정의
응용 프로그램은 원하는 기능 번호를 레지스터에 저장한 후 소프트웨어 인터럽트 서비스를 호출함으로써 커널에 제어를 넘김
인터럽트에 의해 호출된 후 커널 내의 서비스 루틴은 기능 번호를 살펴보고, 대응되는 제어에 관련된 서비스 루틴을 호출
서비스 루틴이 모두 처리된 후 커널은 응용 프로그램에 다시 제어권을 넘김
2. 파일 입출력 형식을 이용하여 디바이스 드라이버를 사용하는 방식
하드웨어를 표현하는 디바이스 파일에 응용 프로그램의 입출력을 시도하면 커널 내으 해당 디바이스 파일에 연결된 디바이스 드라이버의 서비스 루틴이 호출되어 디바이스에 대한 처리가 이루어지고, 모든 처리가 끝나면 커널이 제어 흐름을 다시 응용 프로그램으로 넘김
모듈
초기에는 디바이스 드라이버 테스트를 위해서는 커널 소스에 모듈을 포함했어야 함
알다싶이 커널 컴파일은 매우 긴 작업 시간이 필요하고 수정할 때 마다 시스템 재부팅이 필수였음
이러한 불편함을 없애기 위해 생겨난 것이 모듈
커널이 부팅되어 동작 중인 상태에서 디바이스 드라이버를 동적으로 추가하거나 제거할 수 있게 함
시간 단축과 커널 자원 사용의 효율성이 증대됨
디바이스 파일
디바이스 파일 하나 하나는 실직적인 하드웨어를 표현
시스템 또는 하드웨어 정보를 제공하는 데 목적이 있는 일종의 정보 파일
저장되는 정보는 3가지
1. 디바이스 타입 정보 : 디바이스가 문자인지 블록인지 구별
2. 주 번호 : 응용 프로그램과 디바이스 드라이버를 연결하는 고리
3. 부 번호 : 실질적인 디바이스를 가리킴
응용 프로그램이 open() 함수로 디바이스 파일을 열면 커널은 해당 디바이스 파일에서 주 번호를 얻고, 이 주 번호에 의해 처리하는 디바이스 드라이버를 찾음
디바이스 드라이버의 종류 3가지
1. 문자 디바이스 드라이버
open(), close(), read(), write()와 같은 파일 처리용 함수를 이용하여 디바이스 파일을 처리
파일 포인터를 이용해 디바이스 파일에 특정 처리 위치를 지정할 수도 있고 디바이스의 처리 위치를 읽어올 수도 있음
2. 블록 디바이스 드라이버
파일 시스템을 지원하는 구조라서 응용 프로그램이 파일 시스템을 통해 접근함
커널 내부 버퍼를 이용하여 처리
하드웨어가 블록 단위의 처리를 필요로 함 (보통 1KByte)
스트림 처리도 가능
3. 네트워크 디바이스 드라이버
응용 프로그램에서 직접적으로 처리할 수 없음
커널 내부에 있는 네트워크 프로토콜 스택과 연동하도록 설계되어 있음
'임베디드 > Linux BSP' 카테고리의 다른 글
| 디바이스 드라이버 제어 방식 (0) | 2024.03.07 |
|---|---|
| 디바이스 파일 (0) | 2024.03.06 |
| NFS 파일 공유 시스템 (1) | 2024.02.06 |
| 크로스 컴파일러 (0) | 2024.02.05 |
| Linux SMB (samba) (1) | 2024.02.04 |