[OS 개발] 1일차: 세팅 및 skeleton 작성하기
OS

[OS 개발] 1일차: 세팅 및 skeleton 작성하기

반응형

개요

커널 공부만 하고 있다가 C언어 실력도 같이 늘려야겠다고 생각해서 미니 플젝할까 생각했지만 그냥 제대로 해보려고 「임베디드 OS 개발 프로젝트」(이민우 저) 책 가지고 OS를 만들어보려고 합니다.

중간에 끊어지지 않게(제발ㅎㅎ) 해보겠습니다.

자세한 설명은 많이 하지 않을 예정입니다. 중요하거나 상기시키고 싶은 부분은 하겠지만 기본적으로 설명은 책에 있는 것을 봐주시기 바랍니다.

Setting

1. 윈도우에 WSL 2 설치하고 리눅스 세팅 - Ubuntu 20.04

2. 컴파일러 설치 - gcc-arm-none-eabi (명령어로는 arm-none-eabi-gcc)

3. QEMU 설치 - qemu-system-arm
qemu-system-arm -M ? 으로 사용 가능한 머신 확인.
ARM 사의 ARM RealView Platform Baseboard 기준으로 구현할 예정.
머신 이름은 realview-pb-a8.

시작하기

리셋 벡터

ARM 코어에 전원 들어가고 제일 먼저 하는 일인 리셋 벡터(reset vector) 호출 (addr: 0x00000000).

Entry.S

.text
    .code 32

    .global vector_start
    .global vector_end

    vector_start:
        mov r0, r1           ; useless 
    vector_end:
        .space 1024, 0       ; 0x0 * 1024 padding
.end

실행 파일 만들기

링커 스크립트를 작성해 링커 동작 제어하기.

소스코드 디렉토리 트리의 최상위 디렉터리에 저장.

하드웨어에 맞는 펌웨어의 섹션 배치를 위해 필요함.

navilos.ld

ENTRY(vector_start)
SECTIONS
{
    . = 0X0;  /* first section is located at 0x00000000 */


    .text :
    {
        *(vector_start)
        *(.text .rodata)
    }
    .data :
    {
        *(.data)
    }
    .bss :
    {
        *(.bss)
    }
}
arm-none-eabi-ld -n -T ./navilos.ld -nostdlib -o navilos.axf boot/Entry.o

링커 옵션

  • -n: 섹션 정렬 자동화 금지
  • -T: 링커 스크립트 파일 위치
  • -nostdlib: 자동으로 표준 라이브러리 링킹 금지
  • -o: 결과물 파일 이름 지정

 

반응형