🖥️Embeded System: 특정한 기능을 수행하도록 설계된 전용 컴퓨터 시스템
scull driver(Simple Character Utility for Loading Localities)는 문자 기반 드라이버로, Linux 커널에서 드라이버 개발 및 커널 모듈 프로그래밍을 교육용으로 사용되거나 디버깅 용도로 활용됨.- 메모리에 데이터를 저장하거나 가져오는 작은 고립된 블록을 통해 가상의 문자 디바이스를 만듦.
- 가상의 문자 디바이스를 통해 사용자 공간 프로세스와 커널 간의 데이터 송수신을 수행.
이 프로젝트의 최종 목표는 SCULL 드라이버를 개발하고, Linux 셸 명령어와 사용자 애플리케이션을 통해 드라이버에 데이터를 읽고 쓰는 과정을 확인하며 드라이버의 동작 원리를 이해하는 것.
- 사용 언어: C
- 운영 체제: Ubuntu 22.04
- 가상화 툴: VirtualBox 7.0
| 파일명 | 설명 |
|---|---|
fops |
디바이스 파일의 동작(예: 읽기, 쓰기)을 정의하며, 사용자 요청을 처리함. |
main.c |
드라이버의 초기화 및 종료 로직을 담당하며, 커널에 드라이버를 등록함. |
project1.c |
scull0 디바이스의 open, write, read, close 동작을 구현함. |
- User Application에서 파일 입출력 함수 사용 시
SWI(Software Interrupt)가 실행됨. - SWI Handler가 File System에 접근하고, 해당 Device Driver를 통해 요청을 처리함.
- Block Device
- 데이터를 한 번 읽을 때 큰 Block 단위로 가져오며, 추가 데이터를 버퍼에 저장함.
- 대량의 데이터를 처리할 수 있고, 데이터는 Block Size 단위로 캐싱됨.
- (사용 예: HDD, SSD 등)
- Character Device
- 데이터를 문자 단위로 읽고 쓰며, 순차적으로 처리함.
- (사용 예: 터미널, 마우스, 키보드, 프린터 등)
- MAJOR# / MINOR#
MAJOR#: 디바이스 드라이버의 고유 식별 번호MINOR#: 해당MAJOR#내에서 특정 디바이스를 나타냄.
- 커널의 동작 방식
- 특정 디바이스 파일이 열릴 때, 해당
file_operations구조체에서 인스턴스를 찾아 사용함.
- 특정 디바이스 파일이 열릴 때, 해당
📜 설명 보기
make는Makefile을 읽어 빌드 프로세스를 자동화함.- 커널 빌드 시스템을 호출하여 캐릭터 디바이스 모듈을 빌드함.
📜 설명 보기
- 디바이스 파일은 커널 모듈과 사용자 프로그램 간의 인터페이스 역할을 수행.
- 모듈 정보 정의 (Read/Write 권한 설정)
insmod를 사용하여scull.ko를 커널에 로드main.c의register_chdev를 통해 동적 MAJOR# 할당mknod를 이용하여/dev/scullN디바이스 파일 생성
kmalloc을 통한 동적 할당으로 메모리 효율성 증가- 양방향 연결 리스트를 이용하여 삽입/삭제 시 탐색 시간 단축
- Mutex를 활용하여 동시성 제어, 다중 프로세스 환경에서 데드락 방지






