Modern Embedded Recipes — 모던 임베디드 실전 레시피 시리즈 소개
HW interface 기초부터 ARM·빌드·드라이버·peripheral·RTOS·Linux·메모리·동시성·디버깅·FPGA·Edge AI까지 임베디드 12 Part 종합 cookbook 148편.
임베디드 — 하드웨어 인터페이스, RTOS, 프로토콜
HW interface 기초부터 ARM·빌드·드라이버·peripheral·RTOS·Linux·메모리·동시성·디버깅·FPGA·Edge AI까지 임베디드 12 Part 종합 cookbook 148편.
Voltage level·rise/fall time·noise margin·신호 무결성의 기본기.
PLL·jitter·skew·setup/hold time — 디지털 시스템의 모든 동작의 근간.
Push-pull·open-drain·pull-up/down·drive strength·slew rate.
Baud·framing·parity·FIFO·RS-232 레벨까지 UART 회로의 동작 원리.
MOSI/MISO/SCK/CS·CPOL/CPHA 4 모드·daisy-chain·high-speed signal 고려사항.
SDA/SCL·7/10-bit addressing·ACK/NACK·clock stretching·풀업 크기 선정.
Sampling·quantization·SAR vs sigma-delta·SNR·ENOB·aliasing.
R-2R·delta-sigma DAC·glitch energy·monotonicity.
Duty·frequency·dead-time·center-aligned·complementary 출력.
CAN_H/CAN_L 차동 신호·120Ω termination·1Mbit 한계.
Multi-drop·terminating·fail-safe biasing·노이즈 강한 환경.
고속 차동 신호 (LVDS·LVPECL·CML)·impedance matching.
M0/M0+/M3/M4/M7/M33/M55/M85 — 어느 코어를 언제 쓰나.
A53/A72/A78/Neoverse — 임베디드 Linux용 application 코어.
R0-R15·xPSR·CONTROL·PRIMASK·BASEPRI — register set 전체 지도.
NVIC·vector table·tail-chaining·late-arrival의 hardware 기반.
Code·SRAM·Peripheral·System 영역 — bitband·MPU 활용.
I-Cache/D-Cache·write-through vs write-back·invalidate/clean.
Region setup·attributes·fault analysis — 메모리 보호의 실전.
Page table·TLB·virtual address·Linux의 4-level paging.
Cortex-M33의 Secure/Non-Secure 분리·SAU/IDAU·NSC.
ARM memory barrier 실전. DMB/DSB/ISB 사용 시점. DMA·MMIO·self-modifying code.
arm-none-eabi-gcc/clang — 호스트와 타겟이 다른 컴파일러 체인.
Preprocess·compile·assemble·link — `-E -S -c` 분해.
Header·sections·symbols — `readelf`로 dissect.
MEMORY·SECTIONS·alignment·기본 layout.
LMA vs VMA·KEEP·AT>·overlay·custom section.
Reset_Handler·vector table·__libc_init_array·main 진입.
crt0·.data 복사·.bss 클리어·ctors·atexit.
Stack/heap/static — 누가 어디 사는가.
-O0/-O1/-O2/-O3/-Os/-Og — 옵션별 차이와 디버깅 가능성.
메모리 사용·심볼 위치·dead code 추적.
Embedded 빌드 시스템 — toolchain file·target_link_options.
Cortex-A 부팅 단계. BootROM → SPL → U-Boot → Linux. Secure boot, FIT image, A/B.
LED toggle — 최소한의 startup·main·loop.
volatile·MMIO·packed struct — peripheral register 다루기.
Mode/speed/pull/AF — STM32 기준 register-level driver.
HSE/HSI·PLL·peripheral clock enable — 코어/주변기기 클럭 트리.
NVIC 설정·ISR 작성·prologue/epilogue·priority.
1ms tick·delay·jiffies — RTOS 없이 시간 처리.
3가지 모드의 trade-off — CPU 사용량·latency·throughput.
Master/slave·CPOL/CPHA·DMA·multi-slave CS.
Master·repeated start·NACK 처리·timeout.
Channel·trigger·half/full complete·circular·memory-to-memory.
Sleep/Stop/Standby·wake-up source·전류 측정.
Independent vs Window·refresh 전략·debug 모드 freeze.
내부 erase/write·dual bank·EEPROM emulation.
DDR3/4 초기화 sequence. ZQ calibration, write leveling, walking bit test, JESD79 사양.
Timer로 PWM 생성·duty 변경·complementary 출력.
H-bridge·PWM·방향·역기전력 보호.
Full-step·half-step·micro-step·가속/감속 프로파일.
PWM-based 제어 (50Hz, 1~2ms duty)·각도 매핑.
4/8-bit 모드·command·custom character·timing 준수.
128×64 OLED·framebuffer·page mode·partial update.
Parallel RGB·framebuffer·LTDC·tearing 방지.
BME280·SHT3x — I2C·SPI 센서 driver 패턴.
MPU6050·BMI270 — sensor fusion 입력 단계.
Frame format·filter·bit timing·error frame.
CDC·HID class — STM32 USB stack 활용.
RMII·MDIO·lwIP raw API·DHCP·HTTP server.
SPI 모드 vs SDIO·FatFs port·long filename.
Battery backup·alarm·calendar·tamper.
Super-loop와 RTOS의 분기점, RAM/Flash 비용, 디버깅 복잡도, 결정 기준을 한 자리에 정리합니다.
Periodic, event-driven, state machine 세 가지 task 패턴과 priority 산정 기준을 정리합니다.
Preemptive와 cooperative, time-slice, context switch 비용, tickless idle까지 scheduler가 실제로 어떻게 도는지 정리합니다.
Binary semaphore signaling, counting semaphore resource pool, ISR-to-task wake-up 패턴을 정리합니다.
Mutex와 binary semaphore의 차이, priority inheritance, recursive lock, timeout, ownership 규칙을 정리합니다.
RTOS queue로 producer-consumer를 구성하고, by-value vs by-pointer, backpressure, zero-copy queue까지 정리합니다.
Event group bit, set/clear, AND/OR 조건 wait, broadcast로 다중 task synchronization을 정리합니다.
Software timer와 hardware timer의 분기점, one-shot/auto-reload, timer task context, delete 시 race를 정리합니다.
ISR 안전 함수 작성. Reentrant, atomic 변수, deferred work, FromISR variant.
Priority Inversion 발생 시나리오. Mars Pathfinder 사례. PI mutex, Priority Ceiling.
Timer wheel 자료구조. Hashed wheel·hierarchical wheel·O(1) tick·Linux jiffies.
Stack high-water mark, overflow hook, deadlock 탐지, heap 분석, trace 도구까지 RTOS 디버깅을 한 자리에 정리합니다.
BootROM, SPL, U-Boot, Kernel, Init까지 각 단계의 책임과 ATF/OP-TEE, initramfs, init 시스템 선택을 정리합니다.
U-Boot environment, script, bootcmd, TFTP/Fastboot, UEFI 모드까지 현장에서 쓰는 패턴을 정리합니다.
Device Tree Source 문법. DTC 컴파일. Overlay로 dynamic 변경. Linux driver match.
DT overlay의 fragment, target, symbol, dtoverlay 명령, Raspberry Pi 적용 예까지 동적 device 활성화를 정리합니다.
Kernel source, defconfig, menuconfig, cross-compile, module 빌드, deb/rpm 패키징까지 KBuild 전 과정을 정리합니다.
Linux kernel module의 진입점, 모듈 파라미터, KBuild Makefile, insmod 흐름, DKMS 배포까지 한 번에 정리합니다.
file_operations, cdev, minor 번호, copy_to/from_user, blocking I/O, misc device 단축 경로까지 character driver의 표준 패턴을 정리합니다.
platform_driver_register, of_match_table, probe/remove, devm_* 자원 관리, IRQ와 MMIO 획득까지 platform driver의 표준 패턴을 정리합니다.
mmap의 네 가지 사용 모드와 madvise·MAP_HUGETLB·mlock을 코드와 측정값으로 정리합니다.
select·poll의 한계와 epoll의 트리거 모드, ONESHOT·EXCLUSIVE 플래그를 코드와 성능으로 비교합니다.
UIO·VFIO로 user space에서 hardware를 다루는 방법, IOMMU 기반 DMA 안전성, DPDK·SPDK 사용 패턴을 정리합니다.
sysfs attribute, attribute group, configfs로 user space에서 driver를 제어하는 표준 패턴을 정리합니다.
IRQ를 코어에 고정하는 방법과 isolcpus·irqbalance·threaded IRQ의 상호작용을 측정과 함께 정리합니다.
Buildroot 설정, package 추가, post-build script, toolchain 선택, Yocto와의 trade-off를 정리합니다.
Malloc의 fragmentation과 비결정성, pool/arena/slab 대안, FreeRTOS heap_4/5와 정적 대안까지 임베디드의 메모리 전략을 정리합니다.
Natural alignment, struct padding 규칙, packed의 unaligned access penalty, offsetof와 alignof 사용을 정리합니다.
Cache line 정렬과 false sharing 회피, hot/cold 분리, SoA 변환을 코드와 측정으로 정리합니다.
DMA buffer 할당 패턴을 coherent와 streaming, CMA, IOMMU, MPU non-cacheable 영역으로 나눠 정리합니다.
Camera→GPU→Encoder→Network pipeline에서 memcpy를 모두 제거하는 패턴을 모았습니다.
NUMA node topology, numactl 운영, libnuma API, HBM/CXL tier, 자동차 ECU의 mini-NUMA까지 정리합니다.
Auto-vectorize, intrinsics, OpenMP SIMD pragma 세 갈래를 데이터 layout과 함께 정리합니다.
NEON 실전 사례를 matrix multiply, color conversion, box filter, Sobel, FFT, crypto로 묶어 정리합니다.
Stack 패턴 채우기로 high-water mark, overflow hook, canary, MPU guard region, RTOS task stack 분석을 한 자리에 정리합니다.
-Os, LTO, function-sections, --gc-sections, strip, newlib-nano, printf-tiny까지 펌웨어 binary 크기를 줄이는 단계별 기법을 정리합니다.
Active와 sleep, peripheral clock gating, DVFS, tickless idle, µA-level 측정까지 임베디드 전력 절감 기법을 정리합니다.
WCET와 ACET의 차이, 측정 기반과 static analysis, cache 영향, hard real-time 요구사항을 정리합니다.
SPSC ring 구현. Power-of-2 size, head/tail atomic, memory order release/acquire.
Wait-free 보장 patterns. Atomic flag, sequence number, latest-value (double buffer).
RCU 원리, rcu_read_lock, grace period, synchronize_rcu, 임베디드 적용(URCU)을 정리합니다.
Lock-free 메모리 회수, ABA 회피, RCU와의 비교, C++ proposal까지 hazard pointer의 원리와 구현을 정리합니다.
CAS loop, strong과 weak CAS, ABA 회피, exponential backoff, spurious failure까지 CAS 사용의 표준 패턴을 정리합니다.
memory_order별 ARM 명령어 차이, LSE vs LL/SC, hot spinning 회피까지 atomic 연산의 실측 비용을 정리합니다.
Lock hold time, 코어 수, preemption, real-time 요구사항에 따라 spinlock과 mutex를 어떻게 고를지 ticket lock과 MCS lock까지 함께 정리합니다.
ABA 시나리오, tagged pointer (64-bit + tag), version counter, hazard pointer 활용, 실제 사례를 정리합니다.
False sharing의 원리와 영향, perf c2c 감지, alignas(64) padding, per-CPU 변수, thread-local까지 해결 전략을 정리합니다.
MPMC와 SPSC 차이, Vyukov 큐, Disruptor의 ring과 sequence, bounded와 unbounded 비교를 실측과 함께 정리합니다.
가설-검증 사이클·binary search·changelog·rubber duck — 임베디드 디버깅의 사고 도구.
JTAG·SWD 디버깅 체크리스트. Pin·voltage·clock·daisy chain·security 잠금.
OpenOCD·pyOCD로 target에 붙고, .gdbinit으로 반복 작업을 자동화하는 패턴을 정리합니다.
Cortex-M HardFault 핸들러에서 stacked PC·LR·CFSR을 추출해 정확한 fault 위치를 찾는 절차를 정리합니다.
UART 디버깅. 클럭·핀·baud·로직 레벨·종단·인쇄 단계별 체크.
전원·reset·clock·vector table·main 진입까지 단계별로 isolation하는 부팅 디버깅 절차를 정리합니다.
NVIC pending·priority·level vs edge·shared IRQ — 인터럽트 동작 이상의 흔한 원인을 잡습니다.
Heap canary·MPU guard·data watchpoint·desktop ASan — 임베디드 메모리 오염을 잡는 도구를 정리합니다.
printf로 race가 사라지는 이유와 SWO/RTT·DWT 사이클 카운터·GPIO pulse로 non-intrusive하게 race를 가시화하는 방법.
Saleae·DSLogic·oscilloscope·protocol decoder로 UART/SPI/I2C/CAN 신호를 캡처·디코딩하는 실전 패턴.
임베디드 환경에서 overhead를 최소화한 로깅. 레벨 분리·circular buffer·SWO/RTT·deferred 처리 패턴.
Linux coredump·gdb 분석부터 MCU 환경의 mini-dump(Memfault)·last-gasp logging·field debug 패턴까지.
LUT·Flip-Flop·BRAM·DSP slice·clock region·IO bank — FPGA 구성 요소를 임베디드 관점에서 정리합니다.
Vivado project 흐름·XDC constraint·synthesis/implementation·timing report·bitstream programming의 실전 패턴.
PCIe BAR (Base Address Register), enumeration, sizing, MMIO 매핑, ioremap.
AMBA AXI4·AXI4-Lite·AXI-Stream을 역할별로 구분해 사용하는 법과 burst·outstanding·deadlock 회피를 정리합니다.
Zynq의 GP·HP·ACP·M_AXI·S_AXI 인터페이스를 latency·throughput·cache coherence 관점에서 비교합니다.
Host CPU와 FPGA·NPU·보조 CPU를 잇는 mailbox 프로토콜을 register layout, doorbell IRQ, sequence·CRC, OpenAMP 비교 관점에서 정리합니다.
Submission/Completion Queue 패턴을 NVMe·io_uring·Xilinx XDMA·Vulkan 사례로 묶어 정리합니다. Doorbell, phase bit, multi-queue 확장까지.
DMA가 끝났음을 알려주는 세 가지 방식을 비교합니다. Interrupt, polling, completion ring과 IRQ coalescing의 trade-off를 정리합니다.
PCIe로 streaming traffic을 다룰 때 알아야 할 BAR 종류, prefetchable 의미, MSI-X 분산, posted/non-posted 순서, kernel bypass 패턴을 정리합니다.
Vitis HLS로 C++ 코드를 RTL로 합성할 때 II=1을 끌어내는 pragma 조합, dataflow, AXI 인터페이스 결정을 실전 패턴 중심으로 정리합니다.
Vitis/Vivado HLS의 pragma로 II=1 pipeline·array partition·dataflow를 적용해 throughput을 극대화하는 패턴.
Xilinx Vitis AI로 TensorFlow/PyTorch 모델을 DPU용 xmodel로 quantize·compile하고 VART로 실행하는 흐름.
Intel/AMD FPGA에서 OpenCL kernel·channel·burst memory를 활용하는 패턴과 SYCL/oneAPI FPGA backend.
Intel Quartus Prime·Platform Designer(Qsys)·Nios II soft processor·Intel HLS·partial reconfig 사용법.
Edge inference가 cloud 대비 언제 답인지, MCU부터 server-class edge까지 하드웨어 스펙트럼과 프레임워크 선택, 3-stage pipeline 설계를 정리합니다.
Arm Ethos·Qualcomm Hexagon·Apple Neural Engine 등 NPU 내부 구조와 systolic MAC array·INT8·memory hierarchy.
FP32→INT8/INT4 양자화의 수식, PTQ와 QAT 차이, per-channel·per-tensor 선택, LLM용 GPTQ·AWQ까지 실전 패턴을 정리합니다.
NVIDIA TensorRT로 ONNX 모델을 engine으로 빌드하고 FP16·INT8·DLA·multi-stream으로 throughput을 끌어올리는 패턴을 정리합니다.
MCU용 TensorFlow Lite Micro의 구조, op resolver·tensor arena·CMSIS-NN integration·Ethos-U delegate.
ONNX format·ONNX Runtime의 Execution Provider (CUDA·TensorRT·DML·CoreML)·embedded build·cross-platform inference.
Edge AI 보드의 sustained 성능을 결정하는 thermal 한계. throttle trip, DVFS, fan curve, nvpmodel, passive cooling 설계를 정리합니다.
Jetson 라인업의 power·성능 trade-off, JetPack 구성, DLA·VPI·DeepStream을 묶어 자율주행·로봇 stack에서 쓰는 패턴을 정리합니다.
카메라부터 NPU·display까지 한 frame이 한 physical page를 유지하도록 V4L2·DMA-BUF·EGL·CUDA를 연결하는 패턴을 정리합니다.
4-bit 양자화된 LLM이 모바일·edge에서 동작하는 시대. llama.cpp/GGUF, Apple MLX, KV cache 메모리, 백엔드 선택을 정리합니다.
Cortex-M33+ TrustZone-M 위에 TF-M으로 secure firmware를 구성하는 패턴. SPE/NSPE, PSA Crypto/ITS/Attestation, MCUboot secure boot를 정리합니다.
Apple·Google·Amazon·Samsung이 공동으로 만든 Matter 1.3/1.4와 Thread 1.3 mesh를 합쳐 IoT device를 한 번에 모든 ecosystem에 등록하는 패턴을 정리합니다.
PCIe 5.0/6.0 PHY 위에서 CXL이 어떻게 cache coherency를 얹는지 — Flex Bus, 세 프로토콜 다중화, Type 1/2/3 디바이스 구분.
QEMU 8.0+ CXL 지원 — 노트북에서 CXL Type 3 디바이스를 에뮬레이션해 드라이버·BIOS 개발 환경 만들기.
Linux kernel 6.x의 CXL 서브시스템 — cxl_pci·cxl_core·cxl_mem·region·DAX 모듈의 역할과 probe 흐름.
왜 느린가? Cache miss, pipeline stall, bus contention부터 profiling 도구 활용까지. 임베디드 시스템 성능 분석의 모든 것.
감으로 최적화 금지. USE·RED 메서드, 임베디드 적용. 과학적 접근의 시작.
3 핵심 지표 + 임베디드 추가 — Jitter·Deadline. Service time vs Response time.
어떻게 측정하나. DWT, PMU, clock_gettime, GPIO + 로직 분석기. Overhead 줄이기.
평균은 거짓말. p99·p999·max·long tail. HdrHistogram·임베디드 fixed-bucket.
Real-time 시스템의 측정 — 평균 아닌 worst-case. WCET 4 방법과 jitter·tardiness 분석.
신뢰할 수 있는 벤치마크는 warmup, isolation, multi-run이 필요합니다. CoreMark·Dhrystone·SPEC을 살펴봅니다.
최적화 한계를 예측하는 수학 모델. Serial 부분이 결정. Memory-bound vs Compute-bound.
두 가지 큰 접근을 비교합니다. Sampling은 perf처럼 가볍고 Instrumentation은 gprof처럼 정확하지만 무겁습니다. PGO로 최적화하는 방법도 다룹니다.
Fetch·Decode·Execute·Memory·Writeback의 5-stage 파이프라인을 봅니다. Cortex-M3/M4는 3-stage, Cortex-A는 8~15-stage입니다.
Stall은 pipeline bubble을 만듭니다. RAW·WAR·WAW hazard, forwarding, PMU STALL counter를 살펴봅니다.
BTFNT, 2-bit saturating counter, BTB·BHT. Mispredict 10-20 cycle. PMU BR_MIS_PRED.
Out-of-order execution. ROB·issue queue·rename. Spectre 측면. Cortex-A 사례.
Cache hierarchy. Direct mapped vs N-way set associative. LRU·PLRU·Random.
Cold/Compulsory, Capacity (working set > cache), Conflict (associativity 한계).
64-byte line alignment, software prefetch, false sharing 회피, SoA·AoS 선택.
STREAM benchmark (Copy·Scale·Add·Triad). Roofline. PMU BUS_ACCESS · DDR bandwidth.
ARM NEON 128-bit, SVE 가변폭. Auto-vectorize (-O3). Intrinsics. Cortex-M Helium (MVE).
ARMv8 PMU 6+ counter, RISC-V HPM. CYCLE·INST_RETIRED·CACHE·BRANCH. perf 활용.
ARM AMBA — AHB·APB·AXI·ACE·CHI. AXI 5 channel, burst, outstanding transaction.
Round-robin·priority·QoS arbitration. Master 다수 시 starvation. AXI QoS·BUSY counter.
Burst size 최적화. Scatter-gather, chain. Cache clean/invalidate, double buffer.
DMA setup overhead. CPU memcpy 최적화. Break-even size. 실측 데이터.
Cortex-M 12-cycle latency. Tail-chaining 6-cycle. Late arrival, lazy stacking, FreeRTOS hooks.
IRQ flooding으로 main loop 봉쇄. NAPI 패턴, rate limit, interrupt coalescing.
MMIO uncached strongly-ordered. Write-combining for PCIe BAR. Volatile, DMB·DSB·ISB.
PLL/divider/gating으로 peripheral clock. STM32 RCC, Linux CCF. Power vs Performance.
DVFS governor, race-to-idle, big.LITTLE, CPU 코어 hotplug, 측정·tuning.
Junction temperature, thermal sensor, trip point, throttling 동작, 자동차·우주 환경.
CXL 2.0/3.1과 Neoverse V2가 만든 cache-coherent interconnect. CXL.io·CXL.cache·CXL.mem 세 프로토콜, Type 1/2/3 디바이스, latency·대역폭의 현실.
Concurrency vs Parallelism (Rob Pike). Race condition. Memory model 도입.
False sharing 원인. Cache coherence ping-pong. Padding으로 line 분리. 측정 방법.
Wait time과 hold time, contention ratio를 측정하고 lock convoy를 회피하는 법.
Spinlock 비용 분석과 ticket lock, MCS lock의 scalability 차이.
Mutex blocking 비용과 Linux futex 2-stage, adaptive mutex, priority inheritance overhead.
RW-lock의 종류와 reader/writer priority, RCU 비교, seqlock의 read-mostly 대안.
CAS 기반 lock-free와 ABA 문제, hazard pointer와 epoch reclamation 비교.
C11/C++11 memory_order와 acquire-release pair, seq-cst 비용, ARM ldar/stlr.
MESI와 MOESI 프로토콜, snoop과 directory 방식, coherency overhead 측정.
Per-core utilization과 CPU affinity, NUMA, migration cost, Amdahl 한계.
Linux perf 표준 도구의 세 가지 핵심 명령. 설치, 권한, 그리고 첫 측정부터 핫스팟 분석까지.
perf의 raw event, tracepoint, perf script Python을 사용한 커스텀 분석.
ftrace의 function tracer, function_graph, irqsoff·preemptoff latency tracer 활용.
eBPF VM과 verifier, bpftrace one-liner, BCC tools, kprobe·uprobe·USDT 비교.
Brendan Gregg flamegraph로 on-CPU·off-CPU·차분 분석. perf·BCC stack 수집.
ARM Development Studio Streamline, Lauterbach TRACE32, ETM·PTM hardware trace.
OS도 perf도 없는 환경에서 GPIO, DWT cycle counter, SysTick, ITM으로 측정하기.
NVIDIA Nsight Systems로 CPU·GPU·메모리 통합 timeline 분석. Jetson 임베디드 활용.
Tracy nanosecond instrumentation, Hotspot GUI, uftrace function trace, Coz causal profiler.
eBPF 기반 continuous profiling. Parca, Pixie, Pyroscope, Cilium Tetragon으로 24/7 분석.
산업용 센서 보드에서 산발적으로 발생한 ISR latency spike. 가설 두 개를 거쳐 SD 카드 드라이버를 범인으로 확정한 과정.
1024×1024 matrix multiply가 이론값의 10배 느렸다. SIMD부터 의심했지만 진짜 범인은 캐시 미스 90%였다.
8-core 서버에서 thread를 늘릴수록 throughput이 오히려 감소. 단일 global mutex가 cache invalidation 폭주를 일으킨 사례.
Cortex-A 보드의 카메라 캡처가 frame drop. CPU는 한가했고 진짜 범인은 DMA burst size와 AXI bus 효율이었다.
CXL.mem 토폴로지별 실측 — Direct attach·Single switch·Multi-host pool의 지연·대역폭 비용 측정.
CXL.mem 환경 성능 도구 — cxl-cli 토폴로지·DAMON page activity·perf-mem로 보는 CXL 트래픽·numastat 통계.
70B 모델 KV cache가 HBM 한계를 넘어 throughput이 무너졌을 때, CXL.mem 256 GB pool 추가로 회복한 실전 케이스.
RTOS를 사용하는 것이 아니라 이해하고 구현하는 법. Scheduler, context switch, memory allocator의 내부 동작을 소스 코드 수준에서 분석합니다.
Super-loop는 모든 작업이 직렬화되어 deadline을 보장하지 못합니다. RTOS는 preemption과 우선순위로 실시간성을 확보합니다.
Task는 stack과 TCB, 상태로 구성됩니다. 5상태 머신(Running·Ready·Blocked·Suspended·Deleted)과 그 전이를 다룹니다.
Round Robin, Priority-based preemptive, Earliest Deadline First, Rate Monotonic을 다룹니다. 임베디드 RTOS는 대부분 fixed-priority preemptive를 씁니다.
Preemptive는 tick과 IRQ에서 강제로 전환합니다. Cooperative는 yield를 명시해야 합니다. latency와 predictability의 trade-off를 다룹니다.
ISR은 task가 아니므로 context도 따로 관리됩니다. Long work는 deferred task로 넘기고, FromISR API 패턴을 씁니다.
공유 자원 보호의 3가지 도구로 interrupt disable, spinlock, mutex가 있습니다. 언제 어느 것을 쓰는지 정리합니다.
Dijkstra의 P/V(1965)에서 출발한 Counting(N 자원)과 Binary(신호) 세마포어를 다룹니다. ISR에서 task로 신호를 전달하는 표준 도구입니다.
공유 자원 보호의 정답입니다. Owner tracking 덕에 PI가 가능하고, recursive로 재진입도 허용합니다.
Task 간 데이터 전달의 표준입니다. FreeRTOS는 by-value copy이며, 대용량은 pointer queue로 처리합니다.
4 핵심 지표인 Latency, Jitter, Deadline, WCET를 다룹니다. Hard와 Soft real-time의 차이, Rate Monotonic Analysis로 schedulability를 증명하는 방법을 살펴봅니다.
Ready 상태 task를 보관하는 자료구조 선택이 곧 스케줄러 latency를 결정합니다. FreeRTOS의 array-of-lists, bitmap + CLZ 최적화, uC/OS의 8×8 LUT까지 한 번에 정리합니다.
Blocked task의 timeout 관리. Sorted list + tick wraparound 처리. FreeRTOS의 2-list scheme.
FreeRTOS pxCurrentTCB 결정. CLZ 최적화, tie-breaking, scheduler entry points.
Context switch는 결국 CPU의 모든 가시 상태를 task 스택에 통째로 복제하는 일입니다. 어디서 발생하고, 무엇을 저장하고, 비용은 얼마인지 아키텍처 중립적으로 정리합니다.
Cortex-M context switch는 PendSV 예외와 dual-stack 모델로 압축됩니다. FreeRTOS port의 PendSV 핸들러 어셈블리를 한 줄씩 따라가며 EXC_RETURN, BASEPRI, lazy FPU까지 풀어봅니다.
Cortex-A의 7 모드와 모드별 banked register. 모드 간 SP·LR 별도 — Cortex-M보다 복잡.
RISC-V는 모든 레지스터 SW save. ECALL/mret + CSR (mscratch/mepc/mcause/mstatus).
RTOS의 심장 박동. SysTick 1 kHz가 표준 — Hz 선택의 trade-off.
Idle 시 SysTick 멈춤 + CPU sleep. 다음 task wake 시점까지 동적 timer 설정. 배터리 IoT 핵심.
ISR 종료 → ready task 실행까지의 시간. 측정 방법과 worst-case 추적.
Percepio Tracealyzer와 Segger SystemView, Cortex-M의 ITM/ETM 하드웨어 트레이스. Task switch·ISR·queue·mutex 이벤트를 시간축에 펼쳐 인과를 추적합니다.
3 가지 구현 — cpsid/BASEPRI mask, taskENTER_CRITICAL, SMP spinlock. Hold time이 latency 결정.
FreeRTOS semaphore = Queue wrapper. Counter + priority-sorted wait list.
Mutex = Semaphore + pxMutexHolder + uxBasePriority. Recursive variant는 lock-count.
고우선 task가 저우선 task 때문에 막힘. 1997 화성 탐사선 reset의 원인.
FreeRTOS PI 코드 분석 — vTaskPriorityInherit, vTaskPriorityDisinherit, chain handling.
PI의 대안. 각 mutex에 정적 ceiling — take 즉시 boost. Deadlock 방지.
FreeRTOS Queue 코드 — pcWriteTo·pcReadFrom·uxMessagesWaiting + xTasksWaitingToSend/Receive.
FreeRTOS Event Group — 24-bit flag, AND·OR semantics, clear-on-exit, multi-task sync.
FromISR API 내부 구조와 pxHigherPriorityTaskWoken, yield 결정, deferred work 패턴을 정리합니다.
Coffman의 네 조건과 wait-for graph 분석, lock ordering, timeout, hierarchical locking을 살펴봅니다.
FreeRTOS 10+ 추가된 Stream/Message Buffer. Lock-free SPSC ring buffer로 queue보다 10배 빠른 IPC. ISR-safe variant, byte stream vs variable-length frame의 선택.
동적 할당의 한계와 fragmentation, WCET-bounded allocator, safety-critical 기준을 살펴봅니다.
FreeRTOS가 제공하는 다섯 가지 heap 구현을 source 수준에서 비교합니다. heap_1의 bump부터 heap_5의 multi-region까지, 실시간성과 단편화 관점에서 어떤 워크로드에 어떤 구현이 맞는지 정리합니다.
Masmano 2004의 TLSF 알고리즘을 풀어봅니다. Bitmap과 CLZ 명령으로 alloc·free·coalesce 모두 O(1)을 보장하며, 자동차·로봇·RT 게임의 표준 dynamic allocator가 된 이유를 살펴봅니다.
모든 RTOS 객체를 컴파일 타임에 fixed로 두는 패턴입니다. FreeRTOS Static API, Zephyr 매크로, linker section 배치, MISRA/DO-178C 호환성까지 정리합니다.
같은 크기 객체를 다수 alloc/free하는 패턴을 위한 fixed-size pool입니다. free list 구조, O(1) 보장, per-class pool, lock-free 변형까지 실전 패턴을 정리합니다.
임베디드 가장 흔한 silent bug가 스택 오버플로우입니다. FreeRTOS canary, MPU region 기반 hardware 보호, high-water mark 측정, 정적 분석 도구까지 다층 방어 전략을 정리합니다.
FreeRTOS 11 SMP와 Zephyr SMP를 단일 ready list와 per-CPU ready list 두 축으로 비교합니다. task affinity, IPI, cross-core wake, cache coherency 경계까지 설계 관점에서 정리합니다.
ARM LDREX/STREX exclusive monitor와 ARMv8.1 LSE를 출발점으로 SMP spinlock 구현을 따라갑니다. test-and-test-and-set, ticket lock, MCS lock의 fairness와 cache bouncing trade-off, WFE/SEV로 만드는 저전력 spin을 정리합니다.
FreeRTOS Software Timer 내부를 따라가며 daemon task 구조, sorted list와 timer wheel 자료구조, one-shot/auto-reload 동작, xTimerStartFromISR과 xTimerPendFunctionCall을 통한 ISR 워크 deferral을 정리합니다.
MPU/MMU로 user task와 kernel을 분리하는 RTOS의 syscall 구조를 정리합니다. Cortex-M의 SVC trap, RISC-V의 ECALL, FreeRTOS-MPU와 Zephyr USERSPACE의 차이, capability 검사, syscall overhead 측정까지 다룹니다.
Cortex-M33/M55/M85의 TrustZone-M과 TF-M secure firmware를 정리합니다. SAU/IDAU로 메모리를 secure/non-secure로 가르고, NSC veneer + SG 명령으로 안전하게 cross-world call을 수행하는 구조, PSA Crypto/Storage/Attestation API, secure boot chain까지 다룹니다.
Cortex-A와 Cortex-M이 한 칩 위에서 별도의 OS를 돌리는 AMP 구조를 정리합니다. OpenAMP framework(libmetal/RPMsg/remoteproc), virtio-vring 기반 shared memory IPC, mailbox 인터럽트, i.MX·STM32MP·RP2350 사례까지 다룹니다.
RTOS C API를 C++ 객체로 감싸는 패턴을 정리합니다. RAII MutexGuard와 ScopedIRQDisable, std::thread/std::mutex의 한계와 직접 xTaskCreate가 결정성을 갖는 이유, ETL로 STL을 대체하는 법, C++20 coroutine을 RTOS 위에 얹는 방식까지 다룹니다.
FreeRTOS-Kernel 저장소의 핵심 파일 셋을 따라가며 xTaskCreate부터 PendSV까지의 흐름을 정리합니다. TCB·ready list·port 계층 사이의 경계가 어떻게 그어져 있는지 source 수준에서 살펴봅니다.
Zephyr 커널 서브트리를 따라가며 sched.c·thread.c·sem.c의 핵심을 읽습니다. devicetree로 드라이버 인스턴스가 만들어지는 경로와 KConfig·west 빌드 체계까지 한 지도 위에 모읍니다.
RT-Thread의 object-oriented C 설계와 component 생태계를 따라갑니다. FreeRTOS급 경량 kernel 위에 DFS·LwIP·POSIX·FinSH가 어떻게 얹히는지, Smart variant가 무엇을 더 가져오는지 정리합니다.
FreeRTOS와 Zephyr의 port 계층을 따라가며 새 아키텍처에 RTOS를 옮기는 절차를 정리합니다. initial stack frame, context switch assembly, tick source, critical section primitive까지 한 번에 잡습니다.
FreeRTOS·Zephyr·ThreadX·RT-Thread·NuttX·VxWorks·QNX·INTEGRITY·SafeRTOS·µC/OS·PX5를 한 표에 모아 비교합니다. IoT·자동차·항공·산업·의료·웨어러블·드론별 추천과 결정 기준을 정리합니다.
NuttX의 POSIX-compliant 구조를 따라가며 PX4 autopilot과 NASA Ingenuity 화성 헬리콥터 채택 배경을 정리합니다. Flat/Protected/Kernel 빌드, VFS, 네트워크, NSH, micro-ROS 통합까지 한 지도로 모읍니다.
2024년 9월 Linux 6.12 mainline에 합류한 PREEMPT_RT의 핵심 변경을 정리하고, Xenomai 4·EVL과 함께 RTOS와의 선택 기준을 비교합니다. threaded IRQ·sleeping spinlock·cyclictest까지 한 지도에 모읍니다.
어디까지 C++를 써도 되는가? RAII, constexpr, no-exception 설계부터 lock-free 패턴까지. 임베디드에서 안전하게 C++를 쓰는 법.
임베디드에서 C++가 진짜로 무거운가? 측정 가능한 비교와, C가 여전히 옳은 자리들.
C++를 임베디드 모드로 — -fno-exceptions, -fno-rtti, -Os, -flto. 각 플래그가 실제 바이너리에 무엇을 하는가.
C++ 코드가 돌기 위한 최소 런타임 — libstdc++, libsupc++, newlib, libgcc. 무엇이 진짜 필요한가.
size, nm, objdump, bloaty — 어디서 어떤 크기가 오는지 측정하는 도구. bloat 추적의 표준 워크플로.
C와 C++가 한 바이너리에서 살아남는 법 — name mangling, extern "C", calling convention, struct layout.
Reset에서 main까지 — vector table, .data 복사, .bss 초기화, __libc_init_array가 호출하는 C++ static 생성자.
MEMORY와 SECTIONS — Flash와 RAM에 C++ 객체와 코드를 정확한 위치에 두는 법.
C++11/14/17/20/23 — 임베디드에서 어느 표준을 골라야 하나. 컴파일러 지원, 표준 라이브러리 변화, 핵심 기능 비교.
Resource Acquisition Is Initialization — 자원 생명주기를 객체 생명주기에 묶는 C++의 핵심 idiom.
scoped_lock, unique_ptr with custom deleter, ScopedXxx, Finally — 임베디드에 자주 등장하는 RAII 표준 패턴.
컴파일 타임 계산 — 런타임 코드와 데이터를 컴파일러가 미리 만들어줍니다. -Os보다 강력한 zero-cost.
컴파일 타임 sort, search, 문자열 — constexpr 알고리즘의 한계와 가능성.
C++20의 컴파일 타임 강제 — consteval은 함수 호출을, constinit은 변수 초기화를 컴파일 타임에 강제합니다.
함수 템플릿과 클래스 템플릿 — 컴파일 타임 다형성으로 type-safe + zero-cost generic 코드.
Template instantiation의 코드 bloat — 추적, 통제, 공통 부분 분리 패턴.
Curiously Recurring Template Pattern — virtual 함수 없이 컴파일 타임 다형성. vtable 0, 간접 호출 0.
std::is_*, std::enable_if, SFINAE — 컴파일 타임 type 정보로 코드 분기와 검증.
Template 제약을 명시 — SFINAE의 가독성 개선, 에러 메시지 명확화, 자체 문서화.
임베디드의 첫 번째 원칙 — new/malloc 없이 modern C++의 STL 같은 컨테이너 활용.
STL allocator interface — 표준 컨테이너의 메모리 출처를 제어.
고정 크기 블록 + free list — 임베디드의 표준 allocator 구현.
C++17 polymorphic allocator — 같은 컨테이너 타입에 다른 메모리 출처 주입.
-fno-exceptions 환경에서 에러 처리 — error code, std::optional, std::expected.
Result types, error chains, exception-free RAII — 실용적 에러 시스템 구축 패턴.
C++23의 Result type — Rust 같은 monadic 에러 처리, 예외 없이 풍부한 정보.
-fno-rtti 환경에서 type info 없이 다형성 — enum tag, std::variant, CRTP.
unique_ptr vs shared_ptr vs raw pointer — 임베디드의 소유권 모델 선택.
Owner, observer, borrower — 객체 lifetime의 명확한 책임 할당.
객체가 자기 next pointer 보유 — 동적 할당 없는 linked list와 tree.
Embedded Template Library — heap 없는 STL 대체, fsm, message router 포함.
Atomic, CAS, memory order — mutex 없이 동시성. 임베디드의 ISR-safe 패턴.
SPSC queue, MPMC stack, ring buffer — lock-free 자료구조 구현 패턴.
enum class + bit operators — type-safe 비트 플래그. 의도하지 않은 변환 차단.
타입 안전한 상태 머신 — enum + switch부터 std::variant, etl::fsm까지.
constexpr state machine — 컴파일 타임에 전이 검증, runtime 코드 0.
임베디드의 DI 패턴 — Construct-On-First-Use, static dependency injection, service locator.
MMIO를 type-safe하게 — volatile, bit field, register wrapper class.
GPIO pin = type — 컴파일 타임에 핀 설정 검증, runtime 비용 0.
UART, SPI, I2C — peripheral을 type-safe class로. Blocking, interrupt, DMA 패턴.
범용 HAL 구조 — 벤더 종속성 격리, 다중 보드/MCU 지원, 시리즈 마무리.
ROM부터 init까지의 전체 흐름과, 부트로더가 그 사이에서 채우는 자리.
임베디드 부트로더 생태계 — Das U-Boot, ARM Trusted Firmware, EDK II의 역할 분담.
U-Boot의 빌드 시스템 — Kconfig 옵션, Makefile 구조, defconfig 패턴, out-of-tree 빌드.
ARM64와 RISC-V의 다단 부트 — BL1·BL2·BL31·BL33, SPL·TPL·U-Boot Proper의 책임 분할.
U-Boot Falcon Mode — SPL이 U-Boot Proper를 건너뛰고 커널을 직접 부트. 부트 시간 단축의 핵심.
U-Boot가 DTB를 다루는 방식 — control DTB와 OS DTB, fdt 명령, 런타임 fixup.
U-Boot Driver Model — uclass·driver·udevice 구조와 DT 기반 driver binding.
U-Boot 보드 초기화 흐름 — pre-relocation (board_init_f)과 post-relocation (board_init_r).
DDR controller 초기화 시퀀스 — 레지스터 프로그래밍, training, 보드별 파라미터의 위치.
부트 미디어별 동작 차이 — eMMC, SD, SATA, NAND, SPI NOR/NAND의 부트 모드.
네트워크를 통한 부팅 — DHCP/BOOTP·TFTP·PXE의 단계와 U-Boot 명령.
USB를 통한 부팅과 flash — fastboot, USB Mass Storage(UMS), USB host 부팅 흐름.
U-Boot 환경 변수 시스템 — saveenv·bootcmd·bootargs·distro_bootcmd 패턴.
U-Boot의 새로운 부트 모델 — bootflow / bootmeth로 distro_bootcmd 스크립트를 대체.
Flattened Image Tree — kernel·DTB·initramfs·overlay를 한 컨테이너로 묶는 포맷.
U-Boot Verified Boot — FIT 서명, public key를 U-Boot DT에 박는 워크플로.
A/B 슬롯 부트 — 양산 시스템의 안전한 펌웨어 업데이트와 자동 fallback.
U-Boot이 UEFI Boot Services를 노출하는 방식 — bootefi, EBBR, Linux EFI stub과의 연결.
부트로더 → 커널 인계 — ARM64·RISC-V·x86 boot ABI, 인자 전달, 레지스터 상태.
U-Boot와 통합되는 펌웨어 업데이트 프레임워크 — RAUC와 SWUpdate의 비교와 적용.
U-Boot에 새 보드를 추가하는 전체 워크플로 — configs·board·dts·MAINTAINERS.
부트로더 디버깅 — CONFIG_DEBUG_UART, JTAG, 시리얼 콘솔, panic dump 읽기.
전원 인가 직후 mask ROM이 무엇을 하는지, eFuse/OTP에 굳어 들어가는 키와 anti-rollback counter, secure boot의 시작점.
SPL과 TPL의 정확한 역할, SRAM 안에 들어가는 코드 구조, DDR이 없는 환경에서 어떻게 동작하는가.
ARMv8 secure boot의 표준 단계화 — Trusted Firmware-A의 BL1·BL2·BL31과 OP-TEE(BL32)·U-Boot(BL33) 위치.
DDR4/LPDDR4 controller·PHY가 어떻게 캘리브레이션되는지, 보드별 timing parameter, training 실패 디버깅.
BootROM PK hash → BL2 signed by ROTPK → BL31/BL33 signed by trusted key → kernel signed by FIT key의 chain을 끝까지.
양산 firmware의 flash layout 설계 — 부트로더·env·kernel·rootfs·OTA slot의 sizing과 NAND/eMMC/UBI 차이.
보드별 다른 부트 스크립트를 표준화 — U-Boot Distro Boot, extlinux.conf, boot.scr의 차이와 선택.
여러 보드의 U-Boot/TF-A를 PR마다 빌드하고, QEMU·real board에서 boot까지 자동 검증하는 CI 패턴.
TF-A BL31의 EL3 runtime service 구조 — runtime_svc 등록 모델, vector entry, PSCI·SDEI·RAS dispatcher, SMC call latency.
SMCCC 호출 규약과 PSCI v1.1 ABI — function ID 구조, fast vs yielding, CPU_ON·CPU_SUSPEND, Linux PSCI driver.
ARM64 secondary CPU 깨우기 — spin-table 옛 방식과 PSCI CPU_ON 표준 방식, secondary_startup 어셈블리, percpu 초기화, hotplug 흐름.
U-Boot PCIe 열거 과정 — Root Complex 초기화·Config Space scan·BAR sizing·resource 할당, CXL DVSEC 인식까지.
EDK II 기반 UEFI에서 CXL 디바이스 초기화 — CEDT(CXL Early Discovery Table) 생성, HDM Decoder 사전 설정, ACPI handoff.
부트로더가 DDR DIMM·CXL.mem·HBM을 하나의 메모리 토폴로지로 통합하는 흐름 — SRAT·HMAT·SLIT 생성과 NUMA 노드 매핑.
2026년 6월부터 시작되는 Microsoft Secure Boot 2011 인증서 만료 — PK·KEK·db·dbx 계층, 2023 CA 체인과 Option ROM CA 분리, 임베디드 기기 영향, 그리고 post-quantum 서명으로의 길.
STRIDE / DREAD. 임베디드 특수 — 물리 접근 / 자원 제약.
ROM → bootloader → kernel → app. 각 단계 서명 검증. Root of Trust.
MCU 내장 crypto 엔진. 소프트웨어 vs 하드웨어. constant-time.
ARM TrustZone — Secure / Non-Secure World 분리. SMC, NSC.
Trusted Execution Environment. OP-TEE, TA, GlobalPlatform API.
안전한 펌웨어 업데이트. A/B 슬롯, delta update, 서명 검증, rollback 방지.
DPA / SPA / EM / fault injection. constant-time, masking, hiding 방어.
IoT 소비자·산업·자동차 보안 표준. 한국 KISA·KICS 포함.
JTAG / SPI flash dump / binwalk / Ghidra / radare2. 펌웨어 정적·동적 분석.
Microsoft SDL, threat modeling, SBOM, supply chain, 사고 대응. 시리즈 마무리.
PCIe·CXL IDE (Integrity and Data Encryption) — 링크 sniff·MITM 위협, AES-GCM 암호화, Selective vs Link IDE, 키 관리, 성능 영향.
SPDM(Security Protocol Data Model) 메시지 흐름, CMA(Component Measurement Attestation) — PCIe·CXL 디바이스 신원 확인과 firmware integrity 검증.
TDISP·TVM·CXL TEE — Confidential Computing이 메모리 디바이스·가속기로 확장되는 표준 흐름.
HBM과 GDDR의 분기점 — bandwidth·capacity·cost의 트레이드오프와 시장 분할.
Base die + DRAM die stack — 3D 메모리의 구성요소와 TSV·microbump의 역할.
세대별 bandwidth·capacity·signaling — JEDEC 표준의 진화 흐름.
고속 그래픽 메모리 — clock·PAM 신호의 진화로 32 Gbps에 도달한 경로.
Theoretical vs achievable — 메모리 대역폭의 실제와 roofline·memory wall.
HBM stack의 열 부하·power state·refresh의 cost와 냉각 솔루션.
Bank·row·column·command — 컨트롤러가 보는 HBM과 scheduling·address mapping.
Weight·activation·KV cache — HBM 자리잡기와 시리즈 마무리.
CXL.mem이 메모리 계층에 끼어드는 자리 — on-package HBM과 DRAM DIMM 사이의 새 tier.
CXL.mem 트랜잭션 흐름 — M2S Req·S2M NDR/DRS, HDM Decoder의 주소 매핑, BI·Snoop Filter 동작.
CXL 디바이스 세 유형 — Type 1 (cache-only), Type 2 (accelerator with memory), Type 3 (memory expander)의 사용 사례와 트래픽 패턴.
CXL 2.0/3.x switch가 만드는 메모리 풀링 — 다중 호스트가 공유하는 메모리 풀과 Coherent Fabric 토폴로지.
Espressif가 Tensilica Xtensa에서 RISC-V로 전환한 첫 SoC. WiFi 4 + BLE 5.0, 32-bit RV32IMC.
ESP32-C3 코어의 ISA·특권 모델·인터럽트. 32-bit IMC, M-mode only, PMP 16 entries.
ESP32-C3 메모리 구조 — 400KB SRAM, 4MB SPI flash, MMU. 파일시스템 선택.
22개 GPIO, GPIO Matrix로 페리퍼럴 자유 매핑. LEDC PWM, MCPWM (모터 제어).
주변 디바이스와의 4대 통신. DMA 활용, 인터럽트 vs polling.
12-bit SAR ADC × 2 unit, 정전식 터치 9 채널. 캘리브레이션과 노이즈.
802.11 b/g/n. ESP-IDF WiFi API, 4가지 모드. WPA2/WPA3 보안.
BLE 5.0 — 2M PHY로 2배 처리량, Coded PHY로 4배 거리. GATT 서버 만들기.
CMake 기반 ESP-IDF 빌드. 컴포넌트(component) 모델로 라이브러리 모듈화.
ESP-IDF의 modified FreeRTOS. 우선순위 25 단계, tickless idle, software timer.
ECDSA 기반 Secure Boot V2, AES-256 Flash Encryption, eFuse 키 보관.
5단계 power mode, RTC 도메인 활용, ULP 코프로세서 미지원 — C3는 RTC GPIO만.
Buildroot의 위치 — 임베디드 리눅스 rootfs 빌드 시스템, Yocto와의 트레이드오프.
Buildroot 트리 — package, board, configs, fs, output, dl 디렉터리의 역할.
Buildroot의 Kconfig 시스템 — make menuconfig 사용법, defconfig 패턴, 옵션 의존성.
qemu_aarch64_virt_defconfig로 첫 시스템을 빌드하고 QEMU에서 부팅하는 전체 흐름.
Buildroot 패키지 작성 규약 — Config.in 옵션 노출과 .mk 빌드 레시피.
회사·팀의 패키지·보드 정의를 Buildroot 본체와 분리하는 BR2_EXTERNAL 메커니즘.
보드별 파일 추가, 빌드 후 처리, 이미지 생성 후 처리 — 세 가지 hook.
Buildroot가 생성하는 파일시스템 형식 비교 — 언제 무엇을, 크기·읽기성능·쓰기 가능성.
Buildroot에 새 패키지를 추가하는 실전 — autotools·cmake·python 세 케이스.
Buildroot로 BeagleBone Black용 완전한 시스템을 구축 — defconfig부터 SD 카드 부팅까지.
Buildroot toolchain 결정 — internal toolchain의 단순함과 external toolchain(Bootlin·Linaro·vendor SDK)의 속도·호환성 트레이드오프.
Buildroot에서 mainline 커널을 vendor 트리·custom config·in-tree DTS로 customize하는 패턴.
Buildroot가 U-Boot를 가져와 빌드·패키징하는 방식과 env·fw_env.config로 런타임에 접근하는 패턴.
Buildroot의 캐싱 계층 — dl/ source 캐시, ccache compile 캐시, BR2_PER_PACKAGE_DIRECTORIES와 sstate가 없는 이유.
post-build·post-image·post-fakeroot 세 hook의 정확한 차이, 환경 변수, BR2_ROOTFS_OVERLAY 한계, system_table.txt로 권한·devnode 다루기, genimage로 SD 이미지 만들기.
Buildroot에서 RAUC·swupdate·Mender를 통합해 A/B 부팅·atomic update를 제공하는 패턴. slot 설계, bundle 생성, U-Boot bootcount, 서명·롤백까지.
Buildroot가 만든 toolchain을 application 개발자에게 SDK로 배포하는 패턴과 relocatable toolchain 한계.
Buildroot의 CVE 추적·legal info 산출·SBOM·reproducible build로 보안과 컴플라이언스를 관리하는 패턴.
GitLab/GitHub Actions에서 Buildroot 트리를 컨테이너로 빌드하고 dl·ccache를 팀이 공유하는 패턴.
Buildroot가 한계에 도달하는 신호와 Yocto/OE로 점진 이전하는 패턴, meta-buildroot 같은 hybrid 옵션.
PCIe 아키텍처의 기초 — point-to-point 직렬 링크, 3-Layer 모델, Root Complex·Switch·Endpoint 토폴로지, Gen 1부터 7.0까지의 진화.
PCIe의 기본 packet인 TLP — 3/4 DW header·5 가족·split transaction·라우팅 3 방식·Producer-Consumer ordering.
PCIe Configuration Space — 256 byte PCI 영역 + 4 KB Extended·Type 0/1 header·Capability chain·ECAM 메모리 매핑.
Base Address Register — Memory·I/O·64-bit·Prefetchable·size 결정·ReBAR·SR-IOV VF BAR.
PCIe 인터럽트 메커니즘 3가지 — Legacy INTx·MSI 32 vector·MSI-X 2048 vector·IOMMU Interrupt Remapping.
PCIe 전력 관리 — Device D0~D3·Link L0~L3·ASPM·L1 substates·CLKREQ·PME 흐름.
PCIe 에러 분류·계층별 처리·AER capability·DPC containment·Linux 복구 callback.
PCIe DLL — ACK/NAK·replay buffer·credit-based flow control·LCRC·Gen 6+ FLIT mode.
PCIe Physical Layer — LTSSM 11 state·link training timeline·4-phase equalization·TS1/TS2·SKP·encoding 진화.
Linux kernel의 PCIe — boot enumeration·struct pci_dev·driver matching·probe/remove·sysfs entry·ACPI 통합.
Linux DMA API — coherent·streaming·scatter-gather·IOMMU mapping·ATS·PRI·PASID·SVM·IOMMUFD.
PCIe hardware virtualization — SR-IOV PF/VF·VFIO container/group/device·DPDK·SPDK·ACS·FLR.
Guest 측 vIOMMU·Intel S-IOV·VirtIO·vDPA·live migration·Confidential I/O (IDE·TDISP·CMA-SPDM).
PCIe 운영 — pciehp surprise·orderly hot-plug·AER recovery callback chain·DPC integration·ARI 256+ function·EEH.
PCIe 디버깅 도구 — lspci 전체 옵션·setpci raw access·pcimem BAR R/W·protocol analyzer·debugfs.
Device not visible·link training fail·downgrade·CE storm·hang·ACS group·hot-plug·성능 미달·lane reversal·power budget.
PCIe 성능 — theoretical vs effective BW·MaxPayload·MaxReadReq·latency breakdown·NUMA·P2P·ASPM 영향·tuning.
PCIe register reference — Type 0/1 header·PCIe Cap·AER·MSI·MSI-X·SR-IOV·ACS·LTR의 주요 비트 layout.
코어 동작 너머의 PCIe spec 기능들 — Lane Margining(신호 마진 측정)·10-bit Tag(outstanding 확장)·TPH(캐시 주입 힌트)·ACS(격리)·L0p(부분폭 저전력)을 실무 관점에서 정리합니다.
Board Support Package의 정의·범위·구성요소 — 보드를 부팅 가능한 시스템으로 만드는 모든 것.
Reference Manual에서 BSP에 필요한 정보를 찾는 방법 — clock tree, memory map, pin mux.
보드 토폴로지를 DT로 표현 — SoC dtsi 상속, 보드 dts 작성, overlay 활용.
보드의 가장 보드-특화된 초기화 — pin 멀티플렉싱과 clock tree 설정.
DDR controller 설정값이 어디서 오는지 — vendor tool, SPD, 데이터시트 timing 표.
BSP 관점에서의 U-Boot 추가 — defconfig·board.c·DT 통합 흐름.
ARM Trusted Firmware-A를 BSP에 통합 — BL31 빌드, U-Boot와 BL33 결합, secure/non-secure 분리.
BSP에서 커널을 빌드합니다. defconfig 선택과 커스터마이즈, DT 통합, 모듈 vs 빌트인 결정을 정리합니다.
보드의 다른 코어를 깨우는 절차를 정리합니다. PSCI, spin-table, ARM CPU hotplug의 흐름을 살펴봅니다.
보드 켜는 순간부터 login prompt까지의 단계별 체크포인트를 정리합니다. 어디서 멈추는지를 미리 알아 둡니다.
부트 실패 패턴을 카탈로그로 정리합니다. 시리얼 garbage, hang, panic, late hang의 진단과 대응을 살펴봅니다.
BSP에서 새 드라이버 통합 — 기존 드라이버 활용, DT binding 추가, 새 드라이버 작성 결정 기준을 정리합니다.
BSP의 전력 관리 — suspend-to-RAM, runtime PM, regulator framework, CPU idle/freq를 정리합니다.
보드 안전 장치를 정리합니다. thermal zone과 trip point, hardware watchdog 통합을 살펴봅니다.
boot에서 application까지 시간을 줄이는 기법 — measurement, Falcon, deferred init, kernel slim.
BSP에서 rootfs 빌드 시스템 선택과 통합 — Buildroot 외부 트리, Yocto 메타레이어.
최종 이미지 조립 — 파티션 테이블, flash layout, SD/eMMC/UFS 굽기 워크플로.
현장 배포된 보드의 펌웨어 업데이트와 복구 — RAUC/SWUpdate 통합, recovery 파티션, USB recovery.
양산 BSP의 안정성 검증 — stress 도구, 장기간 soak, thermal 사이클, EMC 영향.
BSP를 양산으로 옮기는 단계 — CI 빌드, 재현성, 코드 서명, 키 관리.
BSP의 장기 유지 — 업스트림 기여로 부담 줄이기, LTS 버전 선택, 커널 버전업 전략.
CXL이 푸는 문제, 세대별 진화, 4.0의 핵심 변경 (128 GT/s·Bundled Port).
CXL 디바이스 분류와 multi-LD·multi-head 구조.
Host-managed Device Memory 두 종류와 일관성 메커니즘.
CXL 2.0 pooling, CXL 3.x fabric, GFAM (Global Fabric Attached Memory).
PCIe 7.0 기반 128 GT/s, Bundled Port·Streamlined Port의 동기와 효과.
CXL.io 프로토콜의 PCIe 호환성과 CXL 고유 확장.
디바이스가 호스트 메모리를 캐시하는 프로토콜.
호스트가 디바이스 메모리를 load/store하는 프로토콜.
Flit 단위 구조의 세대 별 변화.
같은 PHY에 CXL.io·CXL.cache·CXL.mem을 시분할로 흘리는 layer.
Linux 6.x의 CXL subsystem 코드 구조와 probe 흐름.
QEMU 8.0+의 CXL Type 3 에뮬레이션과 드라이버 검증 워크플로.
CXL switch의 진화와 Fabric Manager의 역할.
CXL 보안 메커니즘 4종의 위치와 관계.
Reliability·Availability·Serviceability, 성능 고려사항, Compliance Testing.
왜 표준 Ethernet으로 부족한가 — 실시간성·결정성.
Soft·Firm·Hard real-time — 산업 자동화의 시간 등급.
Slave가 프레임을 통과시키면서 읽고 쓴다 — EtherCAT 핵심.
EtherCAT frame이 standard Ethernet 위에 어떻게 얹히는가.
SOEM·IgH·TwinCAT — 오픈소스와 상용 master 구현.
Siemens 표준 산업 이더넷 — RT vs IRT.
PROFINET IO 통신 모델 — AR·CR·DCP·alarm·MRP redundancy까지 한 번에.
IEEE 802.1 toolkit — 표준 Ethernet에 결정성을 더하는 9개 표준을 한 자리에.
Gate Control List 설계부터 ILP 기반 스케줄 합성·실제 도구·CNC YANG까지.
B&R발 오픈소스 표준 산업 이더넷·통합 safety layer — slot polling으로 1ms 결정성을 만드는 법.
PREEMPT_RT mainline·CPU isolation·NIC tuning·IgH EtherCAT 마스터까지 — Linux 위에서 산업 이더넷을 굴리는 모든 단계.
EtherCAT·PROFINET·EtherNet/IP·POWERLINK·SERCOS III·TSN — 시나리오별 선택 가이드와 한국 산업 현장 적용 사례.