리눅스(Linux)/기본 지식

MachineWare

engineer4ever 2025. 4. 18. 20:12

 

1. MachineWare란?

- MachineWare는 SoC(System-on-Chip) 수준의 하드웨어 시뮬레이터

- 보드 없이도 SoC 내부 동작을 가상으로 구현하고, 그 위에서 실제 펌웨어, OS, 드라이버 코드를 실행·테스트 가능

  • CPU, 레지스터, 인터럽트, MMIO 장치 등을 가상화
  • QEMU보다 낮은 수준에서 더 정밀한 시뮬레이션 가능
  • 하드웨어가 없을 때도 개발이 가능함

 

2. 동작 방식과 기술 기반

항목
설명
기반 기술
SystemC + VCML (Virtual Component Modeling Library)
프로그램 언어
C++로 작성된 시뮬레이터
실행 환경
Linux 유저 공간 애플리케이션
지원 ISA
Arm, RISC-V, PowerPC 등
입력 바이너리
ELF 실행파일, 커널 이미지, U-Boot 등
디버깅 연동
GDB 서버 탑재 → 일반 GDB로 원격 디버깅 가능
디바이스 모델링
UART, SPI, GPIO, Interrupt Controller 등 포함 가능
실행 형태
커맨드라인 (GUI 없음), CI/CD 통합 용이

 

3. 구조도

┌───────────────────────────────┐

│ Linux Host (x86_64)                                                                            │

│ ┌─────────────────────────┐             │

│ │ MachineWare 시뮬레이터                                                │            │

│ │ ┌───────┐ ┌──────────┐             │            │

│ │ │ CPU                 │ │ UART 등                     │             │            │ ← 가상화된 SoC 구성

│ │ └───────┘ └──────────┘             │            │

│ └─────────────────────────┘             │

└───────────────────────────────┘

  • GDB로 연결 가능 (target remote :1234)
  • 로그, 시리얼 출력을 텍스트로 저장 가능

 

4. 실제 사용 목적

목적
설명
HW 없이 소프트웨어 개발 선행
RTL 또는 실보드 없이 U-Boot, Kernel, BSP 포팅 가능
자동화 테스트 환경 구성
병렬 시뮬레이터 실행으로 회귀 테스트 및 커버리지 확보
시연/데모용 플랫폼 제공
고객에게 물리 보드 없이 데모 가능
시스템 아키텍처 검증
SoC 설계 초기에 아키텍처 레벨 성능/기능 검토 가능
가상 ECU 구성 (자동차)
AUTOSAR 기반 ECU의 기능 단위 통합 검증 가능

 

5. 실제 사용하는 방식

시나리오 1 : 리눅스 BSP 포팅

./simulator \
  -kernel uImage \
  -dtb myboard.dtb \
  -initrd rootfs.cpio.gz \
  -serial stdio \
  -gdb-port 1234
 
  • 부트로더 → 커널 → 루트 파일시스템까지 실행됨
  • 커널 메시지는 가상 UART로 출력

 

시나리오 2 : 자동화 테스트

  • CI/CD 시스템에서 시뮬레이터 수십 개를 병렬로 실행
for i in {1..50}; do
  ./simulator -test test$i.json &
done
 
  • 테스트 조건, 디바이스 레지스터 초기값, 인터럽트 발생 타이밍 등을 json 파일로 제어

 

시나리오 3 : 초기 펌웨어 검증

#define UART0 (*(volatile uint32_t*)0x40011000)
UART0 = 'H';
UART0 = 'i';
 
  • 위 코드를 실행하면, 가상 UART 로그 파일에 "Hi" 출력됨
  • 실기기 UART 동작과 동일하게 동작 확인 가능

 

6. 사용되는 프로젝트 규모

규모
적합성
설명
소형 MCU 프로젝트
부적합
보드 저렴하고 개발 구조 단순함
중형 리눅스 SoC 프로젝트
적합
BSP 포팅, 드라이버 테스트 등
대규모 플랫폼/OS/드라이버 개발
매우 적합
하드웨어 미확정 시점, 자동화가 핵심
수십 명 이상 병렬 개발팀
매우 적합
병렬 테스트, 연속 통합 필수 환경

 

7. 다른 도구와 비교

솔루션
강점
단점
QEMU
빠른 부팅 속도, 무료, 폭넓은 OS 지원, 자동화 친화적
디바이스 모델링 정밀도 낮음, 커스터마이징 한계, 실보드와의 차이 큼
Simics (Intel)
Intel 기반 대형 시뮬레이터.
전체 시스템 수준 시뮬레이션, 복잡한 HW 모델링 가능, 고정밀
고가, 학습 곡선 큼, 개인·중소팀에 비효율
Renode (Antmicro)
IoT용 시뮬레이터.
IoT/MCU에 최적화, 경량, 오픈소스, CI 연계 쉬움
범용 SoC 모델링 한계, 대형 SoC 개발엔 부적합
OVPsim / Imperas
Cycle-accurate, 성능 분석에 최적, 상용 CPU 모델 보유
유연성 낮음, 학습 진입장벽 있음, 일부 ISA만 지원
Trace32 ISS
JTAG 기반 디버거. 실보드 없는 디버깅 가능, Trace32 사용자에 자연스러운 연계
시뮬레이션보단 디버깅 용도, 대규모 시뮬레이션엔 부적합
Synopsys Virtualizer / Cadence VDK
ASIC 수준의 정밀 시뮬레이션, RTL 연계 가능
매우 고가, 설정 복잡, 범용 SW 개발엔 과도
MachineWare
VCML 기반 정밀 SoC 시뮬레이터.
고성능 시뮬레이터, VCML 기반 유연한 HW 구성, CI 친화적
생태계 작음, 사용자 문서 부족, 진입 장벽 있음

 

8. 주요 사용 시나리오

조건
사용 권장 여부
보드가 아직 없음
권장
커널 포팅, 부트로더 개발 중
권장
CI 테스트 자동화가 필요함
적극 권장
임베디드 RTOS 단순 어플리케이션
권장하지 않음
JTAG으로 실시간 디버깅 필요
권장하지 않음 (Trace32이 적합)

 

9. 도입 시 고려사항

  • 시뮬레이터 설정/구축에는 VCML, SystemC 지식 필요
  • 보드가 없을 때만 쓰는 게 아님 — "자동화 기반 테스트/CI 통합"이 핵심
  • 하드웨어 정확한 사양 없이 시뮬레이터 구성하면 실기기와 차이날 수 있음

요약 정리

핵심 문장
설명
보드 없이도 실제 코드 실행
시뮬레이터 위에서 U-Boot, 커널, 펌웨어 실행 가능
자동화 테스트에 최적화
병렬 실행, 로그 분석, CI/CD 통합
소형 MCU 용도는 아님
SoC 기반 BSP/OS 레벨 개발용
JTAG 디버거와는 전혀 다름
실기기 디버깅은 Trace32가 적합
리눅스 기반에서 동작
호스트 OS는 Linux, 시뮬레이션 대상 OS는 자유