임베디드/[ Linux Kernel ]

[ Linux Kernel ] 20. Linux Device Driver

kim.svadoz 2020. 10. 28. 17:07
반응형

20. Device Driver


Device

  • 네트워크 어댑터, LCD 디스플레이, 오디오, 터미널, 티보드, 하드디스트, 플로피디스크, 프린터 등과 같은 주변 장치들을 말함
  • 디바이스 구동에 필요한 프로그램, 즉 디바이스 드라이버가 필수적으료 요구됨

Device Driver

  • 실제 장치 부분을 추상화시켜 사용자 프로그램이 정형화된 인터페이스를 통해 디바이스를 접근할 수 있도록 해주는 프로그램
  • 디바이스 관리에 필요한 정형화된 인터페이스 구현에 요구되는 함수와 자료구조의 집합체
  • 표준적으로 동일 서비스 제공을 목적으로 커널의 일부분으로 내장
  • 응용 프로그램이 하드웨어를 제어할 수 있도록 인터페이스 제공
  • 하드웨어 독립적인 프로그램을 작성할 수 있도록 함.

24.1 리눅스 디바이스 드라이버

- 사용자 관점에서의 디바이스 드라이버

  • 사용자는 디바이스 자체에 대한 정보를 알 필요 없음.
  • device는 하나의 파일로 인식됨
  • 파일에 대한 접근을 통하여 real device에 접근 가능함

image-20201028135315115

- 리눅스에서의 디바이스

  • 리눅스에서 디바이스는 특별한 파일로 취급되고, 액세스가 가능함. 사용자(응용 프로그램)은 file operation을 적용할 수 있다.
  • 각 디바이스는 Major NumberMinor number를 가진다.
    • Major Number : 디바이스 장치 구분
    • Minor Number : 같은 종류의 디바이스들을 구분

24.2 디바이스 드라이버의 종류

image-20201028135434082

 

image-20201028135447261

- 문자 디바이스

Char Device

  • 자료의 순차성을 지닌 장치
  • 버퍼 캐쉬를 사용하지 않음
  • 장치의 raw data를 사용자에게 제공
  • Terminal, Serial/Parallel, Keyboard, Sound Card, Scanner, Printer 등

리눅스에서의 문자 디바이스

image-20201028135633869

맨앞 c => 파일 관련 정보 중 첫 문자인 c는 char device를 의미한다.

- 블록 디바이스

Block Device

  • random access 가능
  • 블록 단위의 입출력이 가능한 장치
  • 버퍼 캐쉬에 의한 내부 장치 표현
  • 파일 시스템에 의해 mount 되어 관리되는 장치
  • 디스크, RAM Dis, CD-ROM 등

image-20201028135759397

마찬가지로 파일 관련 정보 중 첫 문자이는 b는 block device를 의미한다.

- 네트워크 디바이스

Network Device

  • 대응하는 장치파일이 없음
  • 네트워크 통신을 통해 패킷을 송수신 할 수 있는 장치
  • 응용프로그램과의 통신은 표준 파일 시스템 관련 호출 대신에 socket()이나 bind()등의 시스템 호출
  • Ethernet, PPP, ATM, ISDN 등이 있다.

24.3 디바이스 드라이버의 Major & Minor Number

Major Number(주 번호)

  • 커널에서 디바이스 드라이버를 구분/연겨랗는데 사용
  • 같은 디바이스 종류를 지칭. 1Byte (0~255 사이의 값)

Minor Number(부 번호)

  • 디바이스 드라이버 내에 장치를 구분하기 위해 사용
  • 각 디바이스의 부가적인 정보를 나타냄. 2Byte(부번호)
  • 하나의 디바이스 드라이버가 여러 개의 디바이스 제어 가능

ex) ls -al /dev/sdb

image-20201028140243569

24.4 디바이스 드라이버 구조

리눅스 시스템 구조 상의 디바이스 드라이버는 아래와 같다.

image-20201028140326578

위의 Kernel area 쪽을 보면 디바이스 인터페이스 위에 디바이스 드라이버들이 있다. 문자 디바이스 드라이버는 버퍼캐시를 사용하지 않기 때문에 (그래서 나중에 ioremap_nocache함수를 사용함) 실습에서 많이 사용한다.

반응형