Avantages du système de test intégré (BIT)

Aperçu

Le système Built-In Test (BIT) est un framework de test complet, modulaire et extensible, conçu pour les systèmes embarqués Linux. Il assure un diagnostic automatisé du matériel et des logiciels grâce à une architecture basée sur des plugins, garantissant ainsi la fiabilité, l'intégrité et la disponibilité opérationnelle du système.


Principaux avantages

🛡️ Fiabilité système améliorée

  • Détection proactive des pannes avant qu'elles n'impactent les opérations
  • Surveillance continue des ressources système critiques
  • Système d'alerte précoce pour la dégradation potentielle du matériel

⚡ Temps d'arrêt réduit

  • Les diagnostics automatisés éliminent les coûts liés aux tests manuels.
  • L'exécution des tests planifiés s'effectue en arrière-plan.
  • La notification immédiate des pannes permet une réponse rapide

📊 Couverture complète

  • Validation matérielle (PCI, USB, GPIO, série, CAN, Ethernet)
  • Surveillance des ressources système (processeur, mémoire, disque)
  • Vérification du chemin de données (TCP, bus CAN, ports série)

🔌 Architecture Plug-and-Play

  • Chargement dynamique des plugins à l'exécution
  • Paramètres de test pilotés par la configuration
  • Aucune modification du système de base n'est requise pour ajouter de nouveaux tests

📋 Intégration Systemd

  • Fonctionne comme un service Linux natif
  • Démarrage automatique au démarrage
  • Gestion standard des services ( systemctl start/stop/status )

Types de tests et couverture

Le système BIT met en œuvre trois catégories de tests principales alignées sur les méthodologies de tests intégrés standard de l'industrie :

BIT de mise sous tension (PBIT)

Tests exécutés une seule fois au démarrage du système pour vérifier l'intégrité du matériel avant le début des opérations normales.

BIT continu (CBIT)

Des tests exécutés périodiquement pendant le fonctionnement normal afin de détecter les erreurs d'exécution et l'épuisement des ressources.

BIT d'usine (FBIT)

Des tests matériels complets sont utilisés lors de la fabrication et de la maintenance pour valider toutes les interfaces du système.


Tableau récapitulatif des tests

Tests BIT à la mise sous tension (PBIT)

Nom du test Description Fréquence
pbit_bsp_version Vérifie que la version BSP correspond à la configuration attendue Une fois au démarrage
pbit_can Vérifie la disponibilité de l'interface CAN bus Une fois au démarrage
pbit_checksum Vérifie l'intégrité des sommes de contrôle des fichiers Une fois au démarrage
pbit_cpu_cores Valide le nombre de cœurs du processeur attendu Une fois au démarrage
pbit_cpu_usage Vérifie que l'utilisation initiale du processeur est dans les limites. Une fois au démarrage
pbit_disk_health Valide l'état SMART du disque Une fois au démarrage
pbit_disk_usage Vérifie la disponibilité de l'espace disque au démarrage Une fois au démarrage
pbit_dmesg_check Analyse le dmesg à la recherche d'erreurs critiques Une fois au démarrage
pbit_ethernet Vérifie la disponibilité de l'interface Ethernet Une fois au démarrage
pbit_file_checksum Vérifie l'intégrité des fichiers système critiques Une fois au démarrage
pbit_firewall_configuration Vérifie que les règles du pare-feu sont correctement configurées. Une fois au démarrage
pbit_gpio Valide la disponibilité et l'état des broches GPIO Une fois au démarrage
pbit_gpu_loading Vérifie le pilote GPU et le chargement initial Une fois au démarrage
pbit_memory_usage Valide la mémoire disponible au démarrage Une fois au démarrage
pbit_pci_whitelist Valide les périphériques PCI par rapport à la liste blanche approuvée Une fois au démarrage
pbit_permissions_verification Valide les permissions des fichiers/répertoires Une fois au démarrage
pbit_power_test Vérifie l'état de l'alimentation électrique et les tensions Une fois au démarrage
pbit_selinux_apparmor_status Valide l'état du module de sécurité Une fois au démarrage
pbit_serial_ports Vérifie la disponibilité du port série Une fois au démarrage
pbit_ssh_configuration Valide la configuration de sécurité SSH Une fois au démarrage
pbit_syslog_analysis Analyse les journaux système à la recherche d'erreurs critiques au démarrage Une fois au démarrage
pbit_temperature Vérifie les relevés thermiques initiaux Une fois au démarrage
pbit_usb_whitelist Valide les périphériques USB par rapport à la liste blanche approuvée. Une fois au démarrage

Tests BIT continus (CBIT)

Nom du test Description Fréquence
cbit_bsp_version Surveille la cohérence de la version BSP Configurable
cbit_can Surveille l'état du bus CAN et les compteurs d'erreurs Configurable
cbit_checksum Vérification périodique de l'intégrité des fichiers Configurable
cbit_cpu_cores Surveille la disponibilité des cœurs du processeur Configurable
cbit_cpu_usage Surveille l'utilisation du processeur sur une fenêtre glissante Toutes les 1s
cbit_disk_health Surveille les attributs SMART du disque Configurable
cbit_disk_usage Surveille l'utilisation du disque par rapport aux seuils définis. Toutes les 30 secondes
cbit_dmesg Surveille le tampon de messages du noyau Configurable
cbit_dmesg_check Détection continue des erreurs dmesg Configurable
cbit_ethernet Surveille l'état et les erreurs de la liaison Ethernet Configurable
cbit_ethernet_status Surveille l'état de la connexion Ethernet Configurable
cbit_firewall_configuration Surveille l'intégrité des règles du pare-feu Configurable
cbit_gpio Surveille les changements d'état des GPIO Configurable
cbit_gpu_loading Surveille l'utilisation du GPU Configurable
cbit_memory_usage Suivi des tendances de consommation de mémoire Configurable
cbit_pci_whitelist Surveille les modifications des périphériques PCI Configurable
cbit_permissions Surveille les modifications des permissions de fichiers Configurable
cbit_permissions_verification validation continue des autorisations Configurable
cbit_power_consumption Surveille la consommation d'énergie et l'efficacité Configurable
cbit_selinux_apparmor_status Surveille l'état du module de sécurité Configurable
cbit_serial_ports Surveille la disponibilité des ports série Configurable
cbit_ssh_configuration Surveille les modifications de configuration SSH Configurable
cbit_syslog_analysis Surveillance continue des erreurs syslog Configurable
cbit_temperature Surveille les relevés et les tendances thermiques Configurable
cbit_usb_whitelist Surveille les modifications apportées aux périphériques USB Configurable

Tests BIT d'usine (FBIT)

Nom du test Description Fréquence
fbit_can_data Tests de fonctionnalité d'émission/réception du bus CAN Configurable
fbit_gpio_data Valide les fonctionnalités d'entrée/sortie GPIO Configurable
fbit_pci Énumération et vérification des périphériques PCI Configurable
fbit_serial_data Valide la communication de bouclage du port série Configurable
fbit_ssd validation des performances de lecture/écriture du SSD Configurable
fbit_system_data collecte d'informations système Configurable
fbit_tcp_data Teste les chemins de données Ethernet à l'aide d'iPerf Configurable
fbit_usb vérification de lecture/écriture du périphérique USB Configurable
fbit_video Vérification de la sortie vidéo Configurable

Total : 57 tests intégrés couvrant la validation matérielle, la surveillance du système et la vérification de la sécurité.


Architecture des plugins

Le système BIT repose sur une architecture de plugins puissante qui permet une extensibilité transparente sans modifier le code du système principal.

Comment ça marche

Le système BIT utilise Zenoh comme intergiciel de messagerie, permettant la distribution en temps réel des résultats de test aux clients de surveillance et une intégration transparente avec les systèmes GVA (Generic Vehicle Architecture) via un pontage de protocole.

Architecture du flux de messages

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

Séquence de messages détaillée

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

Détails du pont de protocole

Composant Protocole dans Protocole Out But
Gestionnaire BIT Interne Zénoh Publie les résultats des tests
Interface graphique BIT Zénoh Affiche les résultats en temps réel
CLI BIT Zénoh Surveillance en ligne de commande
Passerelle BIT Zénoh DDS (GVA) Ponts vers les systèmes de véhicules
GVA HUMS DDS Surveillance de la santé et de l'utilisation

Fonctionnalités du plugin

Fonctionnalité Description
Chargement dynamique Les plugins sont chargés en tant que bibliothèques partagées ( .so ) lors de l'exécution.
Interface basée sur les caractéristiques Caractéristiques TestRun et TestDetails cohérentes pour tous les plugins
Fichiers de configuration Configuration TOML par test ( /etc/bit/*.toml )
Suivi des versions Chaque plugin indique sa version et la date de compilation.
Journalisation des rappels Infrastructure de journalisation unifiée pour tous les tests
Compteurs de course Suivi automatique des statistiques de réussite/échec

Création d'un nouveau plugin

Créer un plugin BIT personnalisé est simple :

  1. Implémentez le trait TestRun :
 impl TestRun for MyCustomTest {
    fn run(&mut self) {
        // Your test logic here
        self.base_test.status = TestStatus::Success;
    }
}
  1. Exporter l'interface du plugin :
 #[no_mangle]
pub extern "C" fn create_test() -> Box {
    Box::new(MyCustomTest::new())
}
  1. Créer un fichier de configuration (facultatif) :
 [my_custom_test]
frequency = 60
enabled = true
threshold = 90
  1. Compilez et déployez la bibliothèque partagée dans /usr/local/lib/bit_manager/

Fonctionnalités de sécurité du langage Rust

Le système BIT est implémenté en Rust , offrant des garanties de sécurité inégalées, essentielles pour les systèmes embarqués et critiques pour la sécurité.

Sécurité de la mémoire

Fonctionnalité Avantage
Pas de pointeurs nuls Option Les types empêchent le déréférencement de pointeurs nuls
Aucun débordement de tampon Vérification des limites sur tous les accès aux tableaux/vecteurs
Aucune utilisation après la gratuité Le système de propriété garantit la validité de la mémoire
Pas de concurrence de données Prévention des bogues d'accès concurrents lors de la compilation

Pourquoi Rust pour BIT ?

🔒 Sécurité au moment de la compilation

Rust détecte des catégories entières de bogues lors de la compilation, bogues qui provoqueraient des erreurs d'exécution en C/C++ :

  • fuites de mémoire
  • Débordements de tampon
  • Conditions de course
  • Déréférencement de pointeur nul

⚡ Abstractions à coût nul

Les fonctions de sécurité de haut niveau sont compilées en code machine efficace sans surcharge d'exécution , égalant les performances du C/C++.

🔧 Concurrence sans peur

Le modèle de propriété permet une exécution de tests multithread sécurisée sans conflits d'accès aux données :

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

📦 Gestion moderne des dépendances

  • Le gestionnaire de paquets Cargo garantit des constructions reproductibles
  • Résolution automatisée des dépendances
  • Cadre de test intégré

🛡️ Configuration de type sécurisé

L'analyse de la configuration tire parti du système de types de Rust pour détecter les erreurs au plus tôt :

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

Statistiques de sécurité

Métrique Rust contre C/C++
bugs de sécurité de la mémoire Éliminé lors de la compilation
Les classes de vulnérabilités CVE ont été empêchées ~70% des vulnérabilités courantes
plantages dus à un pointeur nul à l'exécution Impossible
Infractions aux règles de sécurité des fils Détecté lors de la compilation

Intégration et déploiement

Service Systemd

 # Enable automatic startup
sudo systemctl enable bit_manager

# Start the service
sudo systemctl start bit_manager

# Check status
sudo systemctl status bit_manager

Installation de paquets Debian

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

Chemins de configuration

Chemin But
/etc/bit/ Fichiers de configuration de test (TOML)
/usr/local/lib/bit_manager/ Bibliothèques partagées de plugins
/var/log/bit_manager/ Fichiers journaux

Inspection et surveillance

L'utilitaire bit_inspect fournit des informations détaillées sur les tests chargés :

 # List all available tests
bit_inspect

# Get detailed information about a specific test
bit_inspect cbit_disk_usage

Exemple de sortie :

 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)

Résumé

Le système BIT offre :

Diagnostic complet du matériel et des logiciels
Architecture de plugins extensible pour les tests personnalisés
Implémentation sécurisée en mémoire en Rust
Méthodologie PBIT/CBIT/FBIT conforme aux normes de l'industrie
Intégration native Linux/systemd
Paramètres de test pilotés par la configuration
Surveillance et enregistrement en temps réel