내장 테스트(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) 시스템과 원활하게 통합할 수 있습니다.
메시지 흐름 아키텍처
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
상세 메시지 순서
프로토콜 브리지 세부 정보
| 요소 | 프로토콜 | 프로토콜 아웃 | 목적 |
|---|---|---|---|
| BIT 관리자 | 내부 | 제노 | 시험 결과를 발표합니다 |
| 비트 GUI | 제노 | — | 실시간 결과를 표시합니다 |
| 비트 CLI | 제노 | — | 명령줄 모니터링 |
| BIT 게이트웨이 | 제노 | 치과의사(GVA) | 차량 시스템용 교량 |
| GVA HUMS | 치과의사 | — | 건강 및 사용량 모니터링 |
플러그인 기능
| 특징 | 설명 |
|---|---|
| 동적 로딩 | 플러그인은 런타임에 공유 라이브러리( .so )로 로드됩니다. |
| 특성 기반 인터페이스 | 모든 플러그인에 대해 일관된 TestRun 및 TestDetails 특성 |
| 구성 파일 | 테스트별 TOML 기반 구성 파일( /etc/bit/*.toml ) |
| 버전 추적 | 각 플러그인은 버전과 빌드 타임스탬프를 보고합니다. |
| 로깅 콜백 | 모든 테스트에 걸쳐 통합된 로깅 인프라 |
| 런 카운터 | 합격/불합격 통계 자동 추적 |
새 플러그인 만들기
사용자 지정 BIT 플러그인을 만드는 것은 간단합니다.
-
TestRun트레이트를 구현하세요:
impl TestRun for MyCustomTest {
fn run(&mut self) {
// Your test logic here
self.base_test.status = TestStatus::Success;
}
}- 플러그인 인터페이스를 내보냅니다.
#[no_mangle]
pub extern "C" fn create_test() -> Box {
Box::new(MyCustomTest::new())
} - 구성 파일을 생성합니다 (선택 사항):
[my_custom_test]
frequency = 60
enabled = true
threshold = 90- 공유 라이브러리를 빌드하고
/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 통합
✅ 구성 기반 테스트 매개변수
✅ 실시간 모니터링 및 로깅