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

노트 / 임베디드 리눅스

사용자 공간 I/O: 앱에서 하드웨어 다루기

드라이버를 직접 만들지 않고 /dev, sysfs, ioctl, libgpiod로 GPIO, I2C, SPI, UART를 다루는 방법.

GROUND EMBEDDED · 정리 노트임베디드 리눅스 06사용자 공간 I/O 1from smbus2 import SMBus 2with SMBus(1) as bus: 3 raw = bus.read_i2c_block_data(0x68,…

장치별 방법

장치 인터페이스 도구 / 라이브러리
GPIO /dev/gpiochipN (문자 장치) libgpiod, gpioset, gpioget
I2C /dev/i2c-N i2cdetect, i2cget, ioctl(I2C_RDWR)
SPI /dev/spidevX.Y spidev ioctl
UART /dev/ttyS, /dev/ttyUSB termios
PWM /sys/class/pwm/ sysfs
ADC /sys/bus/iio/devices/ IIO

예전 /sys/class/gpio 인터페이스는 폐기되는 중이라 새 코드는 libgpiod를 씁니다.

I2C 읽기 예 (Python)

from smbus2 import SMBus
with SMBus(1) as bus:
    raw = bus.read_i2c_block_data(0x68, 0x3B, 6)   # MPU6050 가속도

언제 사용자 공간, 언제 드라이버

사용자 공간이 좋을 때 드라이버가 필요할 때
프로토타입, 느린 센서 µs 단위 응답, 높은 인터럽트 빈도
개발 속도가 중요 여러 프로그램이 공유
커널 서브시스템(네트워크, 입력 장치)에 통합

실시간성 주의

리눅스 사용자 프로그램은 스케줄러가 언제든 멈출 수 있어 수 ms 지터가 생깁니다. 정밀한 PWM이나 모터 제어는 MCU에 맡기고 리눅스는 상위 판단과 통신을 맡기는 구성이 흔합니다.