임베디드 스터디 - 플래시 메모리 관리
임베디드 Linux의 플래시 메모리 관리를 학습한다. NAND Flash의 Bad Block·Wear Leveling 문제, MTD 서브시스템 역할, Log-Structured 방식의 JFFS2와 UBI 논리 블록 매핑 기반의 UBIFS 파일시스템 구조를 다룬다.
임베디드 Linux의 플래시 메모리 관리를 학습한다. NAND Flash의 Bad Block·Wear Leveling 문제, MTD 서브시스템 역할, Log-Structured 방식의 JFFS2와 UBI 논리 블록 매핑 기반의 UBIFS 파일시스템 구조를 다룬다.
임베디드 Linux의 2nd Stage 부트로더 U-Boot을 학습한다. SPL의 DRAM 초기화와 U-Boot Proper 로드 과정, bootcmd·bootm 환경변수 설정, tftp/nfs 네트워크 마운팅을 활용한 개발 방식과 SD카드/eMMC 기반 양산 부팅 방식을 다룬다.
임베디드 C의 함수 포인터와 콜백 패턴을 학습한다. typedef를 활용한 함수 포인터 선언, 이벤트 핸들러·디스패치 테이블·상태 기계(State Machine) 콜백 구현 패턴, 함수 포인터 사용 시 주의사항을 다룬다.
PC/임베디드 Linux의 OS 부팅 절차를 학습한다. BIOS·UEFI 차이, MBR/GPT 디스크 구조, POST 자가진단, GRUB Stage 실행 흐름, 그리고 커널 스타트업 코드에서 start_kernel()·systemd(PID 1)까지의 부팅 과정을 다룬다.
임베디드 부트로더를 학습한다. OS 기반 펌웨어의 1st/2nd Stage 부트 과정, Flash XIP의 한계, BootROM·U-Boot 역할, 그리고 베어메탈 스타트업 코드와 부트로더 기반 시스템의 실행 흐름 차이를 다룬다.
임베디드 크로스 개발 환경을 학습한다. arm-none-eabi-gcc 툴체인 명칭 구조, GDB·OpenOCD·JTAG 어댑터(J-Link/ST-Link)로 구성된 크로스 디버깅 환경, 하드웨어 브레이크포인트 제약, GDB 주요 명령어 활용법을 다룬다.
임베디드 C의 Struct·Union·Enum·Bitfield 타입을 학습한다. Struct 패딩 최적화와 packed 속성, Designated Initializer, FAM, Opaque 포인터 캡슐화, Union을 이용한 Type Punning과 레지스터 오버레이, Enum 상수 선언, Bitfield 이식성 문제와 MISRA 권장 대안을 다룬다.
임베디드 펌웨어의 ELF 파일 포맷을 학습한다. ELF 헤더·섹션·세그먼트 구조, .elf에서 .bin/.hex 변환 원리, 그리고 binutils(objdump·nm·readelf·size·objcopy)를 활용한 펌웨어 분석 방법을 다룬다.
임베디드 시스템의 메모리 초기화를 학습한다. 칩 셀렉트(CS) 로직을 통한 외부 메모리 선택 원리, 메모리 컨트롤러의 타이밍 처리 역할, 링커 스크립트(.ld)의 MEMORY/SECTIONS 선언 구조, .data 섹션의 RAM AT FLASH 배치 방식을 다룬다.
임베디드 C의 스타트업 코드를 학습한다. main() 실행 전 수행되는 SP 초기화, 워치독 비활성화, PLL 클럭 설정, .bss 초기화, .data Flash→RAM 복사, C++ 전역 객체 생성자 호출 순서와 각 단계의 역할을 다룬다.