본문 바로가기

Firmware/RTOS

(20)
임베디드 OS 개발 프로젝트 4 4장 부팅과정 작성. 부팅을 하기 위해서는 우선 메모리 설계를 먼저 해야한다. 실행 파일은 메모리를 다섯 가지로 나누어 사용한다. text 영역: 코드가 있는 공간. data 영역: 전역변수가 있는 공간. Stack 영역: 지역변수, 함수 복귀 주소가 들어있는 공간. heap 영역: 코드 실행 중 동적으로 할당하여 사용하는 공간. 이때 stack 영역은 동작 모드별 스택, 테스크 스택 별로 나누며 그림으로 나타내면 다음과 같다. 위 메모리를 실제 정의하는 코드는 다음과 같다. /* * MemoryMap.h */ #define INST_ADDR_START 0 #define USRSYS_STACK_START 0x00100000 #define SVC_STACK_START 0x00300000 #define IR..
임베디드 OS 개발 프로젝트 3 링커스크립트 분석 링커스크립트는 elf 파일을 만들기위한 프로그램으로 여러 오브젝트 파일을 묶어서 하나의 실행 파일로 만드는 프로그램이다. ENTRY(vector_start) SECTIONS { . = 0x0; .text : { *(vector_start) *(.text .rodata) } .data : { *(.data) } .bss : { *(.bss) } } ENTRY 지시어는 시작 위치의 심벌을 지정한다. . = 0x0; 은 첫번째 섹션 메모리 주소를 알려준다.(작성할 때 띄어쓰기 꼭 하자 안했다가 에러떠서 좀 헤멨음) 그 외 순서대로 .text 섹션과 .data 섹션, .bss data 섹션이 오도록 설정하였다.
임베디드 OS 개발 프로젝트 2 드 자동화 하기 위한 Makefile 작성. 책에 clean 부분 오타가 있어서 수정함. rm -fr -> rm -rf 또한 Ubuntu 18.04 에서는 arm-none-eabi-gdb가 존재하지 않으므로 그자리에 gdb-multiarch로 수정해서 쓰면 된다. ARCH = armv7-a MCPU = cortex-a8 CC = arm-none-eabi-gcc AS = arm-none-eabi-as LD = arm-none-eabi-ld OC = arm-none-eabi-objcopy LINKER_SCRIPT = navilos.ld ASM_SRCS = $(wildcard boot/*.S) ASM_OBJS = $(patsubst boot/%.S, build/%.o, $(ASM_SRCS)) navilos =..
임베디드 OS 개발 프로젝트 1 http://www.yes24.com/Product/Goods/84909414 임베디드 OS 개발 프로젝트 무작정 따라하기(저자:이만우) 책 구매후 시작.. 책에서 쓰는 QEMU는 ARM64 리눅스 분석에 사용한적 이 있음 다만 여기선 QEMU-SYSTEM-AARCH64 -> QEMU-SYSTEM-ARM 으로 사용함. RTOS를 만들기 위해 처음으로 제작하는 파일은 ENTRY.S 파일이다. WHY?? ARM 코어에 전원이 들어가면 리셋 벡터에 있는 명령을 실행한다. 0x00000000 주소 시작한다. 현재 작성된 Entry.S 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 .text ...