본문 바로가기

Firmware

(38)
임베디드 OS 개발 프로젝트 A-1 임베디드 OS 개발 프로젝트 부록 A 정리 A.1.1 익섹션 벡터 테이블 ARM은 전원이 켜지면 리셋벡터테이블을 읽는다. 그 아래 벡터테이블은 정의된 상황이 발생하면 강제적으로 PC값이 정의된 오프셋 주소로 강제 변환하게 된다. exception address에는 명령어 한개만(4Byte) 실행 할 수 있다. 따라서 exception address를 따라가면 exception을 처리하는 코드가 있는 것이 아닌 Branch 하는 명령어가 있다. Cortex-M 에서도 IRQ Interrupt가 발생하면 IRQ Vector -> IRQ Handler -> IRQ CallBack 형식으로 코드를 처리하는 걸 알 수있다. 익셉션이 발생하면 진행 중인 프로그램 흐름이 깨지므로 다시 원래 위치로 복귀할 수 있도록 ..
임베디드 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 ...
stm32cubeIDE (Eclipse) Import Project Header: 프로젝트 폴더를 옮기거나 github에서 다운 받은 프로젝트를 import 방법. 우선 프로젝트를 다운 받는다. 다운 받으면 위 그림과 같이 STM32CUBEMX 와 .PROJECT 파일이 있다 여기서 문제는 IDE를 바로 실행 시키면 ECLIPSE에서 PROJECT를 인식을 못하기 때문에 몇가지 작업이 필요하다 먼저 CUBEMX를 실행 시킨다. Project Name을 복사한다. 다운받은 프로젝트가 바로 실행되지 않는 이유는 상위 디렉토리와 프로젝트 이름이 일치하지 않아 발생한 문제이다. (실제로는 동일하게 수정하지 않아도 문제 없이 실행 된다 하지만 향 후 CubeMX로 프로젝트를 수정 할 경우 CubeMX가 열리지 않는 문제가 발생한다.) 다운받은 폴더 또는 프로젝트 상위폴더 이름을 ..