읽는 지도
Zephyr는 작은 RTOS지만 단순한 super-loop가 아닙니다. kernel object, scheduler, interrupt, workqueue, device model, devicetree, Kconfig, west workspace가 서로 맞물려 하나의 firmware image를 만듭니다. 그래서 한 파일을 외우는 방식보다 "빌드 시점에 결정되는 것"과 "런타임에 상태가 바뀌는 것"을 나눠서 읽어야 합니다.
Kernelthread, scheduler, IRQ, timer
BuildKconfig, CMake, west, generated files
Hardwaredevicetree, board, pinctrl, driver
RuntimeIPC, workqueue, network, power
Debugmap, .config, zephyr.dts, logs
각 글은 이 네 축 중 하나만 보지 않고, 빌드 산출물이 런타임 상태로 바뀌는 지점을 코드와 그림으로 같이 표시합니다.
버전 기준
Zephyr 공식 release 문서 기준으로 최신 stable은 별도로 존재하지만, 현재 장기 지원 대상은 Zephyr 3.7.0 LTS3입니다. 이 시리즈는 제품 branch와 장기 유지보수를 염두에 두고 LTS3를 기준으로 씁니다.
토픽 목록
Kernel
Kernel Architecture
부팅 직후 z_cstart(), init level, iterable section, kernel object가 어떤 순서로 살아나는지 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Kernel
Thread / Scheduler
k_thread, stack object, ready queue, cooperative/preemptive priority, timeout이 scheduler 결정에 들어가는 길을 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Kernel
Interrupt / Exception
IRQ_CONNECT, irq_enable, ISR context, nested interrupt, deferred work의 경계를 실제 코드 흐름으로 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Kernel
Memory Management
stack, heap, mem_slab, mem_pool, memory domain, MPU/userspace가 작은 RTOS RAM에서 어떤 ownership model을 만드는지 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Device / Board
Device Model
DEVICE_DT_DEFINE 계열 macro, config/data 분리, API vtable, init level, device_is_ready의 의미를 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Device / Board
Driver Model
DT_INST_FOREACH_STATUS_OKAY, DEVICE_DT_INST_DEFINE, compatible binding이 driver instance를 찍어내는 과정을 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Device / Board
Devicetree
dts, overlay, binding yaml, generated header, ordinal, DEVICE_DT_GET이 하나의 빌드 파이프라인으로 이어지는 과정을 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Build / Config
Kconfig
symbol, default, select, imply, depends on, prj.conf, board defconfig가 최종 .config로 수렴하는 과정을 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Build / Config
Build System / west
west workspace, manifest, modules, CMake, generated files, build directory가 어떻게 Zephyr app 하나를 만드는지 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Runtime Services
IPC / Synchronization
semaphore, mutex, queue, msgq, event, poll이 wait queue와 timeout으로 어떻게 수렴하는지 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Runtime Services
Timer / Workqueue
k_timer, timeout queue, delayed work, system workqueue가 interrupt와 thread 사이의 완충층이 되는 과정을 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Runtime Services
Networking
net_if, net_pkt, net_buf, L2 driver, socket API가 작은 RTOS 안에서 buffer ownership과 thread priority 문제로 만나는 과정을 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.
Device / Board
Board Porting
board.yml, board DTS, defconfig, runner, pinctrl, flash/debug 설정이 하나의 board target으로 묶이는 과정을 읽는다. 원본 코드 좌표와 실제 사용 패턴을 함께 넣은 긴 글입니다.