24.01.03 최초 작성
Memory mapped I/O : 메모리에 디바이스마다 주소 영역을 할당 해 해당 주소에 접근해 디바이스를 조작함
Interrupt : 외부로부터 HW의 변화를 감지해 SW에 알리고 SW는 실행하는 작업을 중단하고 정해진 루틴을 수행함
Top half
Bottom half
Bus controller driver
/sys/bus에 관련 파일 존재I2C, SPI, USB, PCIBus subsystem
Bus controller driver를 표준화하는 계층I2C, SPI, USB, PCI를 API로 정리해 Device driver에서 호출하도록 함Device driver
kernel과 연결/sys/devices에 관련 파일들 존재Framework
/sys/class에 관련 파일 존재GPIO, Character, V4L2, InputBlock deviceread, write를 통해 block단위의 I/O 수행Character deviceread, writeSerial : /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 모듈만 설정