Embedded 13

[Embedded] 부트 로더(Boot loader)

부트로더란(boot loader) 부트로더란 장치에 생명을 불어넣고 부트 절차를 시작하는 것이다. 즉, 부트로더는 시스템을 시작시키고 운영체제 커널을 로드하는 것이다. ​ 부트로더가 하는 일 임베디드 리눅스 시스템에서 부트로더는 시스템을 기본 수준(basic level)으로 초기화하고 커널을 로드하는 2가지의 주요 작업을 수행한다. 전원을 켜거나 부트로더 코드의 첫 줄이 실행되면 시스템은 아주 최소 상태에 있다. 이때 DRAM 컨트롤러가 시작하지 않았기 때문에 주 메모리에는 접근할 수 없다. 마찬가지로 다른 인터페이스도 구성되지 않았기 때문에 NAND 플래시 컨트롤러, MMC 컨트롤러 등을 통해 접근하는 저장소도 사용할 수 없다. ​ 결과적으로 시스템 부트스트랩은 몇 단계의 코드로 이루어지며, 각각의 시..

Embedded/이론 2022.11.15

[Embedded] 툴체인(Toolchain)

툴체인(toolchain)이란? 소스 코드를 타겟(target) 장치에서 실행할 수 있는 실행 파일로, 컴파일러, 링커, 런타임 라이브러리를 포함하는 컴파일 도구의 집합이다. 부트로더, 커널, 루트 파일시스템을 빌드하기 위해서 툴체인이 필요하다. ​ 흔히 리눅스용 툴체인은 GNU 프로젝트에서 만들어진 요소에 기반을 두고 있다. ​ 표준 GNU 툴체인은 3가지 주요 요소로 이루어져 있다. ​ Binutils 어셈블러와 링커를 포함하는 바이너리 유틸리티의 집합이다. ​ GCC(GNU Compiler Collection) C, C++ 등 여러 언어를 위한 컴파일러이다. 공통 백엔드를 사용해 어셈블러 코드를 만들고, GNU 어셈블러로 넘긴다. ​ C 라이브러리 POSIX 규격에 기반을 둔 API로 응용 프로그램..

Embedded/이론 2022.11.15

[Embedded] 임베디드 리눅스란

임베디드 리눅스는 간단하게 스마트폰, 셋톱 박스, TV, 라우터 등 부터 크게는 산업용 장치, 의료 감시 장치 등 임베디드 컴퓨터 시스템 상에서 사용하는 리눅스를 일컫는 말이다. ​ 리눅스는 1991년에 최초 버전이 출시 되었는데, 약 8년 뒤인 1999년 정도에 처음으로 임베디드 장치에 쓸만해 졌다. 액시스(Axis Communication)의 네트워크 카메라, 티보(Tivo)의 DVR(Digital Video Recorder) 출시를 시작으로, 임베디드 리눅스가 보편화되어 사용하게 되었다. ​ 임베디드 장치에 리눅스가 탑재되어 사용된 이유는 임베디드 제품이 더욱 복잡하고, 다양한 기능들이 많아져 운영체제가 필요하게 된 것이다. 예를 들어, TV는 단순히 영상만 보여주기만 하는 것이 아닌, 인터넷에 연..

Embedded/이론 2022.11.15

[Embedded] 상태 레지스터 구조

ARM의 상태 레지스터 내부 구조 ARM은 2가지의 상태 레지스터(Status Register) 종류를 가지고 있으며, 1개의 CPSR과 6개의 SPSR로 구성된다. 각각의 종류 모두 내부 구조는 32bit 길이로 동일하다. ​ 각각의 비트에 따라 동작 모드, ARM/Thumb 명령어 상태, 인터럽트 상태, ALU 연산 결과에 대한 정보를 저장한다. 플래그 비트(Flag Bit) 플래그의 뜻은 어원은 깃발을 들거나 내리는 행위를 말한다. 프로그래밍 개념에서는 무엇인가를 기억해야하거나 또는 다른 프로그램에게 약속된 신호를 남기기 위한 용도로, 프로그램에 의해 사용되는 미리 정의된 비트를 말한다. ​ 상태 레지스터에서 플래그 비트는 ALU의 연산 결과에 대한 상태 정보를 나타낸다. ALU의 연산 결과에 따라..

Embedded/이론 2022.11.15

[Embedded] ARM 구성 레지스터

ARM Register ARM 프로세서는 32비트 길이의 레지스터를 총 40개 가지고 있다. 데이터 연산을 할 때 사용하는 범용 레지스터(General Purpose Register) 32개, 프로세서의 동작 상태를 나타낼 때 사용하는 상태 레지스터(Status Register) 7개 프로그램을 제어할 때 사용하는 프로그램 카운터(PC, Program Counter) 1개로 구성되어 있다. ​ 범용 레지스터(General Purpose Register) 범용 레지스터는 데이터 처리나 데이터 전송 등 다양한 목적으로 사용된다. 32개의 범용 레지스터는 8가지의 ARM 동작 모드에서 공유하여 사용하는 레지스터와 각 동작 모드별로 할당된 레지스터가 있다. 각 동작 모드별로 할당되는 레지스터는 서로 다른 동작 ..

Embedded/이론 2022.11.15

[Embedded] ARM 동작 모드와 레지스터

ARM 프로세서의 동작 모드 ARM 프로세서의 동작 모드는 프로세스가 어떤 권한을 가지고 어떤 종류의 작업을 처리하는지를 나타낸다. ARM에서 제공하는 모드는 총 8가지 동작 모드가 있다. ​ 유저 모드와 시스템 모드를 제외한 다른 동작 모드는 모두 외부의 요청이나 오류에 의해 전환이 이루어진다. 유저 모드와 시스템 모드는 외부의 요청이나 오류가 아닌 프로그래밍 필요에 의해 S/W 적으로만 변경할 수 있다. ​ ARM에는 상태 레지스터(Status Register)가 존재하는데, 이 레지스터의 값을 수정하여 각각의 동작 모드를 제어할 수 있다. ​ User Mode 유저 모드는 ARM이 User Task, Application 등을 수행할 때의 동작 모드이다. 유저 모드를 제외한 다른 모드들과 다르게 유..

Embedded/이론 2022.11.15

[Embedded] ARM의 개요

ARM(Advanced RISC Machine)이란 1985년 영국의 아콘 컴퓨터(Arcon Computers) 에서 처음 개발을 시작하여 만든 프로세서이다. 이 때, 초기 ARM의 이름은 Acorn RISC Machine 으로 시작한 것이 ARM의 시작이었다. 이후 약 5년 뒤 1990 Apple, VLSI Technology 라는 두 회사와 아콘 컴퓨터, 총 세 회사의 조인트 벤처로 생겨났다. 세 회사가 합작회사를 설립하고 이름을 Advanced RISC Machine 으로 변경하였고, 이 ARM이 지금까지 이어져 오고 있다. ​ ARM 프로세서는 현재 임베디드 기기에서 가장 많이 사용되는 RISC 기반의32bit 프로세서이다. 저전력을 기반으로 설계된 ARM은 스마트폰을 비롯한 각종 다양한 전자기기..

Embedded/이론 2022.11.15

[Embedded] 임베디드 시스템의 메모리 종류

메모리(Memory)란 메모리(Memory)는 프로그램이나 데이터를 저장하기 위한 장치로, 크게 주기억 장치(Main Memory), 보조 기억 장치(Secondary Memory), 캐시(Cashe)로 나뉜다. ​ 주기억 장치는 프로그램이 수행되는 동안에 프로그램과 데이터를 저장한다. 어떠한 동작을 바이트, 하트워드, 워드 단위에 맞게 수행할 수 있도록 구성되어 있으며, 메모리의 특정 위치에 명령이나 데이터의 접근(Access)하기 위해 주소를 사용한다. 일반적으로 DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory)를 주로 사용한다. ​ 보조 기억 장치는 자주 사용되지 않거나, 당장 사용하지 않는 프로그램이나 데이터를 저장하기 위..

Embedded/이론 2022.11.15

[Embedded] Endian 구조

엔디안(Endian) 이란 엔디안이란 컴퓨터의 메모리와 같이 데이터를 저장하는 공간에서 여러 개의 연속된 대상을 배열하는 방법을 뜻한다. 즉, 데이터가 메모리에 저장되는 순서이다. ​ 메모리는 프로그램과 데이터를 저장하는 공간으로 사용되는데, 메모리 구조에 따라 빅 엔디안(big endian), 리틀 엔디안(little endian)으로 나뉜다. ​ 대표적으로 PC에서 가장 많이 사용되는 Intel의 x86 계열 프로세서가 대표적인 리틀 엔디안 방식을, IBM, Motorora 같은 경우는 빅 엔디안 방식을 사용한다. ​ ARM의 같은 경우 리틀 엔디안과 빅 엔디안 둘 다 사용할 수 있지만 디폴트 값으로 리틀 엔디안 방식을 사용한다. ARM의 경우 기본적으로 외부의 신호에 의해 하드웨어적으로 선택되지만,..

Embedded/이론 2022.11.15

[STM32] RCC 설정용 구조체 및 구동 함수

RCC 설정용 구조체 함수 명 설명 RCC_ClkInitTypeDef 클럭의 초기 설정용 구조체 [DataType] uint32_t ClockType : 설정할 클럭, 이 파라미터는RCC_System_Clock_Type 중의 값 이어야 함 uint32_t SYSCLKSource : 시스템 클럭으로 사용하는 소스, RCC_System_Clock_Source 중의 값 이어야 함 uint32_t AHBCLKVivider : AHB 클럭의 디바이더. RCC_AHB_Clock_Source 중의 값이어야 하고 AHB클럭은 시스템 클럭에 의해 동작됨 uint32_t APB1CLKDivider : APB1 클럭의 디바이더. RCC_APB1_APB2_Clock_Source 중의 값이어야 하고 APB1 클럭은 AHB 클럭..

Embedded/STM32 2022.11.12