디바이스 드라이버 기본

EEEFFEE·2024년 1월 3일
0

임베디드 리눅스

목록 보기
3/14

24.01.03 최초 작성

1. 기본

  • Memory mapped I/O : 메모리에 디바이스마다 주소 영역을 할당 해 해당 주소에 접근해 디바이스를 조작함

  • Interrupt : 외부로부터 HW의 변화를 감지해 SW에 알리고 SW는 실행하는 작업을 중단하고 정해진 루틴을 수행함

디바이드 드라이버의 기본 구조

  • Top half

    • 인터럽트 컨텍스트에서 동작
    • sleep, mutex등 호출 불가
  • Bottom half

    • 커널 스레드 컨텍스트에서 동작
    • sleep, mutex등 호출 가능

디바이스 드라이버 모델

  • Bus controller driver

    • 다른 칩과 통신 할 때 사용하는 버스를 조작
    • /sys/bus에 관련 파일 존재
    • I2C, SPI, USB, PCI
  • Bus subsystem

    • 각 SOC 회사마다 다른Bus controller driver를 표준화하는 계층
    • I2C, SPI, USB, PCI를 API로 정리해 Device driver에서 호출하도록 함
  • Device driver

    • HW의 기능을 추상화 해 kernel과 연결
    • /sys/devices에 관련 파일들 존재
  • Framework

    • 디바이스 드라이버를 호출하는 표준 인터페이스
    • /sys/class에 관련 파일 존재
    • GPIO, Character, V4L2, Input

User space interface I/O

  • Block device
    • 저장장치를 다룰 때 사용
    • read, write를 통해 block단위의 I/O 수행
  • Character device
    • 파일 입출력으로 HW를 다룸
    • byte 스트림을 통해 read, write

디바이스 드라이버 관련 파일

  • Serial : /dev/ttyS*, /dev/ttyUSB*, /dev/ACM*

  • GPIO : /dev/gpiochipX

  • Block devices : /dev/sd*, /dev/mmcblk*, /dev/nvme*

  • Display controllers and GPU : /dev/dri/*

  • Audio : /dev/snd/*

  • Camera : /dev/video*

  • Watchog : /dev/watchdog

  • Input : /dev/input/*

커널 모듈

  • 필요할 때 마다 모듈을 로드해 커널 이미지를 줄일 수 있음

  • 필요한 부분만 빌드/수정/배포가 가능 생산성을 향상 가능

  • lib/modules/$(uname -r)*.ko파일 형태로 모듈 존재

관련 명령어

insmodrmmodlsmod
모듈 로드모듈 언로드현재 로드되어 있는 모듈 확인
(proc/modules의 내용 출력)
  • 위 명령어는 의존성 문재 존재

  • modprobe
    • 모듈을 로딩하는 명령어
    • module.dep에 저장된 의존성 정보를 바탕으로 관련 모듈들 모두 로드
    • -r옵션을 통해 제거 가능

EXPORT_SYMBOL

  • 커널 모듈의 함수를 외부 모듈에서 호출하도록 설정하는 매크로

  • EXPORT_SYMBOL(함수) : 지정한 함수를 설정

  • EXPORT_SYMBOL_GPL(함수) : GPL 모듈만 설정

0개의 댓글

관련 채용 정보