임베디드 시스템 - 교차 개발 환경(JTAG에 관하여)
왜 교차개발 환경을 사용할까?
여기서 target 시스템을 우리가 만든 프로그램을 올리고싶은 보드라고 생각해보자. (FPGA 같은 거?)
커널을 올리기 전에는 target 시스템엔 아무 프로그램도 올라가있지 않는다. target 시스템은, 생각해보라. 일반적으로 메모리 용량이 매우 적어서 컴파일러를 포함한 프로그램 개발 환경을 올리기가 어렵다.
그래서 임베디드 시스템 개발을 할 때에는 교차 개발 환경을 사용한다 (!)
교차 개발 환경은 말 그대로 target 시스템 용 프로그램을 별도의 host 시스템에서 개발하는 환경이란 뜻이다. host와 target에 사용되는 프로세서가 다른 경우, 컴파일러의 실행은 host에서 되지만 실행 코드는 target system에서 실행된다.
교차 개발 환경에서 작업을 할 때에는, cross compiler가 필요하다. 크로스 컴파일러란 target system용 실행 파일을 생성하는 컴파일러를 의미한다.
이는 intel-FPGA monitor program을 사용해보면 딱 느낌이 올 것이다
그럼 이제 임베디드 환경에서 우리의 시스템 개발 환경을 보도록 하자
시스템 개발 환경 구성
- JTAG 케이블 : 플래시 메모리 저장용
- Serial 케이블 : 터미널용
- Ethernet 케이블 : 네트워크용 (tftp, NFS)
위 사진을 보면 알 수 있듯이, host에서는 우리가 프로그램을 직접 짜는 곳이다. 이 곳에서 부트로더와 운영체제, 그리고 우리가 만들고싶은 프로그램을 개발해주어야 한다. 여러 케이블들을 통해 개발한 SW들이 target system으로 가는데, 이 곳에서는 실행만 시킨다.
부트로더(Bootloader) 설치는 어떻게 하나?
부트로더는 설치되는 디바이스에 따라서 설치 방법이 다양하다. 가장 대중적으로 사용되는 방법은 아무래도 플래시 메모리를 사용하는 방법인데, 이는 또 탈부착이 가능한지 여부에 따라 나뉜다.
내가 학교 수업시간에 사용한 실습 키트는 DE1-SoC로, SD카드에 리눅스 이미지를 저장하고 보드에 장착하여 사용하였다.
그럼 이제 플래시 메모리 저장용으로 사용되는 JTAG 케이블에 대해서 알아보자.
JTAG이란
- PCB와 IC를 테스트 하기 위한 목적으로 제정된 표준
- Boundary Scan Test를 이용하여 외부의 핀을 조사하거나 제어할 수 있도록 함
- 전체적인 인터페이스는 5개 핀에 의해 제어함.
(TDI, TMS, TCK, nTRST, TDO)
JTAG의 기능
- 프로세서의 상태와는 상관없이 디바이스의 모든 외부 핀을 구동시키거나 값을 읽어들일 수 있는 기능을 제공함
- 회로의 배선과 소자의 전기적 연결 상태를 테스트함
- 디바이스 간 연결상태를 테스트함
- Flash Memory Programming (fusing)
JTAG - Boundary Scan Test Interface
JTAG은 칩 내부에 Boundary Cell이란 것을 두어 외부의 핀과 일대일로 연결시켜 프로세서가 할 수 있는 동작을 중간에 Cell을 통해 모든 동작을 인위적으로 수행하게 한다. 그래서 여러가지 하드웨어 테스트나 연결 상태 등을 체크할 수 있다.
JTAG을 이용한 Flash Memory Fusing
JTAG compiant device를 통하여 Flash memory의 fusing을 수행한다.
부트로더 프로그램을 최초로 플래시 메모리에 저장할 때 사용하며, 그 이후에는 부트로더의 명령어를 사용하여 플래시 메모리의 내용을 변경한다.
결론 요약은 아래 그림
'Computer Engineering > 임베디드 시스템' 카테고리의 다른 글
임베디드 리눅스 커널 프로그래밍(3) - 시스템 호출 함수 구현 (0) | 2019.06.12 |
---|---|
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수 (0) | 2019.06.11 |
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항 (2) | 2019.06.11 |
ABI와 EABI (0) | 2019.06.11 |
툴체인(Tool Chain)이란 (0) | 2019.06.11 |
댓글
이 글 공유하기
다른 글
-
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수
2019.06.11 -
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항
2019.06.11 -
ABI와 EABI
ABI와 EABI
2019.06.11 -
툴체인(Tool Chain)이란
툴체인(Tool Chain)이란
2019.06.11