Après un an de développement, la version 5.1 de RT-Thread, un système d'exploitation en temps réel (RTOS) pour les appareils Internet des objets, est désormais disponible. Le système est en développement depuis 2006 par une communauté de développeurs chinois et est actuellement porté sur 154 plateformes, puces et microcontrôleurs basés sur les architectures x86, ARM, MIPS, C-SKY, Xtensa, ARC et RISC-V. L'assemblage minimaliste de RT-Thread (Nano) nécessite seulement 3 Ko de Flash et 1,2 Ko de RAM pour fonctionner. Pour les appareils IoT qui ne sont pas trop limités en ressources, une version complète est proposée, prenant en charge la gestion des paquets, les configureurs, la pile réseau, les paquets avec interface graphique, les systèmes de contrôle vocal, les bases de données, les services réseau et les moteurs pour l'exécution de scripts. Le code est écrit en C et distribué sous la licence Apache 2.0.
Le système d'exploitation est constitué de trois couches de base :
- Le noyau, qui assure l'exécution des tâches en temps réel. Le noyau fournit des primitives de base universelles couvrant des domaines tels que la gestion des verrouillages et la synchronisation des données, la planification des tâches, la gestion des flux, le traitement des signaux, les files d'attente de messages, la gestion des temporisateurs et la gestion de la mémoire. Les caractéristiques spécifiques au matériel sont réalisées au niveau de libcpu et BSP, qui incluent les pilotes nécessaires et le code pour prendre en charge le CPU.
- Les composants et services fonctionnant au-dessus du noyau offrent des abstractions telles qu'un système de fichiers virtuel, un système de traitement des exceptions, un stockage au format clé/valeur, une interface de ligne de commande FinSH, une pile réseau (LwIP) et des frameworks réseau, des bibliothèques pour la prise en charge des appareils, un sous-système audio, une pile sans fil, et des composants pour la prise en charge de Wi-Fi, LoRa, Bluetooth, 2G/4G. L'architecture modulaire permet de connecter des composants et des services en fonction de vos tâches et des ressources matérielles disponibles.
- Paquets de programmes. Les composants logiciels génériques et les bibliothèques de fonctions sont distribués et installés sous forme de paquets. Actuellement, le dépôt comprend plus de 450 paquets, offrant des interfaces graphiques, des applications multimédias et des applications réseau, jusqu'à des systèmes de gestion de robots et des gestionnaires basés sur l'apprentissage automatique. Les paquets incluent également des moteurs pour l'exécution de programmes dans les langages Lua, JerryScript, MicroPython, PikaScript et Rust (rtt_rust).

Caractéristiques de la plateforme :
- Support des architectures :
- ARM Cortex-M0/M0+/M3/M4/M7/M23/M33 (supporte les microcontrôleurs de fabricants tels que ST, Winner Micro, MindMotion, Realtek, Infineon, GigaDevic, Nordic, Nuvoton, NXP).
- ARM Cortex-R4.
- ARM Cortex-A8/A9 (NXP).
- ARM7 (Samsung).
- ARM9 (Allwinner, Xilinx, GOKE).
- ARM11 (Fullhan).
- MIPS32 (Loongson, Ingenic).
- RISC-V RV32E/RV32I[F]/RV64[D] (sifive, Canaan Kendryt, bouffalo_lab, Nuclei, T-Head, HPMicro).
- ARC (SYNOPSYS)
- DSP (TI).
- C-Sky.
- x86.
- Architecture modulaire extensible permettant de créer un environnement adapté aux systèmes à ressources limitées (exigences minimales : 3 Ko de Flash et 1,2 Ko de RAM).
- Support de diverses interfaces standard pour le développement de programmes, telles que POSIX, CMSIS, API C++. Une couche RTduino est développée séparément pour la compatibilité avec l'API et les bibliothèques du projet Arduino.
- Possibilité d'extension via un système de paquets et de composants connexes.
- Support du développement d'applications pour un traitement d'information à haute performance.
- Système de gestion d'énergie flexible, permettant de mettre automatiquement l'appareil en mode veille et de gérer dynamiquement la tension et la fréquence en fonction de la charge.
- Support du matériel pour le cryptage et le décryptage, fournissant des bibliothèques avec divers algorithmes cryptographiques.
- Interface unifiée pour l'accès aux périphériques et équipements supplémentaires.
- FS virtuel et disponibilité de pilotes pour des systèmes de fichiers tels que FAT, UFFS, NFSv3, ROMFS et RAMFS.
- Pile de protocoles pour TCP/IP, Ethernet, Wi-Fi, Bluetooth, NB-IoT, 2G/3G/4G, HTTP, MQTT, LwM2M, etc.
- Système de distribution et d'installation à distance des mises à jour, supportant le cryptage et la vérification par signature numérique, la reprise des installations interrompues, la récupération après échec, le retour en arrière et plus encore.
- Un système de modules dynamiquement chargés du noyau, permettant de rassembler et de développer séparément des composants du noyau, et de les charger dynamiquement en cas de besoin.
- Support de divers paquets tiers, comme Yaffs2, SQLite, FreeModbus, Canopen, etc.
- Possibilité de compiler directement le paquet BSP (Board Support Package) avec des composants pour le support d'une plateforme matérielle spécifique, et de le charger sur la carte.
- Présence d'un émulateur (BSP qemu-vexpress-a9), permettant de développer des applications sans utiliser de cartes physiques.
- Support des compilateurs et outils de développement standards, tels que GCC, MDK Keil et IAR.
- Développement d'un environnement de développement intégré, RT-Thread Studio IDE, permettant de créer et de déboguer des applications, de les charger sur des cartes, et de gérer les paramètres. Des plugins pour développer des logiciels pour RT-Thread sont également disponibles pour Eclipse et VS Code.
- Présence d'une interface de console Env, simplifiant la création de projets et la configuration de l'environnement.
Parmi les changements de la nouvelle version :
- RT-Smart, un système d'exploitation hybride basé sur RT-Thread, qui sépare les applications du noyau, inclut par défaut la prise en charge des mécanismes epoll, eventfd, signalfd, timerfd et select. Un sous-système d'émulateur de terminal a été mis en œuvre. La prise en charge des dispositifs DFZU2EG MPSoC et cv181x-riscv a été ajoutée.
- Dans RTduino, une couche pour assurer la compatibilité avec l'écosystème Arduino, la prise en charge des cartes raspberry-pico, stm32h503-st-nucleo, stm32h563-st-nucleo, stm32f412-nucleo, stm32f407-rt-spark a été ajoutée.
- Les composants tiers tels que ssh, sftp, weston et vim ont été mis à jour.
- La prise en charge de nouvelles cartes et puces telles que HPMicro RISC-V, STM32 Nucleo, Adafruit Metro M4, Seeed Wio-Terminal, ST (stm32L431_tencentos, stm32h7s7-disco, stm32f407-lckfb-skystar, stm32h503-st-nucleo), Renesas (ek-ra8m1, ek-ra8d1, ra8d1-vision-board), AT32 (at32f402-start, at32f405-start), HT32 (ht32f52352, ht32f12366, AVR32 at32uc3a0256, at32uc3b0256), CVITEK (c906_little, cv18xx_risc-v), WCH (yd-ch32v307vct6), HC32 (ev_hc32f4a0_lqfp176, ev_hc32f460_lqfp100_v2), (ev_hc32f448_lqfp80, GD32 gd32407v-lckfb), NXP (frdm-mcxn947, frdm-mcxa153) a été ajoutée.
- Le fonctionnement des planificateurs de tâches et du CPU a été optimisé. Une couche pour abstraire le planificateur rt_sched a été ajoutée.
- L'optimisation du fonctionnement sur des systèmes multicœurs a été réalisée.
- La possibilité de подключение de gestionnaires d'opérations d'allocation de mémoire malloc a été fournie.
- Un support de rétrotrace (backtrace) du noyau a été implémenté pour les architectures ARM64 et RV64.
- La transition vers un nouveau modèle de pilotes de dispositifs se poursuit.
- Dans les pilotes virtio qemu-virt64-aarch64 et qemu-virt64-riscv, la prise en charge de SDL2 a été ajoutée.
- Un cadre pour le développement de pilotes clk a été ajouté.
- La configuration exfat a été ajoutée dans DFS. Le noyau est par défaut traduit pour utiliser le système de fichiers dfsv2.
- La prise en charge des terminaux TTY a été améliorée.
- Le système d'entrée/sortie a ajouté le support des drapeaux O_DIRECT et O_SYNC.
- Dans l'implémentation des processus légers lwP (Processus Légers), la fonction wp_new a été remplacée par lwp_create. La fonction sys_setitimer a été ajoutée.
- Le gestionnaire de mémoire MM a ajouté le support de la réservation de mémoire et a implémenté la fonction rt_aspace_mremap_range.
- Dans Libcpu, le support des processeurs ARM Cortex-M85 et Cortex-R52 a été ajouté.
Source : opennet.ru
