Implementación integrada de Windows y Linux

Este artículo describe cómo implementar rápidamente un sistema integrado basado en Windows 10 y Debian Linux. Se dan ejemplos de construcción de una interfaz segura.

Introduccion


En el proceso de desarrollo de dispositivos que tienen una interfaz gráfica hombre-máquina, tarde o temprano surge la tarea no solo de crear la interfaz en sí, sino también de elegir la plataforma en la que debería funcionar. Dicha plataforma puede ser una computadora de placa única con un sistema operativo, o un microcontrolador con una pantalla y un conjunto de bibliotecas relevantes, o alguna otra solución original.


A menudo sucede que en el nivel superior del sistema de control en el que se ejecuta la interfaz, también se realizan tareas de comunicación con el mundo exterior y la interacción con una amplia gama de dispositivos periféricos. Además, la interfaz en sí puede ser bastante exigente con los recursos gráficos. Dado esto, y para ahorrar costos de mano de obra, es posible tomar una computadora de placa única como base e instalar un sistema operativo listo para usar. El desarrollo de software en este caso puede simplificarse enormemente mediante el uso de marcos modernos con buena documentación y un conjunto de ejemplos.


Requerimientos de interfaz


Desde el punto de vista del usuario, la interfaz debe cumplir los siguientes requisitos:


  • Al cargar en pantalla completa, debería aparecer una aplicación, es la misma interfaz, es el mismo shell gráfico;
  • Aparte de esta aplicación, nada más debería estar disponible para el usuario;
  • La aplicación debería funcionar todo el tiempo, el sistema no debería quedarse dormido, la pantalla no debería apagarse;
  • Todos los atajos de teclado, ayudantes, funciones de accesibilidad y otras funciones similares deben desactivarse;
  • En caso de falla de la aplicación, el sistema debería reiniciarla automáticamente;
  • El sistema no tiene requisitos especiales para la velocidad o los modos en tiempo real, sin embargo, es necesario que la interfaz responda a los comandos del usuario sin demoras notables;
  • El sistema debe ser resistente a reinicios duros repetidos, no debería ser necesario ejecutar un script especial para completar el trabajo;
  • Debería ser posible clonar rápidamente el ensamblaje terminado en una serie de dispositivos con todas las configuraciones necesarias realizadas en modo automático.

En otras palabras, una limitación completa de las acciones del usuario, la estabilidad y la escalabilidad.


En cuanto al sistema operativo para una computadora de placa única, consideraremos inmediatamente dos opciones, una basada en Windows, la otra basada en Linux, y las compararemos entre sí.


Por ejemplo, creemos una interfaz de quiosco de pantalla táctil. Y como aplicación, tomemos uno de los ejemplos de capacitación de Qt Quick e impleméntelo con algunos cambios. El marco Qt está disponible para ambos sistemas operativos.


Para no profundizar en los matices de instalar Windows y Linux en una plataforma ARM, el sistema se puede ensamblar fácilmente sobre la base de algún procesador compatible con x86. En este caso, una de las muchas placas disponibles en la plataforma Intel Bay Trail se utilizó para experimentos.


Un paquete de todos los programas y scripts está disponible en GitHub .


Ruta de Windows


En un momento, se introdujo Windows Embedded de Microsoft para crear sistemas integrados. Incluso en la primera versión de Windows Embedded XP, los desarrolladores recibieron un conjunto de herramientas para ensamblar los controladores más truncados, pero equipados con los controladores de imagen necesarios. Estos ensambles requerían un mínimo de RAM y funcionaban bien incluso en procesadores débiles. La tecnología fue desarrollada en la versión de Windows Embedded Standard 7, donde se me recordó el proceso de crear sus propios ensamblajes. Windows Embedded utilizó la ideología de un catálogo abierto de módulos, y cualquiera podía equipar su sistema con solo el conjunto de componentes necesarios. La última versión en la que estaba disponible este enfoque, aunque en forma truncada, es Windows Embedded Standard 8.1.


Windows 10 IoT moderno se posiciona como una alternativa a Windows Embedded, pero es muy diferente de sus predecesores. Un catálogo de componentes abierto ya no está disponible. La capacidad de recopilar imágenes claras del diseñador y hacer sus propios discos de instalación de ellas ha desaparecido. Las opciones especiales de un sistema integrado, como un filtro de grabación, la marca del gestor de arranque, un filtro de teclado, etc., ahora se configuran en un sistema preinstalado. Además, el soporte para estas funciones está disponible solo como parte de la versión pesada de Windows 10 Enterprise.


Sin embargo, a pesar de los altos requisitos del sistema, especialmente a la cantidad de RAM, el uso de incluso versiones pesadas en soluciones integradas no causa ningún problema especial, principalmente debido a la disponibilidad de componentes de hardware. Además, no olvide que en los últimos años se ha vuelto más difícil comprar una licencia para productos antiguos de Microsoft.


Arreglo rápido


Tras el primer examen, resulta que incluso en Windows 10 ordinario ya hay una función incorporada de "Acceso asignado" (Fig. 1), que parece una solución lista para la tarea.


Acceso asignado

Fig. 1. Función de acceso asignada


Un programa que se puede utilizar como interfaz en este caso debe desarrollarse inicialmente como una aplicación de la Plataforma universal de Windows. Estas aplicaciones appx se instalan, por ejemplo, en un Windows Phone. Una aplicación simple de pantalla completa, por supuesto, puede convertirse a appx y firmarse con los certificados necesarios, y luego instalarse. Puede funcionar como una interfaz, pero sin la protección adecuada. Desafortunadamente, en el modo normal de "Acceso asignado", el usuario todavía tiene acceso abierto a algunas configuraciones del sistema y teclas de acceso rápido. Como resultado, no se puede obtener una interfaz que cumpla con todos los requisitos anteriores utilizando este enfoque. El sistema debe configurarse manualmente, de una manera diferente.


Decisión correcta


1. Instalación inicial


Entonces, antes que nada, necesitamos la distribución de Windows 10 Enterprise LTSB . Puede tomar la imagen original de Microsoft, puede usar una ligera, o hacer la suya usando herramientas de terceros. Para la placa experimental, se seleccionó uno de los ensamblajes ya preparados (versión ligera de 32 bits).


Instalamos el sistema desde el kit de distribución en el tablero de destino. Al instalar, dividimos el disco en dos secciones, C: - para el sistema, D: - para la aplicación principal, utilidades y registros. Tal desglose es útil en el futuro para el filtro de grabación. Después de la instalación, esperamos hasta que aparezca el menú de configuración, o no continuamos el menú con la configuración de red.


Reiniciamos en el modo de servicio a través de Ctrl + Shift + F3.


Si no hubo errores durante el proceso de instalación, luego de reiniciar, el sistema entrará en la cuenta de servicio del administrador y aparecerá la ventana SysPrep en la pantalla (Fig. 2). Debe estar cerrado, iniciaremos SysPrep de manera diferente, utilizando un archivo de respuesta especial que aún no se ha creado.


Ventana sysprep

Fig. 2. Modo de servicio.


2. Configuración del sistema


Para otras acciones, necesitará las herramientas de implementación del Kit de evaluación e implementación de Windows 10 .


Desde el disco con la distribución de Windows instalada en la placa, debe extraer el archivo de imagen install.wim . Sucede que en algunos ensamblajes este archivo puede almacenarse en forma comprimida con la extensión esd . En este caso, primero debes descomprimirlo. La utilidad dism se utiliza para esto.


Descubra el número de serie de la versión deseada dentro del contenedor (SourceIndex).


dism /Get-WimInfo /WimFile:install.esd 

Luego, extraiga el archivo de imagen (en este caso, el primero en el contenedor).


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

Ahora debe abrir la imagen en el Administrador de imágenes del sistema de Windows (desde las Herramientas de implementación) y generar un directorio.


Cabe señalar que trabajar con imágenes en Windows System Image Manager solo es posible si la profundidad de bits de la imagen coincide con la profundidad de bits del host. Es decir, es imposible editar la imagen de la versión de 32 bits en un sistema de 64 bits. Aquí, como dicen, sin comentarios.


Cuando se crea el directorio, edite el archivo de respuesta para la utilidad SysPrep . Ingrese la información del propietario, agregue los usuarios necesarios y configure el primer inicio de sesión automático (Fig. 3).


Archivo de respuestas

Fig. 3. Crear un archivo de respuesta.


No tiene sentido enumerar todos los parámetros; el contenido del archivo de respuesta se puede encontrar en el repositorio. Lo principal es no olvidar establecer los parámetros de CopyProfile en true , SkipReam a 1 y habilitar el inicio de sesión automático del administrador. Puede ingresar su clave de producto en la sección 4 specialize - Microsoft-Windows-Shell-Setup - ProductKey .


3. Instalar programas


A continuación, necesita el archivo de imagen install.wim real, por lo que debe colocarlo junto al archivo de respuesta personalizar.xml , en el que, después de guardar, debe reemplazar manualmente la ruta a la imagen. Al final del archivo, la línea debería verse así:


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

Para obtener la interfaz de demostración de KioskShell, debe crear una versión para Windows desde el origen. Los consejos de ensamblaje están en el repositorio.


Copiamos los archivos a la pizarra y obtenemos la siguiente estructura de archivos y directorios:


 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. Configuración manual del sistema


Cuando el sistema está en modo de servicio, puede reiniciar tantas veces como lo desee, el sistema volverá a él automáticamente. Sin embargo, con un tiempo de inactividad prolongado antes de configurar la alimentación, la pantalla puede bloquearse y no volver a entrar, solo un reinicio ayudará. Como cada proyecto específico puede tener sus propias características de configuración, es mejor hacerlo manualmente, pero también puede usar scripts de automatización.


Instalamos los componentes necesarios del sistema incorporado y deshabilitamos el control de la cuenta de usuario (consulte AfterSetup.bat desde el repositorio)


Instale todos los controladores, configure el hardware (tarjeta de red IP, resolución y orientación de la pantalla, puertos de dispositivos externos, etc.), desactive las teclas fijas y todas las funciones especiales.


Como en el futuro me gustaría poder administrar de forma remota, habilitaremos el acceso a través de RDP. La contraseña del administrador caducará en la etapa de configuración automática.


A continuación, debe deshabilitar la actualización del sistema en el Editor de directivas de grupo local (en la sección Configuración del equipo - Plantillas administrativas - Componentes de Windows - Actualización de Windows , debe configurar Actualizaciones automáticas configuradas como Deshabilitado ). Además, también debe desactivar la exploración automática de Windows Update (en el programador de tareas en la sección Microsoft - Windows - UpdateOrchestrator , debe deshabilitar todas las tareas), de lo contrario, aparecerá una ventana negra cada vez que inicie, y cuando se conecte a Internet, Windows puede comenzar a actualizarse repentinamente.


Luego, configure los ajustes de energía. Para hacer esto, primero debe hacer visibles todas las configuraciones de energía en la sección Configuración avanzada de energía (para esto, en el registro en cada subclave en HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ PowerSettings \ 238C9FA8-0AAD-41ED-83F4-97BE242C8F20, si tiene el parámetro Atributos , debe asignar el atributo valor para él 2 ). Ahora que todas las configuraciones están disponibles, apague el modo de suspensión, el modo de ausencia, elimine la acción del botón de encendido (a menos que, por supuesto, necesite lo contrario) y apague el temporizador de autorización cuando esté inactivo. A continuación, eliminamos el modo de espera con la conexión (en la sección HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power , establezca el parámetro CsEnabled en 0 ). Si es necesario, apague el control de brillo adaptativo de la pantalla.


Cuando se completan todas las configuraciones del sistema, tenemos la última oportunidad de realizar cambios, ya que la segunda ejecución del script AfterSetup.bat iniciará el mecanismo de configuración automática usando SysPrep , que no se puede detener. Aún debe recordar activar el sistema (se propone familiarizarse con las opciones para activar las versiones corporativas de Windows usted mismo). Incluso en esta etapa, puede hacer una copia de seguridad de todo el disco y corregir el estado preliminar de la imagen en caso de cualquier cambio en el futuro.


Al final del trabajo, SysPrep no se reiniciará, sino que apagará la computadora; en este punto, ya puede crear una imagen de trabajo, lista para portar a una serie.


5. Configuración final automática del sistema


Después de la primera carga de la imagen de trabajo (consulte FirstLogon.bat desde el repositorio), se configurará la interfaz segura, el inicio de sesión automático se volverá a configurar en la cuenta de Usuario y se deshabilitarán los métodos abreviados de teclado que pueden dañar el sistema. A continuación, el Filtro de escritura unificado se configurará y activará. En este caso, el filtro está configurado para proteger todas las particiones, excepto las carpetas Servicio y Registros , y utiliza un intercambio de 256 MB. El sistema se reiniciará varias veces y, si todo se hace correctamente, en el próximo inicio aparecerá una interfaz segura, que se iniciará en nombre de la cuenta de usuario .


Para reparar el sistema en el sitio, es posible ir a la pantalla de inicio de sesión y, por ejemplo, iniciar sesión en la cuenta de administrador. En Windows 10, se proporciona un método estándar para esto, debe presionar la tecla "Win" 5 veces seguidas.


Ruta de Linux


No existe una única forma estándar de crear sistemas integrados con una interfaz gráfica basada en Linux. Como no existe una distribución común única, de todos modos, esta es una familia de sistemas que se crea con principios completamente diferentes. El tema más cercano puede parecer el proyecto Yocto Linux. Sin embargo, es bastante difícil recopilar imágenes llenas de aplicaciones, controladores y bibliotecas de terceros. Para resolver este problema, es más fácil tomar una distribución preparada y bien soportada y configurarla manualmente.


Solución simple


1. Instalación inicial


Entonces, antes que nada, necesitamos la distribución en sí, por ejemplo Debian . Puedes tomar otro, puedes hacer el tuyo. Lo principal es que la distribución no tiene un sistema de actualización automática. Para la placa experimental, se eligió Debian Linux 9 (versión de 64 bits, kernel 4.9).


Instalamos el sistema de la manera tradicional. Al instalar, dividimos el disco en dos secciones, sda1 - / para el sistema, sda2 - / var / log para el sistema y los registros de software. Tal desglose es útil en el futuro para el filtro de grabación. Instale la GUI xfce estándar y el servidor ssh . Agregamos administrador durante la instalación del usuario y establecemos la contraseña.


Después de la instalación, lo primero de la cuenta raíz es agregar el usuario administrador al grupo sudo .


 apt install sudo adduser administrator sudo 

Entramos en el sistema bajo el administrador de nombre de usuario y agregamos un nuevo usuario usuario .


 sudo useradd -m user 

Para mayor comodidad, puede eliminar la contraseña por completo, ya que el acceso a esta cuenta seguirá cerrado en todas partes.


 sudo passwd -d user 

2. Configuración del sistema


Instalamos controladores, paquetes de firmware, programas adicionales según se desee.


Para habilitar la administración remota en el futuro, si es necesario, puede instalar y configurar el servidor vnc . Sin embargo, en este caso esto no tiene sentido, ya que todas las tareas administrativas se pueden realizar fácilmente a través de la consola, y para esto solo es suficiente el acceso a través de ssh .


Linux tiene la capacidad de usar diferentes administradores de ventanas para diferentes usuarios. Para que la interfaz de usuario funcione, instale un administrador minimalista con la capacidad de ajustar. Y para la configuración necesitará algunas aplicaciones más.


 sudo apt install fluxbox arandr plymouth 

Con arandr, puede cambiar la resolución y la orientación de la pantalla, si es necesario, y luego guardar la configuración como un script (Fig. 4).


Parámetros de pantalla set_resolution.sh


Fig. 4. Configuración de la pantalla.


A continuación, debe iniciar sesión en el sistema una vez bajo la cuenta de usuario, después de seleccionar fluxbox instalado anteriormente como administrador de ventanas, y luego volver a cerrar sesión. Esto es necesario para que fluxbox al primer inicio cree todos los archivos de configuración y se seleccione como administrador estándar para la cuenta de usuario (consulte el archivo .dmrc en el directorio de inicio del usuario ).


Ahora necesita configurar fluxbox para cumplir con los requisitos de interfaz descritos anteriormente. Para hacer esto, en /home/user/.fluxbox/init, apague el panel session.screen0.toolbar.visible : false , en /home/user/.fluxbox/keys comentamos todos los atajos de teclado, excepto los botones de volumen, y en / home / user /. fluxbox / startup agrega el inicio del script de configuración de pantalla, deshabilitando las funciones de ahorro de energía del monitor y la ejecución automática de la aplicación de pantalla completa. El script reiniciará la aplicación en caso de falla inesperada.


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

Ahora necesita acelerar el proceso de arranque del sistema y ocultarlo al usuario. Para hacer esto, establezca GRUB_TIMEOUT = 0 en / etc / default / grub y establezca quiet_boot = "1" en /etc/grub.d/10_linux . Para mostrar la animación al cargar en los parámetros del núcleo GRUB_CMDLINE_LINUX, debe agregar la opción de bienvenida , y en caso de cambiar la orientación de la pantalla, la opción fbcon = rotate: 1 o fbcon = rotate: 3 , dependiendo de la dirección. Si es necesario, puede cambiar la resolución y la orientación en la pantalla de inicio de sesión. Para esto, display-setup-script = set_resolution.sh debe especificarse en /etc/lightdm/lightdm.conf . Y si necesita ocultar el cursor, agregue xserver-command = X -core -nocursor .


Elegiremos un estilo de animación de carga.


 sudo plymouth-set-default-theme -R text 

Y finalmente arregle todos los cambios.


 sudo update-grub2 

3. Instalar programas


Para obtener la interfaz de demostración de KioskShell, debe crear una versión de Linux desde el origen. Los consejos de ensamblaje están en el repositorio.


Copiamos los archivos a la pizarra y obtenemos la siguiente estructura de archivos y directorios:


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

4. Configuración final del sistema


En esta etapa, puede hacer una copia de seguridad de todo el disco y corregir el estado preliminar de la imagen en caso de cualquier cambio en el futuro.


Configure el inicio de sesión automático en la cuenta de usuario; para esto, configure autologin-user = user en /etc/lightdm/lightdm.conf .


Ahora configure la protección contra escritura.


 sudo apt install bilibop 

Al instalar, seleccione el mapa dinámico de dispositivos falsos .


Edite el archivo de configuración /etc/bilibop/bilibop.conf . Activamos el módulo con el parámetro BILIBOP_LOCKFS = "true" y agregamos una sección con registros a las excepciones BILIBOP_LOCKFS_WHITELIST = "/ var / log" . Habilitemos la capacidad de deshabilitar temporalmente la protección si es necesario BILIBOP_LOCKFS_POLICY = "soft" . Y como no hay cifrado en el sistema, debe configurar BILIBOP_LOCKFS_SWAP_POLICY = "soft" .


Reiniciamos el sistema y, si todo se hace correctamente, aparece una interfaz segura, que se inicia en nombre de la cuenta de usuario.


El último paso puede automatizarse fácilmente para obtener un sistema con configuración automática desde el primer inicio. Esto creará una distribución para escalar a múltiples dispositivos (se propone implementar este mecanismo de forma independiente).


Para reparar el sistema en su lugar, es posible acceder a la pantalla de inicio de sesión e iniciar sesión en la cuenta de administrador. En Linux, primero debe llegar a la consola a través de Ctrl + Alt + F1. Después de iniciar sesión en la cuenta de administrador, obligue al usuario a cerrar sesión en el sistema.


 sudo skill -KILL -u user 

Luego regrese al modo gráfico a través de Ctrl + Alt + F7 e inicie sesión nuevamente como administrador.


Conclusiones


No importa qué ruta se haya elegido, el resultado final es el mismo resultado. Con la configuración adecuada, la interfaz de usuario cumplirá con todos los requisitos descritos anteriormente. Solo son posibles las diferencias visuales, asociadas, por regla general, con las características de renderizar elementos gráficos usando la aceleración de hardware en diferentes plataformas.


Aplicación de shell protegida

Fig. 5. La interfaz está en funcionamiento.


Dado que la base del sistema es una computadora de placa única, no será un problema instalar ninguna pantalla táctil u otros controles. Si tiene la aplicación adecuada, sobre esta base puede crear no solo la consola de control del dispositivo o el tablero interactivo, sino también otros dispositivos, por ejemplo, información o terminales comerciales.


Problema de elección


Existe la opinión de que Linux es muy difícil de configurar y mantener, pero al mismo tiempo es gratuito, y Windows es simple y conveniente, pero cuesta dinero. Esto tal vez sea cierto, pero solo a nivel del hogar. Cuando se trata de crear sistemas integrados, se deben considerar otras circunstancias. Por ejemplo, ajustar Windows, especialmente en términos de administración de energía y otros elementos de bajo nivel, ya no parece simple y conveniente. Además, no olvide que Windows 10 exige bastante recursos. En este ejemplo, fue posible medir el consumo de memoria de un sistema limpio varias veces, y tenía aproximadamente 400 MB en estado inactivo. A modo de comparación, Linux Debian con todos sus complementos ocupaba unos 200 MB de memoria. Por supuesto, si tiene varios gigabytes de RAM, esto no es un problema, pero aún así, cuando usa Windows y aplicaciones cliente altamente cargadas, debe tomar computadoras de una sola placa más potentes. Linux requiere menos recursos, pero es realmente difícil de configurar y requiere un enfoque ordenado, especialmente cuando se trabaja con el gestor de arranque. Además, durante el desarrollo e implementación de algunos elementos en el sistema, a veces es necesario ensamblar su propio núcleo con parámetros especiales. Es efectivo, pero requiere un nivel apropiado de habilidad.


Es difícil hacer una elección inequívoca como parte de la creación de una interfaz segura. La complejidad de desplegar sistemas es aproximadamente la misma. El costo de adquirir licencias de Windows para una serie de instrumentos puede ser igual al costo de mantener sistemas en Linux. Qué sistema elegir, usted decide.


El autor introdujo varias interfaces hombre-máquina basadas en los ejemplos descritos en dispositivos electrónicos para una amplia variedad de aplicaciones y demostró su operatividad en el mundo real.

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


All Articles