이 영역을 누르면 첫 페이지로 이동
butter_shower 블로그의 첫 페이지로 이동

butter_shower

페이지 맨 위로 올라가기

butter_shower

리눅스 디바이스 드라이버 프로그래밍(1) - 디바이스 드라이버 개요, 디바이스 드라이버 종류

  • 2019.06.12 21:05
  • Computer Engineering/임베디드 시스템
글 작성자: _rian

Device와 Device Driver

Device

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

Device Driver

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

리눅스 디바이스 드라이버

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

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

리눅스에서의 디바이스

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

디바이스 드라이버의 종류

디바이스 드라이버

Device Driver 종류 설명 등록 함수명
문자 드라이버 (char) device를 파일처럼 접근하여 직접 read/write 수행
data 형태는 stream 방식으로 전송
(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) network의 물리계층과 frame 단위의 데이터 송수신
(ex) Ethernet device driver
register_netdev()

문자 디바이스 (Char Device)

문자 디바이스의 특징

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

문자 디바이스는 내가 수업시간에 사용한 것 중 가장 많이 사용한 디바이스 드라이버다.. 앞으로 관련 예제를 포스팅 할 예정이다

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

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

블록 디바이스 (Block Device)

블록 디바이스의 특징

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

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

네트워크 디바이스 (Network Device)

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

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

Major Number (주번호)

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

Minor Number (부번호)

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

(예) ls -al /dev/hda*


디바이스 드라이버 구조

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

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

'Computer Engineering > 임베디드 시스템' 카테고리의 다른 글

리눅스 디바이스 드라이버 프로그래밍(3) - 7segment led 예제 fpga에 적용시켜보기  (0) 2019.06.13
리눅스 디바이스 드라이버 프로그래밍(2) - 모듈 프로그래밍  (0) 2019.06.12
임베디드 리눅스 커널 프로그래밍(3) - 시스템 호출 함수 구현  (0) 2019.06.12
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수  (0) 2019.06.11
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항  (2) 2019.06.11

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 리눅스 디바이스 드라이버 프로그래밍(3) - 7segment led 예제 fpga에 적용시켜보기

    리눅스 디바이스 드라이버 프로그래밍(3) - 7segment led 예제 fpga에 적용시켜보기

    2019.06.13
  • 리눅스 디바이스 드라이버 프로그래밍(2) - 모듈 프로그래밍

    리눅스 디바이스 드라이버 프로그래밍(2) - 모듈 프로그래밍

    2019.06.12
  • 임베디드 리눅스 커널 프로그래밍(3) - 시스템 호출 함수 구현

    임베디드 리눅스 커널 프로그래밍(3) - 시스템 호출 함수 구현

    2019.06.12
  • 임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수

    임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수

    2019.06.11
다른 글 더 둘러보기

정보

butter_shower 블로그의 첫 페이지로 이동

butter_shower

  • butter_shower의 첫 페이지로 이동

검색

메뉴

  • All Categories
  • About Me
  • Guest Book

카테고리

  • 전체보기 (223)
    • 💫 주인장 이야기 (17)
    • 🌱 와글와글뻘글 (27)
    • IT Trends (11)
    • 주인장 일상 (0)
    • 📒 내 마음대로 독서 서평 (12)
    • 머신러닝 꿈나무 (30)
      • 기본 개념 (6)
      • Hands-on! (5)
      • Paper Review (5)
      • 캐린이의 Kaggle (1)
    • 알고리즘 Algorithm (33)
      • PS (8)
    • Computer Engineering (75)
      • Python (8)
      • Cloud Computing (9)
      • C (9)
      • C++ (0)
      • Java (6)
      • Django 장고 (4)
      • 임베디드 시스템 (10)
      • 병렬 처리(Parallel Processing) (9)
      • 데이터 통신 Data communication (4)
      • 유닉스 시스템 (Unix System) (3)
      • GitHub (1)
      • 마이크로 프로세서 (micro processor) (1)
      • 데이터 마이닝 (1)
    • Error Note 🚨 (3)
    • 영어 공부 (6)
      • Live Academy (6)
    • HOBBY (2)
      • Film Log (2)

최근 글

정보

_rian의 butter_shower

butter_shower

_rian

나의 외부 링크

  • Github
  • Facebook
  • Instagram
  • LinkedIn
  • Twitter

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © _rian. Designed by Fraccino.

티스토리툴바