내장 테스트(BIT) 시스템의 이점

개요

내장 테스트(BIT) 시스템은 리눅스 기반 임베디드 시스템을 위해 설계된 포괄적이고 모듈식이며 확장 가능한 테스트 프레임워크입니다. 플러그인 기반 아키텍처를 통해 자동화된 하드웨어 및 소프트웨어 진단을 제공하여 시스템의 신뢰성, 무결성 및 운영 준비 상태를 보장합니다.


주요 이점

🛡️ 시스템 신뢰성 향상

  • 장애가 운영에 영향을 미치기 전에 사전에 장애를 감지합니다.
  • 핵심 시스템 리소스에 대한 지속적인 모니터링
  • 하드웨어 성능 저하 가능성에 대한 조기 경보 시스템

⚡ 가동 중지 시간 단축

  • 자동화된 진단은 수동 테스트에 드는 시간과 노력을 줄여줍니다.
  • 예약된 테스트 실행은 백그라운드에서 실행됩니다.
  • 즉각적인 오류 알림으로 신속한 대응이 가능해집니다.

📊 종합적인 보장

  • 하드웨어 검증(PCI, USB, GPIO, 시리얼, CAN, 이더넷)
  • 시스템 리소스 모니터링(CPU, 메모리, 디스크)
  • 데이터 경로 검증(TCP, CAN 버스, 시리얼 포트)

🔌 플러그 앤 플레이 아키텍처

  • 런타임 시 동적 플러그인 로딩
  • 구성 기반 테스트 매개변수
  • 새로운 테스트를 추가하는 데 핵심 시스템을 수정할 필요가 없습니다.

📋 Systemd 통합

  • 네이티브 리눅스 서비스로 실행됩니다.
  • 부팅 시 자동 시작
  • 표준 서비스 관리( systemctl start/stop/status )

테스트 유형 및 범위

BIT 시스템은 업계 표준 내장 테스트 방법론에 맞춰 세 가지 주요 테스트 범주를 구현합니다.

전원 켜짐 비트(PBIT)

시스템 시작 시 한 번 실행되는 테스트로, 정상 작동 시작 전에 하드웨어 무결성을 확인합니다.

연속 비트(CBIT)

정상적인 운영 중에 주기적으로 실행되어 런타임 오류 및 리소스 고갈을 감지하는 테스트입니다.

팩토리 비트(FBIT)

제조 및 유지보수 과정에서 모든 시스템 인터페이스의 유효성을 검증하기 위해 포괄적인 하드웨어 테스트가 사용됩니다.


테스트 요약표

전원 켜짐 비트(PBIT) 테스트

테스트 이름 설명 빈도
pbit_bsp_version BSP 버전이 예상 구성과 일치하는지 확인합니다. 시작 시
pbit_can CAN 버스 인터페이스 가용성을 검증합니다. 시작 시
pbit_checksum 파일 체크섬의 무결성을 확인합니다. 시작 시
pbit_cpu_cores 예상 CPU 코어 수를 검증합니다. 시작 시
pbit_cpu_usage 초기 CPU 사용률이 허용 범위 내에 있는지 확인합니다. 시작 시
pbit_disk_health 디스크 SMART 상태를 검증합니다. 시작 시
pbit_disk_usage 부팅 시 디스크 공간 가용성을 확인합니다. 시작 시
pbit_dmesg_check dmesg를 스캔하여 심각한 오류를 찾습니다. 시작 시
pbit_ethernet 이더넷 인터페이스 가용성을 검증합니다. 시작 시
pbit_file_checksum 중요 시스템 파일의 무결성을 확인합니다. 시작 시
pbit_firewall_configuration 방화벽 규칙이 올바르게 구성되었는지 확인합니다. 시작 시
pbit_gpio GPIO 핀의 가용성과 상태를 검증합니다. 시작 시
pbit_gpu_loading GPU 드라이버 및 초기 로딩 상태를 확인합니다. 시작 시
pbit_memory_usage 시작 시 사용 가능한 메모리를 검증합니다. 시작 시
pbit_pci_whitelist 승인된 화이트리스트를 기준으로 PCI 장치의 유효성을 검증합니다. 시작 시
pbit_permissions_verification 파일/디렉토리 권한을 검증합니다. 시작 시
pbit_power_test 전원 공급 상태 및 전압을 확인합니다. 시작 시
pbit_selinux_apparmor_status 보안 모듈 상태를 검증합니다. 시작 시
pbit_serial_ports 직렬 포트 가용성을 검증합니다. 시작 시
pbit_ssh_configuration SSH 보안 구성을 검증합니다. 시작 시
pbit_syslog_analysis 시스템 로그를 검사하여 심각한 시작 오류를 찾습니다. 시작 시
pbit_temperature 초기 온도 측정값을 확인합니다. 시작 시
pbit_usb_whitelist 승인된 화이트리스트에 따라 USB 장치의 유효성을 검사합니다. 시작 시

연속 BIT(CBIT) 테스트

테스트 이름 설명 빈도
cbit_bsp_version BSP 버전 일관성을 모니터링합니다. 구성 가능
cbit_can CAN 버스 상태 및 오류 카운터를 모니터링합니다. 구성 가능
cbit_checksum 주기적인 파일 무결성 검증 구성 가능
cbit_cpu_cores CPU 코어 가용성을 모니터링합니다. 구성 가능
cbit_cpu_usage 롤링 윈도우 기간 동안 CPU 사용률을 모니터링합니다. 모든 1초
cbit_disk_health 디스크 SMART 속성을 모니터링합니다. 구성 가능
cbit_disk_usage 디스크 사용량을 임계값과 비교하여 모니터링합니다. 30초마다
cbit_dmesg 커널 메시지 버퍼를 모니터링합니다. 구성 가능
cbit_dmesg_check dmesg 오류의 지속적인 감지 구성 가능
cbit_ethernet 이더넷 링크 상태 및 오류를 모니터링합니다. 구성 가능
cbit_ethernet_status 이더넷 연결 상태를 모니터링합니다. 구성 가능
cbit_firewall_configuration 방화벽 규칙의 무결성을 모니터링합니다. 구성 가능
cbit_gpio GPIO 상태 변화를 모니터링합니다. 구성 가능
cbit_gpu_loading GPU 사용률을 모니터링합니다. 구성 가능
cbit_memory_usage 메모리 사용 패턴을 추적합니다. 구성 가능
cbit_pci_whitelist PCI 장치 변경 사항을 모니터링합니다. 구성 가능
cbit_permissions 파일 권한 변경 사항을 모니터링합니다. 구성 가능
cbit_permissions_verification 지속적인 권한 검증 구성 가능
cbit_power_consumption 전력 소모량과 효율을 모니터링합니다. 구성 가능
cbit_selinux_apparmor_status 보안 모듈 상태를 모니터링합니다. 구성 가능
cbit_serial_ports 직렬 포트 가용성을 모니터링합니다. 구성 가능
cbit_ssh_configuration SSH 구성 변경 사항을 모니터링합니다. 구성 가능
cbit_syslog_analysis 지속적인 syslog 오류 모니터링 구성 가능
cbit_temperature 온도 측정값과 추세를 모니터링합니다. 구성 가능
cbit_usb_whitelist USB 장치 변경 사항을 모니터링합니다. 구성 가능

공장 BIT(FBIT) 테스트

테스트 이름 설명 빈도
fbit_can_data CAN 버스 송수신 기능 테스트 구성 가능
fbit_gpio_data GPIO 입출력 기능의 유효성을 검사합니다. 구성 가능
fbit_pci PCI 장치 열거 및 검증 구성 가능
fbit_serial_data 직렬 포트 루프백 통신을 검증합니다. 구성 가능
fbit_ssd SSD 읽기/쓰기 성능 검증 구성 가능
fbit_system_data 시스템 정보 수집 구성 가능
fbit_tcp_data iPerf를 사용하여 이더넷 데이터 경로를 테스트합니다. 구성 가능
fbit_usb USB 장치 읽기/쓰기 검증 구성 가능
fbit_video 비디오 출력 검증 구성 가능

총 57개의 내장 테스트가 포함 되어 있으며, 하드웨어 검증, 시스템 모니터링 및 보안 검증을 다룹니다.


플러그인 아키텍처

BIT 시스템은 핵심 시스템 코드를 수정하지 않고도 원활한 확장이 가능한 강력한 플러그인 아키텍처를 기반으로 구축되었습니다.

작동 방식

BIT 시스템은 Zenoh를 메시징 미들웨어로 사용하여 모니터링 클라이언트에 실시간 테스트 결과를 배포하고 프로토콜 브리징을 통해 GVA(Generic Vehicle Architecture) 시스템과 원활하게 통합할 수 있습니다.

메시지 흐름 아키텍처

flowchart LR subgraph Server["🖥️ BIT Server"] BM["BIT Manager"] PBIT["PBIT Plugins"] CBIT["CBIT Plugins"] FBIT["FBIT Plugins"] end subgraph Zenoh["🌐 Zenoh Network"] ZS["Zenoh Session"] end subgraph Clients["📱 BIT Clients"] GUI["BIT GUI"] CLI["BIT CLI"] end subgraph Gateway["🔗 BIT Gateway"] ZDG["Zenoh-DDS Bridge"] end subgraph GVA["🎖️ GVA Domain (DDS)"] HUMS["Health & Usage
Monitoring Service"] end PBIT -->|TestResult| BM CBIT -->|TestResult| BM FBIT -->|TestResult| BM BM -->|"Zenoh Publish
bit/{hostname}/PBIT"| ZS BM -->|"Zenoh Publish
bit/{hostname}/CBIT"| ZS BM -->|"Zenoh Publish
bit/{hostname}/FBIT"| ZS ZS -->|"Subscribe
bit/+/+"| GUI ZS -->|"Subscribe
bit/+/+"| CLI ZS -->|"Subscribe
bit/+/+"| ZDG ZDG -->|"DDS Publish
GVA::HealthStatus"| HUMS

상세 메시지 순서

sequenceDiagram participant Plugin as Test Plugin participant BM as BIT Manager participant Zenoh as Zenoh Router participant GUI as BIT GUI participant Gateway as BIT Gateway participant HUMS as GVA HUMS (DDS) Note over Plugin,HUMS: Test Execution & Result Distribution Plugin->>BM: Execute Test BM->>BM: Encode BuiltInTestResult (Protobuf) BM->>Zenoh: Publish to bit/{hostname}/CBIT par Parallel Distribution Zenoh-->>GUI: Forward Result GUI->>GUI: Display in Dashboard and Zenoh-->>Gateway: Forward Result Gateway->>Gateway: Zenoh → DDS Transform Gateway->>HUMS: Publish GVA::HealthStatus HUMS->>HUMS: Update Vehicle Health Record end Note over GUI,HUMS: Real-time monitoring on both systems

프로토콜 브리지 세부 정보

요소 프로토콜 프로토콜 아웃 목적
BIT 관리자 내부 제노 시험 결과를 발표합니다
비트 GUI 제노 실시간 결과를 표시합니다
비트 CLI 제노 명령줄 모니터링
BIT 게이트웨이 제노 치과의사(GVA) 차량 시스템용 교량
GVA HUMS 치과의사 건강 및 사용량 모니터링

플러그인 기능

특징 설명
동적 로딩 플러그인은 런타임에 공유 라이브러리( .so )로 로드됩니다.
특성 기반 인터페이스 모든 플러그인에 대해 일관된 TestRunTestDetails 특성
구성 파일 테스트별 TOML 기반 구성 파일( /etc/bit/*.toml )
버전 추적 각 플러그인은 버전과 빌드 타임스탬프를 보고합니다.
로깅 콜백 모든 테스트에 걸쳐 통합된 로깅 인프라
런 카운터 합격/불합격 통계 자동 추적

새 플러그인 만들기

사용자 지정 BIT 플러그인을 만드는 것은 간단합니다.

  1. TestRun 트레이트를 구현하세요:
 impl TestRun for MyCustomTest {
    fn run(&mut self) {
        // Your test logic here
        self.base_test.status = TestStatus::Success;
    }
}
  1. 플러그인 인터페이스를 내보냅니다.
 #[no_mangle]
pub extern "C" fn create_test() -> Box {
    Box::new(MyCustomTest::new())
}
  1. 구성 파일을 생성합니다 (선택 사항):
 [my_custom_test]
frequency = 60
enabled = true
threshold = 90
  1. 공유 라이브러리를 빌드하고 /usr/local/lib/bit_manager/ 에 배포합니다.

Rust 언어 안전 기능

BIT 시스템은 Rust 로 구현되어 임베디드 시스템 및 안전에 중요한 시스템에 필수적인 탁월한 안전성을 보장합니다.

메모리 안전

특징 혜택
널 포인터 없음 Option 타입은 널 포인터 역참조를 방지합니다.
버퍼 오버플로 없음 배열/벡터 접근 시 경계 검사
사용 후 무료 없음 소유권 시스템은 메모리 유효성을 보장합니다.
데이터 경쟁 없음 동시 접근 버그에 대한 컴파일 시점 방지

BIT에 Rust를 사용하는 이유는 무엇일까요?

🔒 컴파일 타임 안전성

Rust는 C/C++에서 런타임 오류를 일으키는 버그들을 컴파일 시점 에 통째로 잡아냅니다.

  • 메모리 누수
  • 버퍼 오버플로
  • 경기 조건
  • 널 포인터 역참조

⚡ 비용 제로 추상화

고수준 안전 기능은 런타임 오버헤드 없이 효율적인 기계어로 컴파일되어 C/C++ 성능과 동일한 수준을 제공합니다.

🔧 두려움 없는 동시성

소유권 모델을 통해 데이터 경쟁 없이 안전한 멀티스레드 테스트 실행이 가능합니다.

 // Thread-safe shared state with Arc>
let shared_state = Arc::new(Mutex::new(TestState::new()));

📦 최신 의존성 관리

  • Cargo 패키지 관리자는 재현 가능한 빌드를 보장합니다.
  • 자동 종속성 해결
  • 내장 테스트 프레임워크

🛡️ 타입 세이프 구성

설정 구문 분석은 Rust의 타입 시스템을 활용하여 오류를 조기에 포착합니다.

 let threshold: f32 = config.get("threshold")?;  // Type-checked at compile time

안전 통계

미터법 Rust vs C/C++
메모리 안전성 버그 컴파일 시점에 제거됨
CVE 취약점 유형 방지 일반적인 취약점의 약 70%
런타임 널 포인터 오류로 인한 크래시 불가능한
스레드 안전 위반 컴파일 시점에 발견됨

통합 및 배포

Systemd 서비스

 # Enable automatic startup
sudo systemctl enable bit_manager

# Start the service
sudo systemctl start bit_manager

# Check status
sudo systemctl status bit_manager

데비안 패키지 설치

 cargo deb -p bit_manager
sudo dpkg -i target/debian/bit_manager_*.deb

구성 경로

목적
/etc/bit/ 테스트 구성 파일(TOML)
/usr/local/lib/bit_manager/ 플러그인 공유 라이브러리
/var/log/bit_manager/ 로그 파일

검사 및 모니터링

bit_inspect 유틸리티는 로드된 테스트에 대한 자세한 정보를 제공합니다.

 # List all available tests
bit_inspect

# Get detailed information about a specific test
bit_inspect cbit_disk_usage

예시 출력:

 Details:
  Long-Name              Disk utilization test
  Author                 Ross Newman 
  Description            Check the disk is not nearing full
  Status                 NotRun

Plugin Details:
  Plugin Name            cbit_disk_usage
  Version                1.0.0
  Date Built             2025-03-09 01:42:11
  Run Frequency          Periodic(30s)

요약

BIT 시스템은 다음과 같은 기능을 제공합니다.

포괄적인 하드웨어 및 소프트웨어 진단
사용자 정의 테스트를 위한 확장 가능한 플러그인 아키텍처
Rust로 구현된 메모리 안전성
업계 표준 PBIT/CBIT/FBIT 방법론
네이티브 Linux/systemd 통합
구성 기반 테스트 매개변수
실시간 모니터링 및 로깅