Skip to content

PhulGrimLab/navilos2

Repository files navigation

Navilos (ARMv7-A Bare-metal OS Study Project)

0) 프로젝트 시작
- "임베디드 OS 개발 프로젝트" 이만우 저
- 위의 책의 내용을 실습한 프로젝트 입니다.

1) 프로젝트 개요
- Navilos는 ARMv7-A(Cortex-A8) 대상의 간단한 베어메탈 커널 학습 프로젝트입니다.
- QEMU의 RealView PB-A8 보드를 대상으로 부팅, 예외 벡터, 인터럽트, 타이머, UART, 태스크 전환(라운드 로빈)을 구현합니다.

2) 핵심 기능
- 부트/벡터 테이블: boot/Entry.S
  - 예외 벡터 구성(reset/undef/svc/pabort/dabort/irq/fiq)
  - CPU 모드별 스택 초기화 후 main() 진입
- 인터럽트 처리: boot/Handler.c, hal/rvpb/Interrupt.c
  - IRQ/FIQ 핸들러 진입
  - GIC CPU 인터페이스/Distributor 초기화
  - 인터럽트 핸들러 등록/실행
- UART: hal/rvpb/Uart.c
  - UART 초기화, 문자 송수신, RX 인터럽트 에코
- 타이머: hal/rvpb/Timer.c
  - 주기 인터럽트 기반 1ms 카운터 증가
- 커널 스케줄링: kernel/task.c, lib/switch.c
  - TCB/스택 초기화
  - 태스크 생성
  - 라운드 로빈 스케줄링
  - 컨텍스트 저장/복원(어셈블리)

3) 디렉터리 구조
- boot/ : 벡터/핸들러/초기 진입 코드
- hal/ : 하드웨어 추상화 계층(UART/Timer/Interrupt)
- include/ : 공통 헤더, 메모리 맵, CPU 정의
- kernel/ : 커널 API 및 태스크 스케줄러
- lib/ : 저수준 유틸(컨텍스트 스위치, printf/stdlib 일부)
- build/ : 빌드 산출물

4) 빌드 환경
- OS: Linux/WSL 권장
- 툴체인
  - arm-none-eabi-gcc
  - arm-none-eabi-objcopy
  - qemu-system-arm
  - gdb-multiarch (디버깅 시)

5) 빌드/실행 방법
- 클린 빌드
  - make clean
  - make all
- 실행 (시리얼 콘솔 출력)
  - make run
- 디버그 대기 실행 (GDB 접속 대기)
  - make debug
- GDB 실행
  - make gdb

6) GDB 빠른 시작 예시
1. 터미널 A: make debug
2. 터미널 B: gdb-multiarch build/navilos.axf
3. GDB에서:
   - target remote :1234
   - break main
   - continue

7) 메모리/링크 정보
- 링크 스크립트: navilos.ld
  - 코드 시작 주소: 0x00000000
- 메모리 맵 정의: include/MemoryMap.h
  - 모드별 스택, 태스크 스택, 글로벌/동적 영역 기준 주소 정의

8) 현재 main() 동작 요약
- 하드웨어 초기화(UART/GIC/Timer)
- UART로 초기 문자열 출력
- debug_printf 테스트 출력
- 커널 초기화 후 태스크 3개 생성 (User_task0/1/2)
- Kernel_start()로 태스크 실행 시작

9) 참고 사항
- 프로젝트는 학습 목적의 최소 커널 구조입니다.
- 표준 라이브러리 의존을 줄이기 위해 일부 기능을 직접 구현합니다.
- ARM 타깃/에뮬레이터 환경에 따라 경고나 동작 차이가 있을 수 있습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors