Vantaggi del sistema di test integrato (BIT)

Panoramica

Il sistema Built-In Test (BIT) è un framework di test completo, modulare ed estensibile, progettato per sistemi embedded basati su Linux. Fornisce diagnostica hardware e software automatizzata attraverso un'architettura basata su plugin, garantendo affidabilità, integrità e prontezza operativa del sistema.


Vantaggi principali

🛡️ Affidabilità del sistema migliorata

  • Rilevamento proattivo dei guasti prima che i guasti influiscano sulle operazioni
  • Monitoraggio continuo delle risorse critiche del sistema
  • Sistema di allerta precoce per il potenziale degrado dell'hardware

⚡ Tempi di inattività ridotti

  • La diagnostica automatizzata elimina i costi generali dei test manuali
  • L'esecuzione pianificata del test viene eseguita in background
  • La notifica immediata dei guasti consente una risposta rapida

📊 Copertura completa

  • Validazione hardware (PCI, USB, GPIO, seriale, CAN, Ethernet)
  • Monitoraggio delle risorse di sistema (CPU, memoria, disco)
  • Verifica del percorso dati (TCP, bus CAN, porte seriali)

🔌 Architettura Plug-and-Play

  • Caricamento dinamico dei plugin in fase di esecuzione
  • Parametri di test basati sulla configurazione
  • Non sono necessarie modifiche al sistema principale per aggiungere nuovi test

📋 Integrazione Systemd

  • Funziona come un servizio Linux nativo
  • Avvio automatico all'avvio
  • Gestione del servizio standard ( systemctl start/stop/status )

Tipi di test e copertura

Il sistema BIT implementa tre categorie di test principali allineate alle metodologie di test integrati standard del settore:

BIT di accensione (PBIT)

Test eseguiti una volta all'avvio del sistema per verificare l'integrità dell'hardware prima dell'inizio delle normali operazioni.

BIT continuo (CBIT)

Test eseguiti periodicamente durante le normali operazioni per rilevare errori di runtime ed esaurimento delle risorse.

BIT di fabbrica (FBIT)

Test hardware completi utilizzati durante la produzione e la manutenzione per convalidare tutte le interfacce del sistema.


Tabella riepilogativa dei test

Test Power-On BIT (PBIT)

Nome del test Descrizione Frequenza
pbit_bsp_version Convalida che la versione BSP corrisponda alla configurazione prevista Una volta all'avvio
pbit_can Convalida la disponibilità dell'interfaccia CAN bus Una volta all'avvio
pbit_checksum Verifica l'integrità dei checksum dei file Una volta all'avvio
pbit_cpu_cores Convalida il numero previsto di core della CPU Una volta all'avvio
pbit_cpu_usage Controlla che l'utilizzo iniziale della CPU sia entro i limiti Una volta all'avvio
pbit_disk_health Convalida lo stato di integrità SMART del disco Una volta all'avvio
pbit_disk_usage Controlla la disponibilità di spazio su disco all'avvio Una volta all'avvio
pbit_dmesg_check Esegue la scansione di dmesg per errori critici Una volta all'avvio
pbit_ethernet Convalida la disponibilità dell'interfaccia Ethernet Una volta all'avvio
pbit_file_checksum Verifica l'integrità dei file di sistema critici Una volta all'avvio
pbit_firewall_configuration Convalida che le regole del firewall siano configurate correttamente Una volta all'avvio
pbit_gpio Convalida la disponibilità e lo stato del pin GPIO Una volta all'avvio
pbit_gpu_loading Controlla il driver GPU e il caricamento iniziale Una volta all'avvio
pbit_memory_usage Convalida la memoria disponibile all'avvio Una volta all'avvio
pbit_pci_whitelist Convalida i dispositivi PCI rispetto alla whitelist approvata Una volta all'avvio
pbit_permissions_verification Convalida i permessi di file/directory Una volta all'avvio
pbit_power_test Controlla lo stato e le tensioni dell'alimentazione Una volta all'avvio
pbit_selinux_apparmor_status Convalida lo stato del modulo di sicurezza Una volta all'avvio
pbit_serial_ports Convalida la disponibilità della porta seriale Una volta all'avvio
pbit_ssh_configuration Convalida la configurazione di sicurezza SSH Una volta all'avvio
pbit_syslog_analysis Esegue la scansione di syslog per errori di avvio critici Una volta all'avvio
pbit_temperature Controlla le letture termiche iniziali Una volta all'avvio
pbit_usb_whitelist Convalida i dispositivi USB rispetto alla whitelist approvata Una volta all'avvio

Test BIT continui (CBIT)

Nome del test Descrizione Frequenza
cbit_bsp_version Monitora la coerenza della versione BSP Configurabile
cbit_can Monitora lo stato del bus CAN e i contatori di errore Configurabile
cbit_checksum Verifica periodica dell'integrità dei file Configurabile
cbit_cpu_cores Monitora la disponibilità dei core della CPU Configurabile
cbit_cpu_usage Monitora l'utilizzo della CPU su una finestra mobile Ogni 1s
cbit_disk_health Monitora gli attributi SMART del disco Configurabile
cbit_disk_usage Monitora l'utilizzo del disco rispetto alle soglie Ogni 30 secondi
cbit_dmesg Monitora il buffer dei messaggi del kernel Configurabile
cbit_dmesg_check Rilevamento continuo degli errori dmesg Configurabile
cbit_ethernet Monitora lo stato e gli errori del collegamento Ethernet Configurabile
cbit_ethernet_status Monitora lo stato della connessione Ethernet Configurabile
cbit_firewall_configuration Monitora l'integrità delle regole del firewall Configurabile
cbit_gpio Monitora le modifiche dello stato GPIO Configurabile
cbit_gpu_loading Monitora l'utilizzo della GPU Configurabile
cbit_memory_usage Traccia i modelli di consumo della memoria Configurabile
cbit_pci_whitelist Monitora le modifiche del dispositivo PCI Configurabile
cbit_permissions Monitora le modifiche ai permessi dei file Configurabile
cbit_permissions_verification Validazione continua dei permessi Configurabile
cbit_power_consumption Monitora il consumo energetico e l'efficienza Configurabile
cbit_selinux_apparmor_status Monitora lo stato del modulo di sicurezza Configurabile
cbit_serial_ports Monitora la disponibilità della porta seriale Configurabile
cbit_ssh_configuration Monitora le modifiche alla configurazione SSH Configurabile
cbit_syslog_analysis Monitoraggio continuo degli errori syslog Configurabile
cbit_temperature Monitora le letture e le tendenze termiche Configurabile
cbit_usb_whitelist Monitora le modifiche del dispositivo USB Configurabile

Test BIT di fabbrica (FBIT)

Nome del test Descrizione Frequenza
fbit_can_data Testa la funzionalità di trasmissione/ricezione del bus CAN Configurabile
fbit_gpio_data Convalida la funzionalità di input/output GPIO Configurabile
fbit_pci Enumerazione e verifica dei dispositivi PCI Configurabile
fbit_serial_data Convalida la comunicazione loopback della porta seriale Configurabile
fbit_ssd Validazione delle prestazioni di lettura/scrittura SSD Configurabile
fbit_system_data Raccolta di informazioni di sistema Configurabile
fbit_tcp_data Testa i percorsi dati Ethernet utilizzando iPerf Configurabile
fbit_usb Verifica di lettura/scrittura del dispositivo USB Configurabile
fbit_video Verifica dell'uscita video Configurabile

Totale: 57 test integrati che coprono la convalida dell'hardware, il monitoraggio del sistema e la verifica della sicurezza.


Architettura del plugin

Il sistema BIT è basato su una potente architettura a plugin che consente un'estendibilità fluida senza modificare il codice del sistema principale.

Come funziona

Il sistema BIT utilizza Zenoh come middleware di messaggistica, consentendo la distribuzione dei risultati dei test in tempo reale ai client di monitoraggio e l'integrazione perfetta con i sistemi GVA (Generic Vehicle Architecture) tramite il bridging dei protocolli.

Architettura del flusso dei messaggi

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

Sequenza dettagliata dei messaggi

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

Dettagli del bridge di protocollo

Componente Protocollo in Protocollo fuori Scopo
Responsabile BIT Interno Zenoh Pubblica i risultati dei test
Interfaccia grafica utente BIT Zenoh Visualizza i risultati in tempo reale
BIT CLI Zenoh Monitoraggio della riga di comando
Portale BIT Zenoh DDS (GVA) Ponti verso i sistemi dei veicoli
GVA HUMS DDS Monitoraggio della salute e dell'utilizzo

Caratteristiche del plugin

Caratteristica Descrizione
Caricamento dinamico I plugin vengono caricati come librerie condivise ( .so ) in fase di esecuzione
Interfaccia basata sui tratti Caratteristiche TestRun e TestDetails coerenti per tutti i plugin
File di configurazione Configurazione basata su TOML per test ( /etc/bit/*.toml )
Monitoraggio della versione Ogni plugin riporta la versione e il timestamp di build
Registrazione dei callback Infrastruttura di registrazione unificata per tutti i test
Contatori di corse Monitoraggio automatico delle statistiche di superamento/fallimento

Creazione di un nuovo plugin

Creare un plugin BIT personalizzato è semplice:

  1. Implementare la caratteristica TestRun :
 impl TestRun for MyCustomTest {
    fn run(&mut self) {
        // Your test logic here
        self.base_test.status = TestStatus::Success;
    }
}
  1. Esporta l'interfaccia del plugin:
 #[no_mangle]
pub extern "C" fn create_test() -> Box {
    Box::new(MyCustomTest::new())
}
  1. Creare un file di configurazione (facoltativo):
 [my_custom_test]
frequency = 60
enabled = true
threshold = 90
  1. Compila e distribuisci la libreria condivisa in /usr/local/lib/bit_manager/

Funzionalità di sicurezza del linguaggio Rust

Il sistema BIT è implementato in Rust , offrendo garanzie di sicurezza senza pari, fondamentali per i sistemi embedded e safety-critical.

Sicurezza della memoria

Caratteristica Beneficio
Nessun puntatore nullo Option i tipi impediscono la dereferenziazione dei puntatori nulli
Nessun buffer overflow Controllo dei limiti su tutti gli accessi array/vettori
Nessun uso successivo gratuito Il sistema di proprietà garantisce la validità della memoria
Nessuna gara di dati Prevenzione in fase di compilazione dei bug di accesso simultaneo

Perché Rust per BIT?

🔒 Sicurezza in fase di compilazione

Rust rileva intere categorie di bug in fase di compilazione che causerebbero errori di runtime in C/C++:

  • perdite di memoria
  • buffer overflow
  • Condizioni di gara
  • Dereferenziazione dei puntatori nulli

⚡ Astrazioni a costo zero

Le funzionalità di sicurezza di alto livello vengono compilate in codice macchina efficiente senza alcun sovraccarico di runtime , eguagliando le prestazioni C/C++.

🔧 Concorrenza senza paura

Il modello di proprietà consente l'esecuzione sicura di test multi-thread senza conflitti di dati:

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

📦 Gestione moderna delle dipendenze

  • Il gestore dei pacchetti di carico garantisce build riproducibili
  • Risoluzione automatizzata delle dipendenze
  • Framework di test integrato

🛡️ Configurazione Type-Safe

L'analisi della configurazione sfrutta il sistema di tipi di Rust per rilevare tempestivamente gli errori:

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

Statistiche sulla sicurezza

Metrico Rust contro C/C++
Bug di sicurezza della memoria Eliminato in fase di compilazione
Classi di vulnerabilità CVE prevenute ~70% delle vulnerabilità comuni
Arresti anomali del puntatore nullo in fase di esecuzione Impossibile
Violazioni della sicurezza dei thread Rilevato in fase di compilazione

Integrazione e distribuzione

Servizio Systemd

 # Enable automatic startup
sudo systemctl enable bit_manager

# Start the service
sudo systemctl start bit_manager

# Check status
sudo systemctl status bit_manager

Installazione del pacchetto Debian

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

Percorsi di configurazione

Sentiero Scopo
/etc/bit/ File di configurazione di prova (TOML)
/usr/local/lib/bit_manager/ Librerie condivise dei plugin
/var/log/bit_manager/ File di registro

Ispezione e monitoraggio

L'utilità bit_inspect fornisce informazioni dettagliate sui test caricati:

 # List all available tests
bit_inspect

# Get detailed information about a specific test
bit_inspect cbit_disk_usage

Esempio di output:

 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)

Riepilogo

Il sistema BIT offre:

Diagnostica completa hardware e software
Architettura estensibile dei plugin per test personalizzati
Implementazione sicura della memoria in Rust
Metodologia PBIT/CBIT/FBIT standard del settore
Integrazione nativa Linux/systemd
Parametri di test basati sulla configurazione
Monitoraggio e registrazione in tempo reale