반응형
개요
커널 공부만 하고 있다가 C언어 실력도 같이 늘려야겠다고 생각해서 미니 플젝할까 생각했지만 그냥 제대로 해보려고 「임베디드 OS 개발 프로젝트」(이민우 저) 책 가지고 OS를 만들어보려고 합니다.
중간에 끊어지지 않게(제발ㅎㅎ) 해보겠습니다.
자세한 설명은 많이 하지 않을 예정입니다. 중요하거나 상기시키고 싶은 부분은 하겠지만 기본적으로 설명은 책에 있는 것을 봐주시기 바랍니다.
Setting
1. 윈도우에 WSL 2 설치하고 리눅스 세팅 - Ubuntu 20.04
2. 컴파일러 설치 - gcc-arm-none-eabi (명령어로는 arm-none-eabi-gcc)
3. QEMU 설치 - qemu-system-armqemu-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: 결과물 파일 이름 지정
반응형