피드로 돌아가기
Making a hello-world program in kernel space
Dev.toDev.to
Infrastructure

RISC-V 환경의 0x80200000 커널 로드 및 MMIO 기반 UART 드라이버 설계

Making a hello-world program in kernel space

Sandu Bogdan2026년 4월 27일5advanced

Context

OpenSBI 펌웨어가 0x80000000 주소를 점유하는 RISC-V RV64I 아키텍처의 메모리 제약 사항 분석. C 언어 런타임 환경 부재로 인한 Assembly 기반 스택 설정 및 BSS 섹션 초기화 필요성 대두.

Technical Solution

  • OpenSBI 코드 영역과의 충돌 방지를 위해 커널 로드 주소를 0x80200000로 오프셋 설정
  • TLB Miss 최소화를 위해 커널 메모리를 2MB 단위의 Large Pages 정렬 구조로 설계
  • 16KB 크기의 전용 STACKRAM 영역을 분리 배치하여 데이터 오버플로우 방지 및 Guard Page 효과 확보
  • RISC-V의 단순성을 활용한 MMIO 방식의 UART 드라이버를 설계하여 0x10000000 베이스 주소로 직접 하드웨어 제어
  • volatile 키워드와 fence 명령어를 통한 메모리 쓰기 순서 보장 및 즉각적인 하드웨어 반영 구조 구현
  • Linker Script를 통한 .text, .rodata, .data, .bss 섹션의 명시적 메모리 맵핑 및 ALIGN(16) 적용으로 Misaligned Access Fault 방지

- 임베디드/커널 환경 설계 시 펌웨어 점유 영역을 확인하여 Load Address 충돌 여부 검토 - 메모리 정렬(Alignment) 단위를 하드웨어 요구사항에 맞춰 설정하여 성능 저하 및 Fault 방지 - 하드웨어 레지스터 접근 시 volatile 선언 및 Memory Barrier(Fence) 적용 여부 확인 - Linker Script를 통한 섹션 분리로 스택과 데이터 영역 간의 간섭 차단 구조 설계

원문 읽기