[dockcross] Docker를 이용한 크로스 컴파일 툴체인 이용하기
By 지훈현서 | 2017년 9월 23일 |
![[dockcross] Docker를 이용한 크로스 컴파일 툴체인 이용하기](https://img.zoomtrend.com/2017/09/23/a0105618_59c5b6cb372d8.png)
라즈베리파이 버전3 모델B는 CPU 아키텍쳐가 ARM 버전 7 (ARMv7) 이었습니다. 좀 더 구체적으로 어떤 임베디드 장비가 있었는데, $ cat /proc/cpuinfo 를 해 보았더니 CPU type이 유사하여라즈베리 파이에서 $ cat hello.c#include <stdio.h>main(){ printf("Hello world for dockcross!n"); return 0;} 와 같은 파일을 컴파일러가 있는 라즈베리파이에서 정상적으로 컴파일 하여, $ gcc -o hello hello.c 그 hello를 임베디드 시스템에 복사하여 실행하였더니 안되는 것이었습니다. 이리 저리 해 보다, $ gcc -static -o hello hello.c
[ARM] 임베디드 개발자가 반드시 ARM 프로세서를 배워야 하는 이유
By Guillermo Austin Kim | 2020년 7월 14일 |
이번 시간에는 ARM 프로세서를 리눅스 시스템 개발자가 배워야 하는 지 설명합니다. 브링업을 제대로 하기 위해서 임베디드 개발자들이 진행하는 프로젝트의 단계는 '보드 브링업 - 기능 안정화 - 유지 보수'로 분류할 수 있습니다.3단계에서 보드 브링업은 어떤 단계를 거쳐 진행될까요? 과제에 따라 다르지만 개발 업무의 내용을 소개하면 다음과 같습니다. * 부트로더에서 스타트업 코드를 작성 * 메모리와 같은 하드웨어를 초기화 먼저 스타트업 코드를 작성하는 업무에 대해서 조금 더 설명을 드려볼까요?전원이 시스템에 들어오면 가장 먼저 실행되는 코드가 reset 익셉션 벡터 코드입니다. 이 코드에서 기본적인 메모리를 설정을 초기화하고 ARM 모드 별로 스택 사이즈를 지정해야 합니다.이 모든 코드를
[ARM] 함수 호출 규약(Calling Convention)이란
By Guillermo Austin Kim | 2020년 9월 27일 |
호출 규약(Calling Convention)이란 무엇일까요? 어떤 함수를 호출했을 때 서브 루틴이 자신을 호출하는 함수로부터 인자를 어떤 방식으로 받아 결과를 반환하는지에 대한 규약입니다. x86, RISC-V와 같은 CPU 아키텍처마다 함수 호출 규약(Calling Convention)을 정의하는데, ARM 프로세서에서는 이를 AAPCS(Procedure Call Standard for ARM Architecture)라고 명시합니다. 앞으로, AAPCS를 함수 호출 규약이라고 명시하겠습니다. 연산을 수행하는 ARM 어셈블리 명령어에서 레지스터는 연산의 결과를 임시로 저장하는 역할에 그칩니다. 그래서 각각 레지스터의 역할을 세세하게 배울 필요가 없는데요. 함수 호출 규약을 배울 때는 다릅니다. 그것은 다
[Arm프로세서][Armv7] 트러스트존(TrustZone): 시큐어 상태와 Secure Control Register(SCR)
By Guillermo Austin Kim | 2021년 12월 29일 |
트러스트존 아키텍처에서 논 시큐어 월드와 시큐어 월드를 기준으로 트러스트존의 주요 개념을 설명합니다. 그런데 Arm 아키텍처의 스팩 문서를 살펴보면 시큐어 상태와 논 시큐어 상태라는 용어를 만나게 됩니다. 시큐어 상태와 논 시큐어 상태는 시큐어 월드와 논 시큐어 월드와 거의 유사한 개념인데, 트러스트존의 구현 레벨에서 쓰이는 용어입니다. 먼저 시큐어 상태와 논 시큐어 상태에 대해 알아봅시다. 어떤 코드가 실행 중인데 현재 코드가 논 시큐어 월드 혹은 시큐어 월드에서 실행 중인지 어떻게 알 수 있을까요? Armv7 아키텍처에서는 이 정보를 저장하는 레지스터를 설계했는데 이를 Secure Control Register(SCR) 레지스터라고 합니다. 이번에는 Arm 스팩 문서를 보면서 Secure Cont