Déploiement intégré Windows et Linux

Cet article décrit comment déployer rapidement un système embarqué basé sur Windows 10 et Debian Linux. Des exemples de construction d'une interface sécurisée sont donnés.

Présentation


Dans le processus de développement de dispositifs dotés d'une interface homme-machine graphique, la tâche se pose tôt ou tard non seulement de créer l'interface elle-même, mais aussi de choisir la plateforme sur laquelle elle doit fonctionner. Une telle plate-forme peut être soit un ordinateur à carte unique avec un système d'exploitation, soit un microcontrôleur avec un écran et un ensemble de bibliothèques pertinentes, ou une autre solution originale.


Il arrive souvent qu'au niveau supérieur du système de contrôle sur lequel l'interface s'exécute, des tâches de communication avec le monde extérieur et l'interaction avec un large éventail de périphériques sont également effectuées. De plus, l'interface elle-même peut être assez exigeante en ressources graphiques. Compte tenu de cela, et afin d'économiser les coûts de main-d'œuvre, il est possible de prendre un ordinateur monocarte comme base et d'y installer un système d'exploitation prêt à l'emploi. Dans ce cas, le développement logiciel peut être grandement simplifié en utilisant des cadres modernes avec une bonne documentation et un ensemble d'exemples.


Exigences d'interface


Du point de vue de l'utilisateur, l'interface doit satisfaire aux exigences suivantes:


  • Lors du chargement en plein écran, une application doit apparaître, c'est la même interface, c'est le même shell graphique;
  • À part cette application, rien de plus ne devrait être disponible pour l'utilisateur;
  • L'application doit fonctionner tout le temps, le système ne doit pas s'endormir, l'écran ne doit pas s'éteindre;
  • Tous les raccourcis clavier, aides, fonctions d'accessibilité et autres fonctions similaires doivent être désactivés;
  • En cas de défaillance de l'application - elle doit être redémarrée automatiquement par le système;
  • Le système n'a pas d'exigences particulières pour la vitesse ou les modes en temps réel, cependant, il est nécessaire que l'interface réponde aux commandes de l'utilisateur sans retards notables;
  • Le système doit être résistant aux redémarrages durs répétés, il ne devrait pas être nécessaire d'exécuter un script spécial pour terminer le travail;
  • Il devrait être possible de cloner rapidement l'assemblage fini en une série d'appareils avec tous les réglages nécessaires effectués en mode automatique.

En d'autres termes, une limitation complète des actions de l'utilisateur, de la stabilité et de l'évolutivité.


Quant au système d'exploitation pour un ordinateur monocarte, nous considérerons immédiatement deux options, l'une basée sur Windows, l'autre basée sur Linux, et nous les comparerons entre elles.


Par exemple, créons une interface de kiosque à écran tactile. Et en tant qu'application, prenons l'un des exemples de formation Qt Quick et implémentons-le avec quelques modifications. Le framework Qt est disponible pour les deux systèmes d'exploitation.


Afin de ne pas plonger dans les nuances de l'installation de Windows et Linux sur une plateforme ARM, le système peut être facilement assemblé sur la base d'un processeur compatible x86. Dans ce cas, l'une des nombreuses cartes disponibles sur la plate-forme Intel Bay Trail a été utilisée pour des expériences.


Un package de tous les programmes et scripts est disponible sur GitHub .


Chemin Windows


À une certaine époque, Windows Embedded de Microsoft a été introduit pour créer des systèmes embarqués. Même dans la première version de Windows Embedded XP, les développeurs disposaient d'un ensemble d'outils pour assembler les plus tronqués, mais équipés des pilotes d'images nécessaires. Ces assemblages nécessitaient un minimum de RAM et fonctionnaient bien même sur des processeurs faibles. La technologie a été développée dans la version de Windows Embedded Standard 7, où le processus de création de vos propres assemblages a été évoqué. Windows Embedded utilisait l'idéologie d'un catalogue ouvert de modules, et n'importe qui pouvait équiper son système uniquement avec l'ensemble de composants nécessaire. La dernière version dans laquelle cette approche était disponible, bien que sous une forme tronquée, est Windows Embedded Standard 8.1.


Windows 10 IoT moderne est positionné comme une alternative à Windows Embedded, mais est très différent de ses prédécesseurs. Un catalogue de composants ouvert n'est plus disponible. La possibilité de collecter des images claires du concepteur et d'en faire ses propres disques d'installation a disparu. Les options spéciales d'un système intégré, comme un filtre d'enregistrement, la marque du chargeur de démarrage, un filtre de clavier, etc., sont désormais configurées dans un système préinstallé. De plus, la prise en charge de ces fonctions n'est disponible que dans le cadre de la version lourde de Windows 10 Enterprise.


Cependant, malgré les exigences système élevées, en particulier en ce qui concerne la quantité de RAM, l'utilisation de versions même lourdes dans les solutions intégrées ne pose pas de problèmes particuliers, principalement en raison de la disponibilité des composants matériels. En outre, n'oubliez pas que ces dernières années, il est devenu plus difficile d'acheter une licence pour les anciens produits de Microsoft.


Solution rapide


Au premier examen, il s'avère que même dans Windows 10 ordinaire, il existe déjà une fonction intégrée «Accès attribué» (Fig. 1), qui ressemble à une solution toute faite à la tâche.


Accès attribué

Fig. 1. Fonction d'accès assignée


Dans ce cas, un programme pouvant être utilisé comme interface doit être initialement développé en tant qu'application de plateforme Windows universelle. Ces applications appx sont installées, par exemple, sur un Windows Phone. Une simple application plein écran, bien sûr, peut être convertie en appx et signée avec les certificats nécessaires, puis installée. Il peut fonctionner comme une interface, mais sans protection appropriée. Malheureusement, dans le mode normal "Accès attribué", l'utilisateur a toujours un accès ouvert à certains paramètres système et touches de raccourci. Par conséquent, une interface qui répond à toutes les exigences ci-dessus ne peut pas être obtenue en utilisant cette approche. Le système doit être configuré manuellement, d'une manière différente.


Bonne décision


1. Installation initiale


Donc, tout d'abord, nous avons besoin de la distribution LTSB Windows 10 Enterprise . Vous pouvez prendre l'image Microsoft d'origine, vous pouvez en utiliser une légère ou créer la vôtre à l'aide d'outils tiers. Pour la carte expérimentale, l'un des assemblages prêts à l'emploi a été sélectionné (version légère 32 bits).


Nous installons le système à partir du kit de distribution sur la carte cible. Lors de l'installation, nous divisons le disque en deux sections, C: - pour le système, D: - pour l'application principale, les utilitaires et les journaux. Une telle ventilation est utile à l'avenir pour le filtre d'enregistrement. Après l'installation, nous attendons que le menu des paramètres apparaisse, ou nous ne continuons pas le menu avec les paramètres réseau.


Nous redémarrons en mode service via Ctrl + Maj + F3.


S'il n'y a pas eu d'erreurs pendant le processus d'installation, après le redémarrage, le système lui-même ira dans le compte de service de l'administrateur et la fenêtre SysPrep apparaîtra à l'écran (Fig.2). Il doit être fermé, nous allons démarrer SysPrep différemment, en utilisant un fichier de réponses spécial qui n'a pas encore été créé.


Fenêtre sysprep

Fig. 2. Mode service.


2. Configuration du système


Pour d'autres actions, vous aurez besoin des outils de déploiement du kit d'évaluation et de déploiement de Windows 10 .


À partir du disque sur lequel la distribution Windows est installée sur la carte, vous devez extraire le fichier image install.wim . Il arrive que dans certains assemblages, ce fichier puisse être stocké sous forme compressée avec l'extension esd . Dans ce cas, vous devez d'abord le déballer. L'utilitaire dism est utilisé pour cela.


Découvrez le numéro de série de la version souhaitée dans le conteneur (SourceIndex).


dism /Get-WimInfo /WimFile:install.esd 

Ensuite, extrayez le fichier image (dans ce cas, le premier dans le conteneur).


 dism /export-image /SourceImageFile:install.esd /SourceIndex:1 /DestinationImageFile:install.wim /Compress:max /CheckIntegrity 

Vous devez maintenant ouvrir l'image dans le Gestionnaire d'images système Windows (à partir des outils de déploiement) et générer un répertoire.


Il convient de noter que travailler avec des images dans Windows System Image Manager n'est possible que si la profondeur de bits de l'image correspond à la profondeur de bits de l'hôte. Autrement dit, il est impossible de modifier l'image de la version 32 bits dans un système 64 bits. Ici, comme on dit, aucun commentaire.


Une fois le répertoire créé, modifiez le fichier de réponses de l'utilitaire SysPrep . Entrez les informations du propriétaire, ajoutez les utilisateurs nécessaires et configurez la première connexion automatique (Fig. 3).


Fichier de réponses

Fig. 3. Création d'un fichier de réponses.


Cela n'a aucun sens de répertorier tous les paramètres; le contenu du fichier de réponses peut être trouvé dans le référentiel. L'essentiel est de ne pas oublier de définir les paramètres CopyProfile sur true , SkipReam sur 1 et d'activer la connexion automatique de l'administrateur. Vous pouvez entrer votre clé de produit dans la section 4 specialize - Microsoft-Windows-Shell-Setup - ProductKey .


3. Installation de programmes


Ensuite, vous avez besoin du fichier image install.wim réel, vous devez donc le placer à côté du fichier de réponses personnaliser.xml , dans lequel après l'enregistrement, vous devez remplacer manuellement le chemin d'accès à l'image. À la fin du fichier, la ligne devrait ressembler à ceci:


 <cpi:offlineImage cpi:source="wim:d:/service/install.wim#Windows 10 Enterprise LTSB" xmlns:cpi="urn:schemas-microsoft-com:cpi" /> 

Pour obtenir l'interface de démonstration de KioskShell, vous devez créer une version pour Windows à partir des sources. Les conseils d'assemblage se trouvent dans le référentiel.


Nous copions les fichiers sur la carte et obtenons la structure de fichiers et de répertoires suivante:


 C:\ └── Design\ ├── backgroundDefault.jpg -      ( ) └── oemlogo.bmp -  ,      D:\ ├── Logs\ -       ├── Service\ │ ├── AfterSetup.bat -   ,     SysPrep │ ├── FirstLogon.bat -        │ ├── customize.xml -   │ ├── install.wim -   │ ├── CustomShellSetup.ps1 -  PowerShell     │ ├── EnableRules.ps1 -  PowerShell     │ ├── DisableAllRules.ps1 -      ( ) │ └── UserLogon.bat -      ( ) └── Shell\ -     "KioskShell.exe"    

4. Configuration manuelle du système


Lorsque le système est en mode service, vous pouvez redémarrer autant de fois que vous le souhaitez, le système y reviendra automatiquement. Avec un long temps d'inactivité avant de configurer l'alimentation, cependant, l'écran peut se verrouiller et ne reviendra pas, seul un redémarrage vous aidera. Étant donné que chaque projet spécifique peut avoir ses propres fonctionnalités de configuration, il est préférable de le faire manuellement, mais vous pouvez également utiliser des scripts d'automatisation.


Nous installons les composants nécessaires du système intégré et désactivons le contrôle des comptes d'utilisateurs (voir AfterSetup.bat depuis le référentiel)


Installez tous les pilotes, configurez le matériel (carte réseau IP, résolution et orientation de l'écran, ports des périphériques externes, etc.), désactivez les touches rémanentes et toutes les fonctionnalités spéciales.


Puisqu'à l'avenir, j'aimerais pouvoir administrer à distance, nous autoriserons l'accès via RDP. Le mot de passe administrateur expirera à l'étape de configuration automatique.


Ensuite, vous devez désactiver les mises à jour système dans l' éditeur de stratégie de groupe local (dans la section Configuration ordinateur - Modèles d'administration - Composants Windows - Windows Update , vous devez définir les mises à jour automatiques configurées sur Désactivé ). En outre, vous devez également désactiver l'analyse automatique de Windows Update (dans le planificateur de tâches de la section Microsoft - Windows - UpdateOrchestrator, vous devez désactiver toutes les tâches), sinon une fenêtre noire apparaîtra à chaque démarrage, et lorsque vous vous connecterez à Internet, Windows peut soudainement commencer la mise à jour.


Ensuite, configurez les paramètres d'alimentation. Pour ce faire, vous devez d'abord rendre tous les paramètres d'alimentation visibles dans la section Paramètres avancés d'alimentation (pour cela, dans le registre de chaque sous-clé dans HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ PowerSettings \ 238C9FA8-0AAD-41ED-83F4-97BE242C8F20, si vous avez le paramètre Attributes , vous devez affecter valeur pour lui 2 ). Maintenant que tous les paramètres sont disponibles, désactivez le mode veille, le mode absence, supprimez l'action sur le bouton d'alimentation (sauf si, bien sûr, vous en avez besoin autrement) et désactivez le minuteur d'autorisation lorsqu'il est inactif. Ensuite, nous supprimons le mode veille avec la connexion (dans la section HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power , vous devez définir le paramètre CsEnabled sur 0 ). Si nécessaire, désactivez le contrôle adaptatif de la luminosité de l'écran.


Lorsque tous les paramètres système sont terminés, nous avons la dernière possibilité d'apporter des modifications, car la deuxième exécution du script AfterSetup.bat démarrera le mécanisme de configuration automatique à l'aide de SysPrep , qui ne peut pas être arrêté. Vous devez toujours vous rappeler d'activer le système (il est suggéré de vous familiariser avec les options d'activation pour les versions d'entreprise de Windows). Même à ce stade, vous pouvez faire une copie de sauvegarde de l'intégralité du disque et corriger l'état préliminaire de l'image en cas de modifications futures.


À la fin du travail, SysPrep ne redémarrera pas, mais éteindra l'ordinateur - à ce stade, vous pouvez créer une image déjà opérationnelle, prête pour le portage vers une série.


5. Configuration finale du système automatique


Après le premier chargement de l'image de travail (voir FirstLogon.bat à partir du référentiel), l'interface sécurisée sera configurée, la connexion automatique sera reconfigurée sur le compte utilisateur et les raccourcis clavier susceptibles de briser le système seront désactivés. Ensuite, le filtre d'écriture unifié sera configuré et activé. Dans ce cas, le filtre est configuré pour protéger toutes les partitions à l'exception des dossiers Service et Logs et utilise un swap de 256 Mo. Le système redémarrera plusieurs fois et, si tout est fait correctement, au prochain démarrage, une interface sécurisée apparaîtra, lancée au nom du compte utilisateur .


Pour entretenir le système sur site, il est possible d'accéder à l'écran de connexion et, par exemple, de se connecter au compte administrateur. Dans Windows 10, une méthode standard est fournie pour cela, vous devez appuyer sur la touche «Win» 5 fois de suite.


Chemin Linux


Il n'y a pas de moyen standard unique de créer des systèmes embarqués avec une interface graphique basée sur Linux. Comme il n'y a pas de distribution commune unique, il s'agit tout de même d'une famille de systèmes créés selon des principes complètement différents. Le sujet le plus proche peut sembler être le projet Yocto Linux. Cependant, il est assez difficile de collecter des images remplies d'applications, de pilotes et de bibliothèques tierces. Pour résoudre ce problème, il est plus facile de prendre une distribution prête à l'emploi et bien prise en charge et de la configurer manuellement.


Solution simple


1. Installation initiale


Donc, tout d'abord, nous avons besoin de la distribution elle-même, par exemple Debian . Vous pouvez en prendre un autre, vous pouvez faire le vôtre. L'essentiel est que la distribution ne dispose pas d'un système de mise à jour automatique. Pour la carte expérimentale, Debian Linux 9 (version 64 bits, noyau 4.9) a été choisie.


Nous installons le système de manière traditionnelle. Lors de l'installation, nous avons divisé le disque en deux sections, sda1 - / pour le système, sda2 - / var / log pour les journaux système et logiciels. Une telle ventilation est utile à l'avenir pour le filtre d'enregistrement. Installez l' interface graphique xfce standard et le serveur ssh . Nous ajoutons l' administrateur lors de l'installation de l'utilisateur et définissons le mot de passe.


Après l'installation, la première chose du compte root est d'ajouter l'utilisateur administrateur au groupe sudo .


 apt install sudo adduser administrator sudo 

Nous entrons dans le système sous l' administrateur du nom d'utilisateur et ajoutons un nouvel utilisateur utilisateur .


 sudo useradd -m user 

Pour plus de commodité, vous pouvez supprimer complètement le mot de passe pour lui, car l'accès à ce compte sera toujours fermé partout.


 sudo passwd -d user 

2. Configuration du système


Nous installons les pilotes, les progiciels, les programmes supplémentaires selon vos besoins.


Pour activer l'administration à distance à l'avenir, si nécessaire, vous pouvez installer et configurer le serveur vnc . Cependant, dans ce cas, cela n'a aucun sens, car toutes les tâches administratives peuvent être facilement effectuées via la console, et pour cela, seul l'accès via ssh est suffisant.


Linux a la possibilité d'utiliser différents gestionnaires de fenêtres pour différents utilisateurs. Pour que l'interface utilisateur fonctionne, installez un gestionnaire minimaliste avec la possibilité d'affiner. Et pour la configuration, vous aurez besoin de quelques applications supplémentaires.


 sudo apt install fluxbox arandr plymouth 

En utilisant arandr, vous pouvez modifier la résolution et l'orientation de l'écran, si nécessaire, puis enregistrer la configuration sous forme de script (Fig. 4).


Paramètres d'écran set_resolution.sh


Fig. 4. Paramètres d'écran.


Ensuite, vous devez vous connecter au système une fois sous le compte d'utilisateur, après avoir sélectionné Fluxbox installé précédemment comme gestionnaire de fenêtres, puis vous déconnecter à nouveau. Ceci est nécessaire pour que Fluxbox crée au premier démarrage tous les fichiers de paramètres et soit sélectionné comme gestionnaire standard pour le compte utilisateur (voir le fichier .dmrc dans le répertoire personnel de l' utilisateur ).


Vous devez maintenant configurer fluxbox pour répondre aux exigences d'interface décrites ci-dessus. Pour ce faire, désactivez le panneau session.screen0.toolbar.visible dans /home/user/.fluxbox/init : false , commentez tous les raccourcis clavier à l'exception des boutons de volume dans /home/user/.fluxbox/keys et dans / home / user /. fluxbox / startup ajoute le lancement du script de configuration d'écran, désactivant les fonctions d'économie d'énergie du moniteur et l'exécution automatique de l'application plein écran. Le script redémarrera l'application en cas d'échec inattendu.


 set_resolution.sh xset -dmps s off /home/user/autostart.sh & 

Vous devez maintenant accélérer le processus de démarrage du système et le cacher à l'utilisateur. Pour ce faire, définissez GRUB_TIMEOUT = 0 dans / etc / default / grub et définissez quiet_boot = "1" dans /etc/grub.d/10_linux . Pour afficher l'animation lors du chargement dans les paramètres du noyau GRUB_CMDLINE_LINUX, vous devez ajouter l'option splash , et si l'orientation de l'écran change, l' option fbcon = rotation: 1 ou fbcon = rotation: 3 , selon la direction. Si nécessaire, vous pouvez modifier la résolution et l'orientation sur l'écran de connexion. Pour cela, display-setup-script = set_resolution.sh doit être spécifié dans /etc/lightdm/lightdm.conf . Et si vous devez masquer le curseur, ajoutez alors xserver-command = X -core -nocursor .


Nous choisirons un style d'animation de chargement.


 sudo plymouth-set-default-theme -R text 

Et enfin, corrigez tous les changements.


 sudo update-grub2 

3. Installation de programmes


Pour obtenir l'interface de démonstration de KioskShell, vous devez créer une version Linux à partir des sources. Les conseils d'assemblage se trouvent dans le référentiel.


Nous copions les fichiers sur la carte et obtenons la structure de fichiers et de répertoires suivante:


 / ├── usr/ -      "KioskShell"    ├── local/ │ └── bin/ │ └── set_resolution.sh └── home/ ├── administrator/ │ └── relogin.sh -       └── user/ └── autostart.sh -     

4. Configuration finale du système


À ce stade, vous pouvez faire une copie de sauvegarde de l'intégralité du disque et corriger l'état préliminaire de l'image en cas de modifications futures.


Configurez la connexion automatique sous le compte utilisateur, pour cela, définissez autologin-user = user dans /etc/lightdm/lightdm.conf .


Définissez maintenant la protection en écriture.


 sudo apt install bilibop 

Lors de l'installation, sélectionnez la carte dynamique des faux appareils .


Modifiez le fichier de paramètres /etc/bilibop/bilibop.conf . Nous activons le module avec le paramètre BILIBOP_LOCKFS = "true" et ajoutons une section avec des logs aux exceptions BILIBOP_LOCKFS_WHITELIST = "/ var / log" . Activons la possibilité de désactiver temporairement la protection si nécessaire BILIBOP_LOCKFS_POLICY = "soft" . Et comme il n'y a pas de chiffrement dans le système, vous devez définir BILIBOP_LOCKFS_SWAP_POLICY = "soft" .


Nous redémarrons le système et, si tout est fait correctement, une interface sécurisée apparaît, lancée au nom du compte utilisateur.


La dernière étape peut être facilement automatisée pour obtenir un système avec une configuration automatique au premier démarrage. Cela créera une distribution pour la mise à l'échelle sur plusieurs appareils (ce mécanisme est proposé pour être mis en œuvre indépendamment).


Pour réparer le système en place, il est possible d'accéder à l'écran de connexion et de se connecter au compte administrateur. Sous Linux, vous devez d'abord accéder à la console via Ctrl + Alt + F1. Après vous être connecté au compte administrateur, forcez l'utilisateur utilisateur à se déconnecter du système.


 sudo skill -KILL -u user 

Revenez ensuite en mode graphique via Ctrl + Alt + F7 et reconnectez-vous en tant qu'administrateur.


Conclusions


Quel que soit le chemin choisi, le résultat final est le même résultat. Avec une configuration appropriée, l'interface utilisateur répondra à toutes les exigences décrites ci-dessus. Seules les différences visuelles sont possibles, associées, en règle générale, aux fonctionnalités de rendu des éléments graphiques en utilisant l'accélération matérielle sur différentes plates-formes.


Application shell protégé

Fig. 5. L'interface est opérationnelle.


Étant donné que la base du système est un ordinateur à carte unique, l'installation d'un écran tactile ou d'autres commandes ne posera aucun problème. Si vous disposez de l'application appropriée, sur cette base, vous pouvez créer non seulement la console de contrôle ou le tableau de bord interactif de l'appareil, mais également d'autres appareils, par exemple des terminaux d'informations ou de trading.


Problème de choix


Il y a une opinion que Linux est très difficile à configurer et à maintenir, mais en même temps, il est gratuit, et Windows est simple et pratique, mais cela coûte de l'argent. C'est peut-être vrai, mais seulement au niveau des ménages. Lorsqu'il s'agit de créer des systèmes embarqués, d'autres circonstances doivent être prises en compte. Par exemple, affiner Windows, en particulier en termes de gestion de l'alimentation et d'autres éléments de bas niveau, ne semble plus simple et pratique. De plus, n'oubliez pas que Windows 10 est assez gourmand en ressources. Dans cet exemple, il était possible de mesurer la consommation de mémoire d'un système propre plusieurs fois, et elle était d'environ 400 Mo en mode inactif. À titre de comparaison, Linux Debian avec tous ses modules complémentaires occupait environ 200 Mo de mémoire. Bien sûr, si vous avez plusieurs gigaoctets de RAM, ce n'est pas un problème, mais quand vous utilisez Windows et des applications clientes très chargées, vous devez prendre des ordinateurs à carte unique plus puissants. Linux est moins exigeant en ressources, mais vraiment difficile à configurer et nécessite une approche soignée, en particulier lorsque vous travaillez avec le chargeur de démarrage. De plus, lors du développement et de l'implémentation de certains éléments dans le système, il est parfois nécessaire d'assembler votre propre noyau avec des paramètres spéciaux. Il est efficace, mais nécessite un niveau de compétence approprié.


Il est difficile de faire un choix sans ambiguïté dans le cadre de la création d'une interface sécurisée. La complexité du déploiement de systèmes est à peu près la même. Le coût d'acquisition de licences Windows pour une série d'instruments peut être égal au coût de maintenance des systèmes sous Linux. Quel système choisir, vous décidez.


Diverses interfaces homme-machine basées sur les exemples décrits ont été introduites par l'auteur dans des dispositifs électroniques pour une grande variété d'applications et ont prouvé leur opérabilité dans le monde réel.

Source: https://habr.com/ru/post/fr434086/


All Articles