그라운드 임베디드 EN 유튜브 구독

노트 / 임베디드 리눅스

디바이스 드라이버: 커널 모듈 만들기

커널 안에서 하드웨어를 다루는 코드. 가장 단순한 모듈부터 플랫폼 드라이버, I2C 드라이버의 구조까지.

GROUND EMBEDDED · 정리 노트임베디드 리눅스 05디바이스 드라이버 1#include <linux/module.h> 2static int __init hello_init(void) { pr… 3static void __exit hello_exit(void) { p… 4module_init(hello_init);

가장 단순한 커널 모듈

#include <linux/module.h>
static int __init hello_init(void) { pr_info("hello\n"); return 0; }
static void __exit hello_exit(void) { pr_info("bye\n"); }
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

insmod hello.ko로 올리고 dmesg로 확인, rmmod hello로 내립니다.

드라이버 모델

앱read(), write()시스템 콜커널드라이버하드웨어
앱의 요청이 하드웨어에 닿는 길.
개념 의미
버스 platform, i2c, spi, usb
디바이스 디바이스 트리에 적힌 장치
드라이버 compatible이 맞으면 probe()가 호출됨

I2C 센서 드라이버라면 probe()에서 레지스터를 초기화하고, 사용자 공간에 값을 보여 줄 인터페이스(sysfs 속성, IIO, hwmon, 문자 장치)를 만듭니다.

무료 전자책이 주제를 한 권으로 이어 읽기 (PDF 3권)→

MCU 코드와의 차이

  • 커널에서 크래시는 보드 전체가 죽습니다(커널 패닉).
  • 부동소수점 사용 제한, 스택이 작음(수 KB)
  • 레지스터 접근은 ioremap과 readl/writel, I2C는 i2c_smbus_read_byte_data 같은 서브시스템 API
  • 인터럽트 처리는 위(빠른 처리)와 아래(스레드, 작업 큐)로 나눔

먼저 찾아보기

대부분의 흔한 칩은 이미 메인라인 커널에 드라이버가 있습니다. 디바이스 트리만 맞게 쓰면 되는 경우가 많습니다.

영상으로 이어 보기제품은 어떻게 동작할까 시리즈 8편하늘 위 떠다니는 드론은 어떻게 동작할까? 프로펠러 4개로 뜨고 기우는 원리부터 비행 제어기 · PID · 센서 퓨전까지FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →