산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 사물 인터넷 기술

Zephyr 기반 IoT 디바이스 디버깅: 입증된 원격 모니터링 관행

Linux Foundation의 Zephyr 오픈 소스 프로젝트는 수많은 IoT 솔루션의 초석이 되었습니다. 리소스 제약 디바이스를 위해 설계된 가볍고 확장 가능한 실시간 운영 체제(RTOS)로, Zephyr는 ARC, Arm, Intel, Nios, RISC-V, SPARC, Tensilica 등 다양한 아키텍처와 250개 이상의 보드를 지원합니다. 오늘날 이 프로젝트는 1,000명의 기여자와 50,000개의 커밋을 자랑하며 지속적으로 멀티 아키텍처 도달 범위를 확장하고 있습니다.

Zephyr 개발은 신뢰성에 주의를 요구합니다. 연구실에서 나타나는 문제는 디바이스가 확장되거나 네트워크 스택이 진화할 때만 사라지는 경우가 많습니다. 비용이 많이 드는 다운타임으로 이어지기 전에 문제를 탐지, 진단, 해결하기 위한 원격 모니터링 및 디버깅을 위한 견고한 전략이 필수적입니다.

농장 동물 모니터링용 GPS 트래커 작업 사례를 고려해 보세요. 각 목걸이는 여러 셀룰러 네트워크, 국가, 로밍 구역에서 원활하게 작동해야 했습니다. 잘못된 구성으로 인한 예기치 않은 전력 소모는 상당한 경제적 손실로 이어질 수 있습니다. 단순히 문제를 플래그하는 것이 아니라 근본 원인을 이해하고 수정안을 배포해야 했기에 실시간 원격 관찰 가능성이 필요했습니다.

우리는 Zephyr를 Memfault, 클라우드 기반 디바이스 관찰 가능성 플랫폼과 결합하여 펌웨어 업데이트, 재부팅, 워치독, 결함, 어서트, 연결성 메트릭을 다루는 모니터링 스택을 구축했습니다.

관찰 가능성 플랫폼 설정

Memfault는 개발자가 원격으로 모니터링, 디버깅, 펌웨어 변경 배포를 할 수 있게 하여 다음을 가능하게 합니다:

Memfault SDK를 Zephyr에 통합하는 것은 간단합니다: west.yml 매니페스트에 모듈을 추가하고 prj.conf에서 활성화하세요.

# west.yml [ ... ] - name: memfault-firmware-sdk url: https://github.com/memfault/memfault-firmware-sdk path: modules/memfault-firmware-sdk revision: master # prj.conf CONFIG_MEMFAULT=y CONFIG_MEMFAULT_HTTP_ENABLE=y

1️⃣ 재부팅에 집중

증가된 리셋 비율은 종종 더 깊은 문제(하드웨어 열화, 펌웨어 버그, 네트워크 이상)의 첫 신호입니다. 하드웨어와 소프트웨어 리셋을 구별함으로써 결함이 광범위한지 아니면 디바이스 하위 집합에 국한된 것인지 파악할 수 있습니다.

재부팅 전 이유 기록

void fw_update_finish(void) { // … memfault_reboot_tracking_mark_reset_imminent(kMfltRebootReason_FirmwareUpdate, ...); sys_reboot(0); }

Zephyr는 리셋 간에 사용자 정의 영역을 보존합니다. Memfault는 여기에 후크하여 재부팅 컨텍스트를 캡처합니다. 재부팅 후, 초기화 핸들러를 등록하여 하드웨어 리셋 이유를 읽고 클라우드로 전송하세요.

static int record_reboot_reason(void) { // 1. 하드웨어 리셋 이유 레지스터 읽기 (MCU 데이터시트 참조) // 2. noinit RAM에서 소프트웨어 리셋 이유 캡처 // 3. 집계를 위해 서버로 데이터 전송 } SYS_INIT(record_reboot_reason, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);

예: 전원 공급 결함은 짧은 기간에 수천 번의 재부팅으로 나타날 수 있습니다. 그림 1은 하루 12,000회 재부팅의 99%가 단 10개 디바이스에 기인한 함대를 보여줍니다. 이는 기계적 또는 배터리 문제일 가능성이 높습니다. 펌웨어 업데이트로 이러한 문제를 완화할 수 있지만, 원격 모니터링을 통해 캐스케이드되기 전에 탐지하고 해결할 수 있습니다.

클릭하면 전체 크기 이미지
Zephyr 기반 IoT 디바이스 디버깅: 입증된 원격 모니터링 관행
그림 1: 전원 공급 이슈, 15일간 재부팅. (출처: 저자들)

2️⃣ 워치독 활용

워치독은 차단된 네트워크 스택, 무한 루프, 데드락, 메모리 손상으로 인한 행(freeze)에 대한 최후의 방어선입니다. Zephyr는 하드웨어 차이를 추상화하는 통합 워치독 API를 노출합니다.

void start_watchdog(void) { struct device *s_wdt = device_get_binding(DT_LABEL(DT_INST(0, nordic_nrf_watchdog))); struct wdt_timeout_cfg wdt_config = { .flags = WDT_FLAG_RESET_SOC, .window.min = 0U, .window.max = WDT_MAX_WINDOW, }; s_wdt_channel_id = wdt_install_timeout(s_wdt, &wdt_config); const uint8_t options = WDT_OPT_PAUSE_HALTED_BY_DBG; wdt_setup(s_wdt, options); } void feed_watchdog(void) { wdt_feed(s_wdt, s_wdt_channel_id); }

Nordic nRF9160의 일반적인 워크플로는:

  1. 워치독용 디바이스 트리 구성.
  2. API를 통한 매개변수 설정.
  3. 워치독 설치.
  4. 주기적으로 공급; 공급 누락 시 재부팅 및 Zephyr 결함 핸들러 트리거.

Memfault는 재설정 전 상태를 캡처하여 문제 코드 경로로 역추적할 수 있게 합니다. 예: 16개월 배포 후 멈추는 SPI 드라이버가 워치독 개시 결함으로 드러납니다. 그림 2는 타임라인과 열화를 보여주며, 그림 3은 결함 핸들러 레지스터 덤프를 보여줍니다.

클릭하면 전체 크기 이미지
Zephyr 기반 IoT 디바이스 디버깅: 입증된 원격 모니터링 관행
그림 2: SPI 드라이버 멈춤 예시. (출처: 저자들)
클릭하면 전체 크기 이미지
Zephyr 기반 IoT 디바이스 디버깅: 입증된 원격 모니터링 관행
그림 3: 결함 핸들러 예시, 레지스터 덤프. (출처: 저자들)

3️⃣ 결함 및 어서트 처리

어서트나 결함이 트리거되면 Zephyr의 결함 핸들러가 CPU 상태를 캡처합니다. Memfault는 이 흐름에 원활하게 후크하여 레지스터, 커널 컨텍스트, 모든 활성 태스크의 스냅샷을 클라우드로 지속시킵니다.

void network_send(void) { const size_t packet_size = 1500; void *buffer = z_malloc(packet_size); // 누락된 NULL 체크로 결함 발생 memcpy(buffer, 0x0, packet_size); } bool memfault_coredump_save(const sMemfaultCoredumpSaveInfo *save_info) { // 레지스터 상태, 커널 & 태스크 컨텍스트, 선택된 .bss/.data 저장 } void sys_arch_reboot(int type) { // … }

주요 진단에는 다음이 포함됩니다:

  1. Cortex-M 결함 상태 레지스터가 원인을 나타냅니다.
  2. Memfault가 정확한 코드 라인과 주변 태스크 상태를 복원합니다.
  3. _kernel 구조가 스케줄러 상태와 연결된 스택의 Bluetooth 또는 LTE 매개변수를 드러냅니다.

4️⃣ 디바이스 수준 메트릭 추적

메트릭은 함대 건강의 정량적 뷰를 제공합니다. 일반적으로 모니터링되는 값에는 CPU 부하, 연결성 메트릭, 열 데이터가 포함됩니다. Memfault의 SDK로 최소한의 코드로 메트릭을 선언하고 보고할 수 있습니다.

  1. 메트릭 정의
MEMFAULT_METRICS_KEY_DEFINE( LteDisconnect, kMemfaultMetricType_Unsigned)
  1. 코드에서 업데이트
void lte_disconnect(void) { memfault_metrics_heartbeat_add( MEMFAULT_METRICS_KEY(LteDisconnect), 1); // … }

Memfault의 클라우드 백엔드는 디바이스와 펌웨어 버전별로 메트릭을 집계하고, 함대 비교와 알림 트리거를 위한 웹 UI를 제공합니다. 일반적인 사용 사례:

클릭하면 전체 크기 이미지
Zephyr 기반 IoT 디바이스 디버깅: 입증된 원격 모니터링 관행
그림 4: 디바이스 관찰 가능성을 위한 메트릭 추적 – NB-IoT 예시, LTE-M 데이터 크기. (출처: 저자들)

결론

Zephyr를 Memfault와 통합함으로써 개발자는 강력하고 엔드투엔드 관찰 가능성 스택을 얻습니다. 네 가지 기둥(재부팅, 워치독, 결함/어서트, 연결성 메트릭)에 집중하면 불투명한 블랙박스였던 디바이스 함대를 투명하고 관리 가능한 시스템으로 전환할 수 있습니다. 더 깊은 통찰을 위해 2021 Zephyr 개발자 서밋의 녹화 프레젠테이션을 시청하세요.

사물 인터넷 기술

  1. 합성 모니터링 마스터하기: 신뢰할 수 있는 SaaS 및 웹 성능을 위한 검증된 모범 사례
  2. 시스코 1G 양방향 트랜시버: 서비스 프로바이더 및 IoT 네트워크 효율성 증대
  3. ETSI, 비상 통신용 IoT 새 표준 수립
  4. IIC와 TIoTA, IoT 보안 및 블록체인 표준 강화를 위해 협력
  5. NIST, IoT 디바이스 보안 강화를 위한 제조사 지침 초안 발표
  6. 아트모직과 SMK, 초장수명 IoT 기기 제공을 위한 파트너십 체결
  7. 자산 관리에 IoT가 필수적인 이유: 3대 핵심 이점
  8. IoT: 정확한 환경 모니터링을 위한 선도적 플랫폼
  9. 산업 전반의 압축 공기 시스템 주요 애플리케이션
  10. 제조업 마케팅: 2019년 성공을 위한 검증된 모범 사례