PhulGrimLab/navilos2
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
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 타깃/에뮬레이터 환경에 따라 경고나 동작 차이가 있을 수 있습니다.