24.01.03 최초 작성
Memory mapped I/O
: 메모리에 디바이스마다 주소 영역을 할당 해 해당 주소에 접근해 디바이스를 조작함
Interrupt
: 외부로부터 HW의 변화를 감지해 SW에 알리고 SW는 실행하는 작업을 중단하고 정해진 루틴을 수행함
Top half
Bottom half
Bus controller driver
/sys/bus
에 관련 파일 존재I2C
, SPI
, USB
, PCI
Bus subsystem
Bus controller driver
를 표준화하는 계층I2C
, SPI
, USB
, PCI
를 API로 정리해 Device driver
에서 호출하도록 함Device driver
kernel
과 연결/sys/devices
에 관련 파일들 존재Framework
/sys/class
에 관련 파일 존재GPIO
, Character
, V4L2
, Input
Block device
read
, write
를 통해 block단위의 I/O 수행Character device
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
파일 형태로 모듈 존재
insmod | rmmod | lsmod |
---|---|---|
모듈 로드 | 모듈 언로드 | 현재 로드되어 있는 모듈 확인 (proc/modules의 내용 출력) |
modprobe
module.dep
에 저장된 의존성 정보를 바탕으로 관련 모듈들 모두 로드-r
옵션을 통해 제거 가능커널 모듈의 함수를 외부 모듈에서 호출하도록 설정하는 매크로
EXPORT_SYMBOL(함수)
: 지정한 함수를 설정
EXPORT_SYMBOL_GPL(함수)
: GPL 모듈만 설정