[소프트웨어로만 된 모니터]
널리 사용되는 디버깅 툴을 또 소개합니다. 바로 모니터입니다. 모니터는 인 서킷 에뮬레이터와 비슷한 인터페이스를 제공하면서 소프트웨어를 실제로 타깃 마이크로프로세서에서 돌리 해줍니다. 그러나 모니터들은 서로 매우 다르기 때문에, 가지고 있는 모니터가 어떤 것인지를 주의 깊게 조사해야 합니다. 일반적인 모니터가 동작하는 방법 중 하나를 소개하면 다음과 같습니다.
- 모니터의 한 부분은 타깃 시스템의 ROM에 상주하면서, 시리얼 포트나 네트워크를 통해 소프트웨어를 받고, RAM에 그것을 올리고, 실행시키는 것을 아는 작은 프로그램입니다. 종종 이런 프로그램은 브레이크 포인트를 설정할 수 있고, 메모리와 레지스터의 값을 조사하고 설정할 수 있으며, 응용 프로그램 디버거의 많은 기능을 수행합니다. 이런 프로그램에 통일된 이름은 없습니다. 제조 회사들은 타깃 에이전트(Target Agent), 모든 툴에 적용되는 같은 용어인 모니터, 일반적인 커널과는 다른 디버깅 커널 등의 이름을 사용합니다. 디버깅 커널이라는 말은 어디에서 쓰이는지도 살펴봅시다.
- 모니터의 다른 부분은 호스트에서 수행되면서 네트워크나 시리얼 포트를 통해서 디버깅 커널과 통신을 하는 프로그램입니다. 이런 프로그램은 디버깅 사용자 인터페이스를 제공합니다.
- 평소처럼 프로그램을 작성하고 컴파일하거나 어셈블 합니다. 모니터 프로그램에 따라서 로케이터를 수행하거나 수행할 필요가 없게 됩니다. RTOS 제주 회사로부터 모니터를 구입한 경우, RTOS를 시스템에 넣을 필요가 있을 수도 있고 없을 수 도 있습니다.
- 호스트에서 돌아가는 프로그램은 디버깅 커널과 협력해서 컴파일된, 아마 로케이트 된 프로그램을 타깃 시스템이 가지고 있다면 그것의 RAM이나 플래시에 다운로드합니다. 다운로드 동안에 로케이터의 기능이 수행됩니다.
- 모니터에게 브레이크를 설정하고 프로그램을 실행하는 등의 명령을 내릴 수 있습니다. 호스트 시스템에서 돌아가는 사용자 인터페이스가 실행되면서 명령을 타깃에서 돌아가는 디버깅 커널에 중개합니다.
모니터는 하드웨어에 어떤 수정도 없이 디버깅 인터페이스를 제공한다는 점에서 매우 높게 평가됩니다. 그래서 소프트웨어로만 된 모니터라는 말이 나온 것이고요. 그러나 이번에도 역시 단점을 피해 갈 수는 없겠죠. 완벽한 건 매우 드문 게 현실이니까요.
- 디버깅 커널과 호스트 프로그램은 통신을 하기 위해서 타깃의 하드웨어를 사용합니다. 이것은 타깃 하드웨어가 이런 목적으로 준비된 통신 코드를 가지고 있어야 한다는 것을 의미합니다.
- 제조 회사는 표준 하드웨어 플랫폼에서 동작하도록 툴을 만들었고, 테스트하려는 타깃 시스템은 어느 정도 제조회사가 생각하는 표준 하드웨어 플랫폼과는 다를 것이기 때문에 디버깅 커널을 타깃에서 돌리기 위해서 포팅을 해야 합니다. 보드 지원 패키지가 이런 것을 해결하는데 도움을 줄 수 있습니다. 그러나 모니터가 동작하도록 통신용 하드웨어 드라이버를 작성하고 디버깅해야 합니다.
- 궁극적으로 ROM에 디버깅 커널을 넣어서가 아니라 소프트웨어만 넣어서 제품을 선적할 것이기 때문에 어느 순간부터는 디버깅 커널을 타깃 시스템에서 제거하고 디버깅 커널 없이 소프트웨어를 수행시켜 봐야 합니다. 만약에 이 시점에서 소프트웨어가 작동하지 않는 경우에는 소프트웨어의 최종 버전을 디버깅하기 위해 다른 툴을 찾아봐야만 합니다.
- 대부분의 모니터는 로직 어날라이저나 에뮬레이터처럼 트레이스를 저장할 수는 없습니다.
- 표준 디버깅 인터페이스를 사용해서 임베디드 시스템을 디버깅할 때는 매우 주의 깊게 행동해야 합니다. 예를 들자면 브레이크 포인트에서 프로그램 실행을 멈추는 것은 RTOS를 상당히 혼란스럽게 하기 때문에 이런 방법으로 디버깅하는 것은 어렵거나 불가능할 수도 있거든요. 텔레그래프 같은 시스템을 브레이크 포인트에서 멈추게 할 수 있지만, 네트워크에 있는 다른 시스템은 텔레그래프 시스템으로부터 응답을 받지 못하게 되어, 텔레그래프가 다운되었다고 생각하고 통신을 멈출 것입니다. 따라서 텔레그래프의 실행을 브레이크 포인트에서 한번 멈추게 하면 다시 실행시키는 것은 불가능합니다.
[또 다른 모니터]
모니터를 구성하기 위해서 두 가지의 다른 방법이 광범위하게 사용됩니다. 각각은 앞에서 말한 소프트웨어로만 된 모니터와 비슷하게 호스트에서는 유저 인터페이스를 제공하고 토신 연결을 통해서 타깃과 통신을 합니다. 차이점은 어떻게 타깃과 통신하느냐에 달려있습니다.
ROM 에뮬레이터를 사용해서 타깃과 통신을 하는 방법이 있습니다. 가상의 ROM에 다운로드하는 ROM 에뮬레이터 프로그램에 더해서, ROM 에뮬레이터에 있는 소프트웨어는 호스트 프로그램이 브레이크 포인트를 설정하고 다른 디버깅 동작을 수행하도록 하게 해 줍니다. ROM 에뮬레이터 소프트웨어는 이런 기능들을 수행하기 위해서 어떤 종류의 타깃 마이크로프로세서를 사용하는지 알아야 합니다. 그리고 디버깅 커널은 완전히 ROM 에뮬레이터 안으로 숨어 버리기 때문에, 디버깅 커널은 타깃 ROM의 공간을 차지하지 않습니다.
두 번째 타깃 인터페이스는 JTAG 포트라고 불리는 특정한 마이크로프로세서와 특별한 통신 포트가 제공하는 기능을 이용하는 겁니다. 호스트로부터 나온 6가닥 정도의 케이블이 타깃 마이크로프로세서하고 연결된 JTAG 포트에 연결되고, 호스트에 있는 프로그램은 케이블을 통해 타깃 마이크로프로세서를 제어합니다.
분명히 이렇게 하기 위해서, 이런 기능을 제공하는 마이크로프로세서를 사용해야 하고, 얻게 되는 기능은 제조 회사가 어떤 서비스를 마이크로프로세서에 설계해서 넣었는지에 따라 달라지게 됩니다. 이런 기능을 때로 백그라운드 디버그 모니터, 아니면 BDM이라고 부릅니다.
이 방법들은 소프트웨어로만 된 모니터가 가진 문제들을 극복하는데 도움을 줍니다.
- 디버깅을 위해서 타깃에 통신 포트가 있을 필요가 없음. 그러나 타깃의 JTAG 포트를 위해 커넥터를 만들어야 함.
- 이 내용은 모두 하드웨어 설계와는 무관함. 호스트와 타깃 사이에 통신을 하기 위해서, 어떤 경우는 ROM 에뮬레이터를 사용하고, 또 다른 경우는 타깃 마이크로프로세서에 있는 포트를 사용함.
- 추가적인 소프트웨어가 ROM에 올라갈 필요가 없음. 모니터와 함께 돌리는 것을 멈췄을 때, 소프트웨어의 동작이 변하지 않음.
참고)
임베디드 소프트웨어 디버깅 장비1 - 전압계/저항계, 오실로스코프
[실험실의 장비를 사용해야 하는 이유] 이전에 아무리 소프트웨어를 주의 깊게 테스트했다고 하더라도 결국에는 실험실에서 실제로 시스템을 테스트하고 디버깅해봐야 합니다. 어떤 자료를 보�
ppojjaknews.tistory.com
임베디드 소프트웨어 디버깅 장비2 - 로직 어날라이저
[로직 어날라이저] 로직 어날라이저는 신호를 가로채서 화면에 그래프로 보여주는 또 다른 장비입니다. 이런 것은 오실로스코프와 같지만, 몇 가지 기본적인 면에서 오실로스코프와 차이가 있��
ppojjaknews.tistory.com
임베디드 소프트웨어 디버깅 장비3 - 인 서킷 에뮬레이터
새로운 장비인 인 서킷 에뮬레이터를 설명하기에 앞서서 지난번까지 알아봤던 로직 어날라이저에 대한 내용을 조금 더 살펴보고 지나가겠습니다. 스테이트 모드의 유용성과 전체적인 단점에 ��
ppojjaknews.tistory.com
[임베디드 시스템 디버깅 전체 요약]
- 고객은 임베디드 시스템의 버그에 대해서는 자비롭지 않고, 이런 버그는 찾아내기가 매우 어렵기 때문에, 처음부터 버그가 가급적 적은 소프트웨어를 작성하는 것이 애플리케이션 개발에 비해서 임베디드 시스템 개발에서 훨씬 더 중요함. 세상에는 많은 툴과 테크닉이 있기에 가장 적당한 조합을 찾아서 사용해야 함.
- 호스트 시스템은 타깃보다는 테스트하기에 훨씬 친숙한 환경이라는 것.
a. 호스트에서 테스트하기 위해서, 하드웨어 의존적인 코드를 대체하기 위해서 테스트용 시뮬레이터 코드를 작성할 필요가 있음. 어떤 기능을 테스트용 시뮬레이터 코드로 대체할 것인지를 고려해야 함. 당연하다고 생각되는 선택이 항상 최상은 아님.
b. 테스트용 시뮬레이터 코드는 타이머 인터럽트 루틴을 포함해서 인터럽트 루틴들을 호출해야 함.
c. 또한 간단한 스크립트 언어를 이해할 수 있어야 함. 그 결과를 파일에 출력해야 함.
d. 복잡한 코드를 작성하느라 시간을 소비하는 것은 더 많은 코드를 쉽게 테스트할 수 있도록 하기 때문에 때로는 가치 있는 일임.
e. 테스트용 시뮬레이터 시스템은 타깃 하드웨어, 응답성, 작업 처리량, 공유 데이터, 추가로 이식성에 관련된 문제들은 다루지 못함.
- 명령어 시뮬레이션은 호스트에서 돌아가면서 타깃 마이크로프로세서와 메모리를 흉내 내는 프로그램임. 다른 장점들 중에서, 시뮬레이터는 응답성과 작업 처리량을 결정할 수 있게 하고 스타트업 코드를 테스트하도록 도와줌.
- assert 매크로는 코드를 작성할 때 세운 가정들을 테스트하고 이런 가정들 중의 하나라도 잘못되면 바로 프로그램을 정지시킴. assert 매크로를 타깃 시스템에서 돌아가게 하려면 어느 정도 노력을 해야 함. 제품을 선적할 때는 매크로가 아무 일도 하지 않도록 컴파일해야 함.
- 전압계, 저항계, 그리고 멀티미터는 하드웨어가 동작하는 지를 검사하는데 도움을 줌.
- 오실로스코프는 하드웨어에 있는 더 기괴한 문제들을 발견하는데 도움을 줌. 스토리지 스코프는 한번 발생하는 이벤트도 저장할 수 있음. 일반적인 오실로스코프는 주기적으로 반복되는 이벤트를 찾는데 대단히 유용함.
- 오실로스코프의 접지선은 꼭 회로에 연결해야 함.
- 로직 어날라이저는 동시에 많은 시그널들을 측정할 수 있지만 단지 VCC와 그라운드 두 전압으로만 나타낼 수 있음.
- 타이밍 모드의 로직 어날라이저는 어떤 이벤트가 발생하는데 얼마나 걸렸는지를 말해주고, 시그널의 패턴을 보여주고, 무엇이 그런 이벤트가 발생하게 했는지를 찾을 수 있도록 해줌.
- 스테이트 모드의 로직 어날라이저는 마이크로프로세서가 실행한 명령어들의 리스트인 트레이스를 저장할 수 있음.
- 인 서킷 에뮬레이터는 많은 표준 디버거의 기능을 타깃 시스템에 적용함.
- 부품이 갈수록 작아지고 시그널 선들이 점점 가까워지기 때문에, 하드웨어에 연결하는 것은 계획과 탁월한 기술을 필요로 함.
- ASIC, SOC, RISC 기술들은 무엇이 진행되고 있는지 아는 것을 더 어렵게 만듦.
- 모니터는 표준 디버깅 기능을 제공하기 위해서 소프트웨어와 하드웨어의 조합을 사용함.
'IT > 임베디드 시스템' 카테고리의 다른 글
임베디드 소프트웨어 디버깅 장비3 - 인 서킷 에뮬레이터 (0) | 2020.07.03 |
---|---|
임베디드 소프트웨어 디버깅 장비2 - 로직 어날라이저 (0) | 2020.07.02 |
임베디드 소프트웨어 디버깅 장비1 - 전압계/저항계, 오실로스코프 (0) | 2020.07.01 |
디버깅 테크닉 - 명령어 시뮬레이션 & assert 매크로 (0) | 2020.06.25 |
디버깅을 위한 호스트 시스템에서의 테스팅3 - 고급기술 그리고 반론/단점 (0) | 2020.06.23 |
댓글