본문 바로가기
임베디드기사

펌웨어

by 목가 2017. 9. 14.
반응형

JTAG

 - JTAG(Joint Test Action Group)는 IC(Integrated Circuit) Level 에서 PCB(Printed Circuit Boards)상에 연결을 검증하는 방법이다.

 - 부품 소자 하나하나를 테스트하는 것은 간단한 테스트만으로도 가능하지만 여러 소자가 모여서 하나의 회로를 만든 경우 이를 테스트하기가 쉽지 않아서 표준화한 방법이다.

 - IEEE Std.-114.1의 표준이다.


JTAG의 발전

 - 보드 위의 IC를 물리적인 Test Probes 없이 테스트 할 수 있는 연결을 제공

 - IC 내에는 Boundary-Scan Cell 이 추가되며, 이것은 각 입출력 핀마다 Multiplexer 와 Latch 를 가지고 있다.


JTAG 특징

 - CPU 가 동작중일 때에는 값을 확인할 수 없다.

 - CPU 가 멈춘상태에서 Memory/Register 값을 확인할 수 있고, 설정할 수 있다.

 - SA1110은 JTAG 를 지원하고, PowerPC 계열으 ㅣ프로세서들은 BDM(Background Debug Mode)을 지원함

 

JTAG 용도

 - 보드의 수명이 끝났을 때 다운로드용으로 사용가능

 - Break 를 지정하거나 Step 단위 동작으로 Source의 해당 라인을 실행하는지의 여부를 확인 가능

 - 전역 변수 및 지역 변수의 값을 확인 가능

 - Task의 Stack 을 열어서 어떤 함수가 실행되었는지 여부와 어떤 값이 들었는지 확인 가능

 - 디버경 용도로 사용가능


스타트업 코드

 - 스타트업 코드란 어셈블리어로 작성된 블록이다.

 - 자동으로 포함되지 않으므로 프로그램 개발 시 이를 직접 조합하여 링커를 통해서 해당 오브젝트 파일을 포함시켜야 한다.

 - Libgloss라는 GNU 패키지 등에는 여러 타깃 프로세서의 시작 코드가 내장되어 좀더 편리하게 개발할 수 있는 환경이 구축되어 있다.


스타트업 코드의 구동 순서

 - 모든 인터럽트를 금지한다

 - 모든 초기화된 데이터를 롬에서 램으로 복사한다.

 - 초기화되지 않은 데이터 영역은 0으로 초기화 한다.

 - 스택을 할당하고 초기화한다.

 - 프로세서의 스택 포인터를 초기화한다.

 - 힙을 생성하고 초기화한다.

 - 모든 전역 변수의 생성자와 초기화를 실행한다.

 - 인터럽트를 허용한다.

 - main() 함수에 해당하는 영역을 실행한다.


하드웨어의 초기화

 리셋코드 -> 하드웨어 초기화 -> 시작코드 -> main()영역 호출


부트로더

1. LILO(Linux Boot Loader)

 - x86 계열에서 가장 널리쓰이는 부트 스트랩 로더이고 대부분 호환성을 위해 배포판이 기본적으로 내장

 - 리눅스 커널을 설치하는 명령(Make Install)을 실행할 때도 LILO를 호출

 - 프롬프트 방식이나 텍스트 메뉴 구동 방식으로 동작하나, 배포판에 따른 특생을 위해 개조하여 사용자 인터페이스로 부팅이 가능하게 만든 경우도 있따.

 - 리눅스뿐만 아니라 다른 운영 체제(가정용/기업용 윈도우)를 부팅할 수도 있다.


2. GNU GRUB(Grand Unified Boot Loader)

 - x86환경에서 LILO를 대체하기 위해 새로 만듬

 - 다중 커널과 다중 운영 체제 부팅을 지원하며 ext2, fat16/32, reiserfs을 인식하므로 부팅하지 않고도 파일 내용과 변경 시각을 확인 가능

 - 동적 설정이 가능(부팅 시간에도 커널의 인자를 조정)

 - 사용자 정의 부팅이 가능하며, 파일 시스템에 직접 접근

 - 사람이 읽을 수 있는 설정 파일 제공 

 - 다양한 파일 시스템 지원, 자동으로 압축 해제 가능

 - 디스크가 없는 시스템을 지원


3. ARMBOOT

 - ARM 과 StrongARM 을 위한 공개 소스 펌웨어

 - 다중형 플래시 메모리 지원, bootp/dhcp/tftp를 사용한 부트, PCMCIA CF 부트 등을 물론이고 PPCBOOT가 제공하는 기능을 대부분 지원

 - 지원하는 보드 종류가 적기 때문에 타깃 보드에 직접 이식해야 함


4. BLOB(Boot Loader Object)

 - SA11x0(StrongARM)용 부트 스트랩 로더

 - 직렬 통신으로 커널 이미지와 램 디스크 다운로드하기, 플래시 굽기, 커널에 인수 전달하기와 같은 기본 기능은 제공하지만 네트워크 부팅과 같은 고급 기능을 제공하지 않으므로 ARMBOOT보다 기능이 떨어짐


5. PPCBOOT

 - MPC 계열에서 사용

 - TCP/IP 네트워크를 사용한 부팅 기능 제공


6. RedBoot

 - 레드헷에서 개발한 임베디드 운영 체제인 eCOS 일부를 사용해 만든 응용 프로그램

 - eCOS 하드웨어의 추상화 계층 위에서 동작

 - 네트워크와 직렬 통신을 사용한 부팅 기능 제공

 - 명령행/스크립팅 인터페이스 제공


7. Angel

 - 인텔에서 만든 아사벨 참조 보드용 기본 부트 스트랩 로더

 - 미니컴이나 하이퍼터미널과 통신하는 기능이 없기 때문에 angelboot 라는 전용 유틸리티를 사용해 접근해야 함


8. UBOOT

 - Universal Bootloader 의 약자로 PPC와 ARM에 기반을 둔 임베디드용 부트로더

 - PPC,ARM,MIPS,SH,x86 등 다양한 CPU를 지원하며, 오픈 소스이다.

 - 어셈블로 되어있는 StartUp 코드를 실행 -> SDRAM 으로 Relocation, start_armboot() 호출 -> Flash 메모리, 네트워크, Console 초기화 -> main_loop 명령어 처리 -> 리눅스 부팅


부트 로더의 기능

 - 운영체제가 시동되기 전에 커널의 올바른 사용을 위해 필요한 모든 작업을 마무리하고, 프로그램 실행

 - 하드 디스크의 첫 번째 부팅 섹터인 MBR(Master Boot Record)에 위치하고 있어 시스템 부팅 시 MBR에 잇는 부트로더를 읽어 들여 운영체제가 부팅할 수 있다.


CPU의 전원관리

1. 아이들(Idle) 모드

 - 여러 프로세서 클럭들이 중지된 상태를 의미(주변 장치에 대한 클럭은 살아 있다.)

 - 임베디드 시스템은 보통 이벤트 기반의 시스템으로 구현되므로 프로세서는 대부분의 시간을 사용자나 외부 세계로부터 이벤트가 발생하기를 기다리는데 소모한다.

 - 프로세서가 사용자로부터 이벤트가 발생하기를 기다리며 아이들(Idel) 모드에 있는 동안은 타이머 인터럽츠 처리와 같은 시스템에 필요한 최소한의 태스크만이 동작한다.


2. 슬립(Sleep) 모드

 - CPU와 대부분의 주변 장치에 대한 전원이 꺼진 상태를 의미

 - 최저의 전력을 소비하는 모드이다.



반응형

'임베디드기사' 카테고리의 다른 글

2017년 임베디드SW기사 실기 (4회차)  (2) 2018.01.23
컴퓨터 구조와 마이크로 프로세서  (0) 2017.09.09
논리회로  (0) 2017.09.05

댓글