일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 포맷
- SD카드
- 젠킨스 파이프라인
- 소켓
- socket
- 리눅스
- Jenkins
- 라즈베리파이 에러
- 소켓 프로그래밍
- scheduler
- spring cloud eureka
- 우분투
- 젠킨스
- i/o scheduling
- 네트워크
- spring eureka
- pthread_join()
- MSA
- position independent code
- jenkins pipeline
- pthread_create()
- OS
- linux
- 스케줄러
- Spring cloud
- eureka
- 라즈베리파이
- i/o schduler
- 스케줄링
- scheduling
- Today
- Total
dayne의 블로그
리눅스 디바이스 드라이버의 종류 및 확인 본문
목차
1. 디바이스 드라이버의 정의
2. 디바이스 드라이버의 종류
3. 디바이스 드라이버 확인 방법
1.디바이스 드라이버 정의
디바이스 드라이버는 커널 모드에서 실행되는 프로그램으로, '하드웨어 장치'와 '응용 프로그램 및 운영 체제' 간의 통신을 담당하는 소프트웨어 구성요소입니다.
드라이버는 하드웨어 장치의 동작을 제어하고, 장치가 제공하는 기능을 운영 체제 및 응용 프로그램에서 활용할 수 있도록 정형화된 인터페이스를 제공합니다.
리눅스 커널은 다양한 하드웨어를 지원하기 위해 여러 종류의 디바이스 드라이버를 포함하고 있으며, 필요에 따라 런타임 시에 추가적인 드라이버를 모듈 형태로 로드하는 것이 가능합니다.
이러한 모듈 방식을 통해 Linux 드라이버를 보다 쉽게 작성하고 유지할 수 있게 됩니다.
표준적으로 동일한 서비스를 제공하기 위해 커널의 일부분으로 내장되어 있고, 하드웨어 독립적인 프로그램을 작성하는 것이 가능합니다.
아래는 디바이스 드라이버의 주요 역할입니다.
- 하드웨어 제어 및 관리:
- 디바이스 드라이버는 특정 하드웨어 장치를 초기화하고, 동작을 제어하며, 장치와의 데이터 전송을 관리합니다.
- 예를 들어, 네트워크 카드 드라이버는 데이터 패킷의 송수신을 관리하고, 그래픽 드라이버는 화면에 그래픽을 출력하는 역할을 합니다.
- 운영 체제와 하드웨어 간의 '추상화 계층' 제공:
- 드라이버는 하드웨어의 세부 사항을 추상화하여, 운영 체제와 응용 프로그램이 하드웨어의 복잡성을 신경 쓰지 않고도 장치를 사용할 수 있게 합니다.
- 예를 들어, 파일 시스템 드라이버는 다양한 저장 장치를 동일한 인터페이스로 접근할 수 있도록 합니다.
- 사용자 응용 프로그램이 하드웨어에 직접 접근하는 것은 많은 위험성이 존재하는데, 장치 드라이버가 '응용 프로그램의 호출이 실제 하드웨어에서 작동 가능하도록' 장치별로 매핑해줍니다.
- 응용 프로그램이 하드웨어에 직접 접근할 경우, 장치의 내부 동작에 대한 이해 부족으로 하드웨어에 잘못된 명령이나 데이터 접근을 할 때, 이에 대한 필터링이 이뤄지지 않게 됩니다. 이로 인해 시스템의 충돌 또는 하드웨어의 일관성 문제가 발생할 수 있습니다.
2. 디바이스 드라이버의 종류
2.1 디바이스 종류
문자 디바이스 (Character Device)
- 특징
- 자료의 순차성을 지닌 장치
- 버퍼 캐쉬를 사용하지 않음
- 장치의 raw data를 사용자에게 제공
- 버퍼링이 적거나 없으며, 실시간 데이터 전송에 적합
- Terminal, Serial/Parallel, Keyboard, Sound Card, Scanner, Printer 등
- /dev/tty, /dev/null, /dev/random 등이 대표적
- cd /dev 를 통해 dev 디렉토리로 이동한 후, ls -l 명령어를 입력하였을 때, 맨 앞이 'c'인 것은 char device을 의미합니다.
crw--w---- 1 root tty 5, 1 Oct 15 09:13 console
※ 여기서 5는 Major Number(주번호), 1은 Minor Number(부번호)
- 주번호
- 커널에서 디바이스 드라이버를 구분 / 연결하는데 사용
- 부번호
- 디바이스 드라이버 내에 장치를 구별하기 위해 사용
- 하나의 디바이스 드라이버가 여러 개의 디바이스 제어 가능
블록 디바이스 (Block Device)
- 특징
- random access 가능
- 블록 단위의 입출력이 가능한 장치
- 버퍼 캐쉬에 의한 내부 장치 표현
- 디스크, RAM Disk, CD-ROM등
- /dev/sda, /dev/sdb 등이 대표적으로 파일 시스템에 의해 mount 되어 관리되는 장치
- cd /dev 를 통해 dev 디렉토리로 이동한 후, ls -l 명령어를 입력하였을 때, 맨 앞이 'b'인 것은 block device을 의미합니다.
brw-rw---- 1 root disk 179, 0 Sep 11 23:34 mmcblk0
네트워크 디바이스 (Network Device)
- 특징
- 대응하는 장치 파일이 없음
- 네트워크 통신을 통해 패킷을 송수신 할 수 있는 장치
- 응용 프로그램과의 통신은 표준 파일 시스템 관련 호출 대신에 socket()이나 bind() 등의 시스템 호출
- Ethernet, PPP, ATM, ISDN 등이 있다
2.2 디바이스 드라이버 종류
문자 드라이버 (char)
- 문자 드라이버는 데이터를 연속적인 스트림(문자 단위)으로 처리하는 드라이버입니다.
- device를 파일처럼 접근하여 직접 read/write 수행합니다.
- ex) console, keybord, serial port driver 등
- 등록 함수 명 : register_chrdev()
블록 드라이버 (block)
- 블록 디스크는 데이터를 고정된 크기의 블록 단위로 처리하는 드라이버입니다.
- disk와 같은 file system을 기반으로 block 단위로 데이터를 read/ write 합니다.
- ex) hard disk, CD-ROM driver, floppy disk
- 등록 함수 명 : register_blkdev()
네트워크 드라이버 (network)
- 네트워크 드라이버는 네트워크 인터페이스 카드(NIC)와 같은 네트워크 장치를 제어하는 드라이버입니다.
- network의 물리계층과 frame 단위의 데이터 송수신을 수행합니다.
- ex) Ethernet device driver
- 등록 함수 명 : register_netdev()
2.3 /dev 디렉토리의 디바이스 파일과 디바이스 드라이버의 관계
상호작용 방식
- 하드웨어 장치 연결:
- 하드웨어 장치가 시스템에 연결되면, 해당 장치를 감지하고 적절한 디바이스 파일을 /dev 디렉토리에 생성합니다.
- 디바이스 파일과 드라이버 연결:
- 생성된 디바이스 파일은 해당 하드웨어 장치를 제어하는 디바이스 드라이버와 연결됩니다. 이 연결은 주로 커널이 관리하며, 디바이스 파일을 통해 들어오는 시스템 호출은 해당 드라이버로 전달됩니다.
- 응용 프로그램과의 통신:
- 사용자 응용 프로그램은 /dev에 있는 디바이스 파일을 통해 하드웨어 장치와 상호작용합니다. 예를 들어, 파일을 읽거나 쓰는 시스템 호출을 통해 드라이버에 명령을 전달하게 됩니다.
3. 디바이스 드라이버 확인 방법
디바이스 드라이버는 리눅스 커널 내부에 존재하며, ' /lib/modules/$(uname -r)/kernel/drivers/ ' 경로 아래에 위치한 커널 모듈 형태로 존재합니다.
리눅스에서는 명령어를 사용하여 디바이스 드라이버를 확인할 수 있습니다.
- lsmod : 현재 로드된 커널 모듈(드라이버)을 목록으로 보여줍니다.
lsmod
- modinfo <모듈 이름> : 특정 커널 모듈에 대한 상세 정보를 확인합니다.
modinfo <모듈 이름>
3.1 디바이스 파일과 연결된 디바이스 드라이버 찾기
'/sys' 파일 시스템을 활용해 특정 디바이스 드라이버가 어떤 디바이스 파일과 연결되어있는지 확인할 수 있습니다.
리눅스의 /sys 파일 시스템은 하드웨어 장치와 드라이버 간의 관계를 상세하게 보여줍니다.
/dev/input/mouse0 디바이스 파일과 연결된 디바이스 드라이버를 찾는 과정을 예로 들어 설명하겠습니다.
1. mouse0에 대한 디바이스 정보의 경로를 /sys 파일 하위에서 확인합니다.
/sys/class/input/mouse0/device/device/driver
2. 위에서 찾은 경로를 사용해서, readlink -f 명령어를 통해 mouse0 디바이스 파일과 연결된 디바이스 드라이버를 출력합니다.
- 입력해야 할 명령어
readlink -f /sys/class/input/mouse0/device/device/driver
- 출력 결과
/sys/bus/hid/drivers/hid-generic
위의 출력 결과로 보았을 때, mouse0 디바이스 파일과 연결된 디바이스 드라이버는 'hid-generic' 임을 확인할 수 있습니다.
해당 디바이스 드라이버(모듈)의 자세한 정보(파일 위치 경로, licence, ...)를 확인하고자 할 때는, 'modinfo <모듈 이름>' 명령어를 입력하면 됩니다.
참고
https://coding-chobo.tistory.com/62
리눅스 디바이스 드라이버
커널의 역할 및 구조 커널의 역할 모든 운영 체제에서 커널은 소프트웨어의 입ㆍ출력 요청을 관리하고 CPU 및 기타 장치에 대한 데이터 처리 명령으로 변환하는 프로그램입니다. 커널은 프로세
coding-chobo.tistory.com
https://butter-shower.tistory.com/29
리눅스 디바이스 드라이버 프로그래밍(1) - 디바이스 드라이버 개요, 디바이스 드라이버 종류
Device와 Device Driver Device 네트워크 어댑터, LCD 디스플레이, 오디오, 터미널, 키보드, 하드디스크, 플로피디스크, 프린터 등과 같은 주변 장치들을 말함. 디바이스의 구동에 필요한 프로그램, 즉 디
butter-shower.tistory.com
'시스템 프로그래밍 > 리눅스' 카테고리의 다른 글
리눅스 라이브러리 종류 및 설명 (0) | 2024.10.18 |
---|---|
리눅스 모듈 종류 및 모듈 적용 방법 (0) | 2024.10.14 |
리눅스 커널 컴파일 방법 (0) | 2024.10.11 |
리눅스 I/O 스케줄러 종류 및 동작 과정 (0) | 2024.10.10 |
리눅스 프로세스 스케줄링, 프로세스 스케줄러의 종류 및 동작 방식 (0) | 2024.10.10 |