Instalar GNU/Linux en un SBC para monitorización y control electrónico

publicado en: Portada, Tutorial | 5

Los sistemas embebidos gozan últimamente de un renovado éxito en su uso para monitorización de sensores y control de dispositivos electrónicos gracias al importante tirón que han dado al mercado los nuevos SBC que, liderados por las placas Raspberry Pi, definen un nuevo estilo de sistema de desarrollo para control y monitorización aportando prestaciones capaces de satisfacer tareas exigentes que le otorgan versatilidad para actuar tanto como de pequeños servidores como de terminales gráficos de alta resolución consiguiendo precios muy contenidos.

Además de la libertad que garantiza, el sistema operativo más flexible para trabajar con la amplia gama de recursos que aportan estos dispositivos es GNU/Linux que, gracias a las diferentes distribuciones disponibles, es además muy fácil de instalar y configurar en contextos muy diversos.

SBC Orange Pi Zero ODROID C1 Raspberry Linux Armbian Raspbian

Contenidos

Obtener una imagen con la distribución GNU/Linux

Los SBC basados en CPU con arquitectura ARM, como Raspberry Pi, pueden ejecutar multitud de distribuciones Linux (la Embedded Linux Wiki tiene referencias a muchas de ellas). Algunas de estas distribuciones están específicamente diseñadas para un modelo, como Raspbian, otras son más genéricas y funcionan en multitud de placas, como Armbian. Muchas de las distribuciones incluyen un entorno de escritorio completo pero hay otras con un sistema mínimo, como ocurre con DietPi, que deberá completarse después con el software que la aplicación requiera.

Distribuciones GNU Linux ARM Raspberry Pi

La elección de la distribución Linux incluye un cierto componente subjetivo pero, para poder desarrollar aplicaciones de monitorización y control electrónico, especialmente si se trabaja a un nivel alto, utilizando librerías como WiringPi o Hardware I/O para Processing, la distribución Linux debe hacer posible la carga de los drivers para el núcleo del hardware que se va a controlar (I2C, SPI, GPIO…).

Puesto que una de las características más significativas de los nuevos SBC con respecto a los clásicos sistemas empotrados es la presencia de potentes sistemas gráficos, seguramente también será un factor importante, a la hora de elegir la distribución Linux, la posibilidad de instalar un sistema de ventanas (como X Window System o hasta puede que un entorno de escritorio completo.

La distribución que más utilizo, y que tomo como referencia para los ejemplos de esta guía, es Armbian, porque está basada en Debian (una de mis favoritas tanto para servidores como para escritorio) y porque está disponible para multitud de placas diferentes. Además, permite instalar solo lo necesario sobre un sistema mínimo bastante reducido sobre el que instalar posteriormente los componentes que procedan.

Grabar la imagen de la distribución GNU/Linux en un soporte físico

Una vez descargada la imagen del sistema que corresponda con la placa en la que se va a instalar, se debe grabar en una tarjeta MicroSD (lo más habitual) o en una eMMC (en general, más rápida). Para hacerlo, primero debe descomprimirse con 7-Zip el documento que se ha descargado y luego utilizar algún software específico Armbian, por ejemplo, recomienda Etcher.

Etcher grabar imagen Linux Armbian tarjeta MicroSD SBC Raspberry Pi Orange Pi Zero

Para saber el nombre que el sistema le ha dado al dispositivo destino se puede usar lsblk, que muestra una lista con los diferentes dispositivos de almacenamiento (de bloques) y sus particiones.

Desde el sistema operativo GNU/Linux puede grabarse la imagen usando la herramienta dd con el formato:

  • dd if="/ruta/imagen.iso" of="/dev/sdx" bs=16M && sync

El parámetro if espera el nombre de la imagen y su ubicación, el parámetro of el dispositivo destino y con la opción bs se establece el tamaño del bloque que se lee del origen y se graba en el destino. La orden sync se utiliza después de terminar dd para asegurar que el contenido se ha grabado, vaciando el buffer correspondiente si fuera necesario.

En la siguiente captura de pantalla se muestran los pasos seguidos para instalar Armbian en una placa Orange Pi Zero usando una tarjeta MicroSD.

Armbian Orange Pi Zero instalar Linux tarjeta MicroSD

Expandir el tamaño de la imagen para usar toda la capacidad del soporte

La mayoría de las distribuciones para SBC agrandarán en el primer arranque el tamaño de la partición que se crea al grabar la imagen sobre el soporte correspondiente (un tarjeta MicroSD, por ejemplo) o incluirán utilidades para hacerlo posteriormente. De ser así, lo más recomendable es utilizar el método implementado por la propia distribución, en caso contrario se puede utilizar alguna herramienta de gestión de particiones de disco (de dispositivos de almacenamiento) para hacerlo.

La distribución Raspbian, por ejemplo, aunque redimensiona en el primer arranque la partición principal del sistema, también incluye las utilidades raspi-config, para la consola, o rc_gui (a la que se llega con la entrada de configuración de Raspberry Pi en las preferencias del menú principal) para el entorno gráfico. En ellas, la primera opción permite redimensionar la partición principal.

Instalar Linux SBC Raspbian rc_gui redimensionar partición cambiar tamaño MicroSD tarjeta

Instalar Linux raspi-config redimensionar partición

Si la distribución para el SBC no gestiona automáticamente el tamaño de las particiones o no incluye utilidades para hacerlo, se puede resolver desde el propio sistema en el que se ha grabado la imagen en la tarjeta de memoria SD. Por ejemplo, en un sistema GNU/Linux basado en Debian se puede instalar GNOME Partition Editor (gparted) con la orden sudo apt-get install gparted y redimensionar la partición lanzando la herramienta y realizando las operaciones: ① seleccionar la tarjeta de memoria SD, ② elegir la partición, ③ usar la opción redimensionar o mover y ④ aplicar los cambios elegidos. Si la tarjeta estuviera montada (aparecerá el icono con la llave para indicarlo) antes de cambiar el tamaño de la partición será necesario desmontarla seleccionándola y pulsando sobre la opción correspondiente; como es lógico, no podrá estar en uso durante el proceso.

Instalar Linux SBC GPartEd redimensionar partición elegir MicroSD tarjeta

Instalar Linux SBC GPartEd redimensionar mover partición MicroSD tarjeta

Instalar Linux SBC GPartEd redimensionar partición cambiar tamaño MicroSD tarjeta

Instalar Linux SBC GPartEd redimensionar partición cambiar tamaño MicroSD tarjeta

Definir los usuarios con acceso al sistema operativo

A diferencia de las diseñadas para escritorios convencionales, las distribuciones Linux para SBC basados en arquitectura ARM suelen optar, bien por crear usuarios por defecto o bien por crearlos al arrancar la primera sesión mostrando un diálogo que pregunta los datos necesarios.

Siguiendo el ejemplo de instalación de Armbian, la imagen incluye al superusuario (root) con una clave sencilla (1234) y al arrancar por primera vez, además de realizar algunos ajustes en el soporte (la MicroSD, por ejemplo) pide una nueva clave para el superusuario (el administrador del sistema) y los datos para crear el usuario principal.

Armbian primera sesión root orange pi zero LXTerminal

Añadir nuevos usuarios al sistema

Para añadir nuevos usuarios al sistema se puede utilizar la orden useradd, que necesita privilegios administrativos, indicando el nombre del usuario. Aunque dependerá del tipo de acceso que vaya a tener el usuario, lo habitual es crear una carpeta para su uso personal con la opción -m y asignarle un intérprete de órdenes con la opción -s y la ruta hasta el intérprete.

  • useradd kirchhoff -m -s /bin/bash

Con la orden anterior se creará el usuario kirchhoff y una carpeta /home/kirchhoff como su carpeta personal. También se creará el grupo kirchhoff y se establecerá como su grupo principal. Para utilizar una carpeta diferente se puede indicar su ruta con la opción -d y para utilizar otro grupo como grupo principal se utiliza la opción -g seguida del nombre del grupo. Este grupo debe existir antes de utilizarlo en la orden useradd.

Suponiendo que ya se ha creado el grupo electronicos, la siguiente orden creará al usuario gustav, le asignará este grupo como el principal, creará la carpeta /home/electronica y la asignará como su ubicación de almacenamiento personal. Como en el ejemplo anterior, el intérprete de órdenes por defecto del usuario será /bin/bash

  • useradd gustav -s /bin/bash -m -d /home/electronica -g electronicos

La forma habitual de dar acceso al hardware a un usuario es haciéndole pertenecer a determinados grupos de tipo administrativo, y es a estos grupos a los que se les asigna los permisos de acceso al hardware del SBC. Para asignar estos grupos directamente al crear el usuario se puede utilizar la opción -G seguida de una lista de grupos que se define separándolos por comas y sin usar espacios. Como en el caso anterior, los grupos deben existir para poder asignarlos al usuario.

  • useradd kirchhoff -m -s /bin/bash -G dialout,gpio,plugdev,netdev,bluetooth

Asignar contraseñas a los usuarios

Una vez creado el usuario, es importante definir para él una clave de acceso al sistema, para asignar esta clave se puede utilizar la orden passwd seguida del nombre del usuario. Igual que ocurre con la creación del usuario, passwd necesita ejecutarse con privilegios administrativos. Por seguridad, la clave se pregunta dos veces y no se muestra en la consola.

  • passwd kirchhoff

Para cambiar la contraseña del usuario de la sesión actual se puede utilizar passwd sin argumentos. Salvo que la sesión actual fuera del superusuario, passwd pedirá primero la clave actual, por seguridad, y luego la nueva, que habrá que repetirla para garantizar que se ha escrito correctamente.

En los sistemas que utilizan un usuario predeterminado, como es el caso del usuario pi en Raspbian, especialmente cuando se habilita el acceso remoto, es crítico cambiar la contraseña para evitar que el SBC termine formando parte de una botnet. Además del método expuesto, es normal encontrar en esos casos alguna herramienta de configuración que permita, entre otras cosas, cambiar la clave. En el caso de Raspbian, las utilidades de configuración raspi-config, para la consola, o rc_gui para el entorno gráfico, sirven a este fin.

Instalar Linux SBC Raspbian rc_gui cambiar clave usuario pi

Modificar los datos de los usuarios

También es posible modificar posteriormente los datos de los usuarios con la orden usermod usando el formato usermod opciones usuario, que admite, entre otras, las opciones:

    • -l cambia el nombre del usuario sustituyéndolo por el que se indique en la opción
    • -d sirve para cambiar la carpeta personal a la que se indique en la opción
    • -m permite mover los datos de la carpeta actual a la nueva
    • -g establece un nuevo grupo principal, cuyo nombre debe indicarse en la opción y debe existir
    • -G añade o elimina al usuario de los grupos que se indiquen, separados por comas si son varios
    • -a modifica el comportamiento de la anterior para añadir solamente
    • -s establece un nuevo intérprete de órdenes cuya ruta debe indicarse con la opción

Eliminar usuarios del sistema

Para eliminar los usuarios se utiliza la orden userdel que permite, además, borrar automáticamente su carpeta personal si se añade la opción -r.

  • userdel -r kirchhoff borrará el usuario kirchhoff y su carpeta personal.
Crear grupos de usuarios

Para crear grupos de usuarios se utiliza la orden groupadd seguida del nombre del nuevo grupo. Los grupos que ya existan se pueden cambiar de nombre con groupmod y la opción -n seguida del nuevo nombre. También es posible borrarlos con la orden groupdel seguida del nombre del grupo que se quiere eliminar del sistema operativo.

  • groupadd i2c crea un nuevo grupo con nombre i2c
  • groupmod -n i2c-admin i2c cambia de nombre el grupo i2c y lo llama i2c-admin
  • groupdel i2c-admin borra el grupo i2c-admin
Asignar usuarios a los grupos

Además de asignar los grupos al crear el usuario con useradd o modificándolo con usermod, es posible hacerlo con la orden adduser que espera como argumentos el nombre del usuario y el nombre del grupo al que se añade el usuario.

  • adduser kirchhoff spi añade el usuario kirchhoff al grupo spi
Usuarios con privilegios administrativos

Como el usuario que está activo en esta sesión es root, se pueden realizar sin más todas estas operaciones, que necesitan permisos de administración. Posteriormente, en las siguientes sesiones, es conveniente acceder con el usuario que corresponda, no como root. Si fuera necesario realizar tareas administrativas, se puede trabajar con el usuario principal (el que se ha creado al modificar la clave del superusuario) y utilizar sudo delante de las órdenes; el sistema pedirá la clave de este usuario, que se ha definido con privilegios para poder realizar estas tareas. Para añadir un usuario al grupo de administradores (sudoers, los que pueden utilizar sudo) se puede utilizar la orden:

  • adduser kirchhoff sudo

Para saber los grupos a los que pertenece el usuario actual puede utilizarse la orden groups. Esta orden puede usarse con privilegios administrativos para conocer los grupos de cualquier usuario añadiendo el nombre como argumento.

Armbian sesión sudo LXTermial Orange Pi Zero user group

Actualizar el sistema operativo

Una vez modificada la clave por defecto del usuario root y definido el usuario principal, lo recomendable es actualizar la instalación a la última versión usando la secuencia de órdenes:

  • apt-get update para actualizar la lista de componentes y de sus versiones
  • apt-get upgrade para instalar las actualizaciones disponibles

Estas operaciones también requieren privilegios administrativos, si se ejecutan en la primera sesión, en la que el usuario es es root, pueden invocarse sin más pero, si se ha iniciado ya sesión con un usuario convencional, como se decía en el apartado anterior, será necesario anteponer sudo para lo que el usuario debe pertenecer al grupo correspondiente.

  • sudo apt-get update
  • sudo apt-get upgrade

Instalar el entorno gráfico en el sistema operativo

Aunque algunas distribuciones para Raspberry Pi, como ocurre, por ejemplo, con Raspbian, incluyen opcionalmente un entorno de escritorio completo, en instalaciones de distribuciones Linux ligeras, que suele ser lo habitual para SBC, suele omitirse incluso el sistema de ventanas.

Una forma muy económica, en lo que se refiere a recursos del SBC, y muy sencilla de instalar los componentes más básicos para obtener salida gráfica es por medio del metapaquete xorg, que añadirá las dependencias necesarias para instalar en distribuciones Linux basadas en Debian, como Armbian, el sistema de ventanas X.org (X Window System).

  • sudo apt-get install xorg

Utilizar este metapaquete tiene la ventaja de ser trivial en su instalación y, aunque no sea estrictamente la fórmula más ligera, permitirá trabajar con GUI en aplicaciones para control electrónico y presentación de datos monitorizados por el SBC.

Posteriormente se podrán ir instalando en el sistema las herramientas (gráficas) que vayan haciendo falta para usos específicos, de forma que el sistema contenga solo los complementos que sean necesarios y se mantenga ligero.

Los entornos de escritorio que suelen utilizarse en los SBC, parece lógico, suelen ser los que requieren pocos recursos, típicamente Xfce o, más frecuentemente, LXDE. Estos entornos de escritorio se pueden instalar sobre el sistema con las órdenes:

  • sudo apt-get install xfce para instalar Xfce
  • sudo apt-get install lxde para instalar LXDE

Igual que en el caso de xorg, xfce y lxde son metapaquetes que se encargan de aportar todos los componentes necesarios para que se instale el entorno de escritorio correspondiente vía dependencias.

Como alternativa a disponer de una versión (imagen) del sistema con un entorno gráfico pre-instalado, en algunas distribuciones se incluyen herramientas específicas para añadirlo posteriormente. El caso de DietPi es especialmente interesante: en su herramienta de instalación de software dietpi-software incluye un completo catálogo que permite instalar aplicaciones especialmente optimizadas para los recursos del SBC. Con esta aplicación de DietPi es posible instalar un entorno gráfico de una forma muy sencilla y con excelente rendimiento en el SBC.

Linux DietPi Debian instalar software optimizado

Linux DietPi Debian instalar LXDE optimizado entorno gráfico

Configurar el idioma del sistema operativo

En las instalaciones de las distribuciones GNU/Linux para sistemas de escritorio más convencionales suele estar incluida la configuración del idioma. Como la instalación para un SBC, como las placas Raspberry Pi, suele hacerse copiando en un soporte, como una tarjeta MicroSD, una imagen ya preparada, es probable que sea necesario realizar la configuración del idioma posteriormente, ya sea editando un documento de configuración genérica, con una aplicación específica o con los recursos habituales del sistema, como es el caso de Armbian, la distribución GNU/Linux que se está tomando como referencia en este texto.

En los sistemas basados en Debian, como Armbian, la configuración del idioma se puede establecer con un diálogo que se muestra en la consola con la orden:

  • sudo dpkg-reconfigure locales

En primer lugar se seleccionan los idiomas que se desean agregar. Para hacerlo, se desplaza la lista con las flechas del cursor y se marcan los que corresponda pulsando la barra espaciadora cuando estén seleccionados. En la captura de pantalla de la imagen de abajo se ha elegido el idioma español (es) de España (ES) con el formato UTF-8: es_ES.UTF8.

Configurar idiomas Armbian ARM Linux SBC sudo dpkg-reconfigure locales

Con la tecla de tabulación se puede saltar de la lista de idiomas a las entradas OK o Cancel para aceptar o cancelar, respectivamente, la selección realizada.

Después de haber elegido los idiomas que se desea que estén disponibles en el sistema, se debe seleccionar el idioma por defecto, como se muestra en la captura de pantalla de la imagen de ejemplo de abajo.

Configurar idioma por defecto Armbian ARM Linux SBC sudo dpkg-reconfigure locales

Normalmente, sudo dpkg-reconfigure locales es suficiente para completar la asignación del idioma. Para confirmar que la configuración es correcta, se puede utilizar la orden locale, con la que se muestran las asignaciones. Si alguna no fuera correcta, siguiendo con Debian y Armbian como referencia, se puede editar el documento /etc/default/locale (con privilegios administrativos) y cambiar manualmente las asignaciones incorrectas.

Configurar idiomas Armbian ARM Linux SBC etc default locale

Una vez corregida la asignación, suponiendo que haya sido necesario, se genera la localización con los idiomas correspondientes, que estará disponible en la próxima sesión, utilizando la orden:

  • sudo locale-gen "es_ES" "es_ES.UTF-8"
Configuración del idioma del teclado

En las distribuciones GNU/Linux basadas en Debian la configuración por defecto del teclado se almacena en el documento /etc/default/keyboard con un formato similar al siguiente ejemplo:

Los diferentes valores de cada variable y la explicación de su funcionamiento se pueden encontrar en el documento /usr/share/X11/xkb/rules/base.lst separados por secciones. El nombre de cada sección corresponde (más o menos) con el da la variable del documento de configuración sin el prefijo XKB, por ejemplo, los valores para XKBMODEL están en la sección model y los de XKBLAYOUT en la sección llamada layout. El valor de BACKSPACE se utiliza para determinar cómo se interpreta la tecla de borrar y suprimir. Usando BACKSPACE=»guess» se toma la información del sistema para establecer el comportamiento, lo más recomendable. Los otros valores posibles son del (suprimir) y bs (borrar o retroceder, por backspace).

Normalmente, en una distribución basada en Debian, para configurar, desde una consola local (no en una sesión remota con un cliente SSH), el teclado por defecto del sistema también se pueden seguir los distintos diálogos de sudo dpkg-reconfigure keyboard-configuration:

Instalar Linux SBC teclado configurar idioma modelo

Instalar Linux SBC teclado configurar idioma distribución

Instalar Linux SBC teclado configurar idioma tecla AltGr

Instalar Linux SBC teclado configurar idioma multitecla

Instalar Linux SBC teclado configurar idioma tecla modificadora

Instalar Linux SBC teclado configurar idioma reiniciar servidor X control alt retroceso

Configurar la consola del sistema

De forma similar, con la orden sudo dpkg-reconfigure console-setup se puede configurar la consola del sistema respondiendo a una cadena de menús en los que elegir ① la codificación de caracteres, ② el conjunto de caracteres, ③ el tipo de letra y ④ el tamaño de la tipografía.

Instalar Linux SBC dietpi configuración consola codificación UTF-8

Instalar Linux SBC dietpi configuración consola juego caracteres conjunto

Instalar Linux SBC dietpi configuración consola tipo de letra tipografía

Instalar Linux SBC dietpi configuración consola tamaño letra

Utilidades de configuración regional específicas de algunas distribuciones Linux

En algunas distribuciones para SBC, las tareas más habituales, la elección de idioma y el teclado, en este caso, cuentan con utilidades para simplificar el proceso. Por ejemplo, la distribución DietPi, también basada en Debian, como Armbian, además de una clara vocación por optimizar los recursos del SBC, incluye una completa aplicación de desarrollo propio, dietpi-config, para simplificar la configuración del sistema.

Linux DietPi Debian configurar local regional idioma SBC

Instalar Linux SBC dietpi configuración regional idioma teclado zona horaria

En el caso de Raspbian, sus utilidades raspi-config y rc_gui permiten cambiar el idioma y los otros aspectos regionales de configuración del sistema, incluyendo el teclado.

Instalar Linux SBC Raspbian rc_gui cambiar idioma localización

Instalar Linux SBC Raspbian rc_gui cambiar idioma localización país regionalización

Preparar los drivers del núcleo

Para usar un SBC en monitorización y control de dispositivos es necesario disponer de acceso al hardware y el acceso al hardware en un sistema mínimamente complejo y especialmente cuando se desarrolla a alto nivel, se hace por medio de los drivers. Para poder utilizarlos, es necesario ① identificar los drivers del núcleo asociados al hardware que se va a controlar (I2C, SPI, GPIO…), ② cargar los módulos, para lo que puede ser necesario también sacarlos de la «lista negra» que impide que se produzca esta carga, ③ configurar los drivers con el funcionamiento deseado y ④ asignar permisos, a los usuarios que corresponda, para que tengan acceso a los drivers y por medio de ellos al hardware.

Instalar herramientas auxiliares de gestión del hardware

Existen herramientas para el sistema que están orientadas a la gestión de algunos de los recursos hardware y que pueden ayudar en los trabajos que muchas veces acompañan al desarrollo de aplicaciones de monitorización y control. Además, estas herramientas suelen resolver automáticamente algunas de las tareas de preparación de drivers descritas en el párrafo anterior, por lo que, opcionalmente, puede resultar útil instalarlas inicialmente.

Un ejemplo representativo de este tipo de programas, y una de las herramientas más usadas cuando se desarrollan aplicaciones de control de hardware, es el juego de utilidades para las comunicaciones I2C «I2C-Tools», originalmente parte del proyecto LM-Sensors (Linux Monitoring Sensors). Mientras que I2C-Tools se usa más en SBC que en sistemas de escritorio, las otras utilidades de LM-Sensors, que incluyen recursos para monitorizar y controlar el propio sistema, suelen utilizarse menos, en favor de herramientas específicas como vcgencmd en Raspbian o, en otras distribuciones para SBC, RPi-Monitor de Xavier Berger, por ejemplo.

Para instalar I2C-Tools en distribuciones Linux basadas en Debian como Raspbian, que se usa como ejemplo en este texto, se puede utilizar la orden:

  • sudo apt-get install i2c-tools

Además de instalar las utilidades i2cdetect, i2cget e i2cset, la orden anterior creará el grupo i2c y asignará acceso de lectura y escritura a los dispositivos I2C del sistema.

i2cdetect tiene varios usos, por un lado permite detectar los puertos I2C que hay disponibles utilizando la opción -l. También sirve para ver las características de un puerto con la opción -F y el nombre que identifica al puerto, que puede conocerse de la información anterior. Uno de los usos más frecuentes consiste escanear un puerto para averiguar (las direcciones de) los dispositivos conectados pasando a i2cdetect el nombre del puerto que se escanea.

Con i2cget se puede leer un registro de un puerto I2C pasándole como argumentos el nombre del puerto, la dirección del dispositivo en el bus I2C y la dirección del registro en el dispositivo.

De la misma forma, i2cset permite almacenar un valor en un registro. En este caso, a las opciones descritas arriba, hay que añadir el valor que se almacena en el registro del dispositivo I2C.

Todas estas utilidades funcionan en modo interactivo: avisan de las operaciones que van a realizarse, advierten de los riesgos y esperan confirmación para ejecutarlas. Para que funcionen sin esperar confirmación, en todas ellas se puede utilizar la opción -y que omite este modo interactivo.

Armbian ARM Linux SBC i2c-tools i2cdetect i2cget

En la captura de pantalla del ejemplo anterior se puede ver cómo se han escaneado los puertos I2C de una placa ODROID C1 y se han encontrado cuatro disponibles. Luego se han visualizado las características del primero y se han escaneado los dispositivos conectados para detectar uno en la dirección 0x27 (un PCF8574) y otro en la dirección 0x48 (un PCF8591). Para terminar, con la orden i2cget se ha leído el registro de la dirección 0x00 dispositivo de la dirección 0x48 del primer puerto I2C.

Buscar los drivers del núcleo disponibles en el sistema

Si el sistema y el hardware están bien documentados se sabrá por adelantado qué módulos para el núcleo es necesario cargar para usarlos al elaborar un programa que acceda al hardware. Por desgracia no suele ser así y muchas veces es necesario determinar «manualmente» los drivers para cargarlos.

Los drivers se almacenan en una carpeta llamada kernel dentro de una carpeta cuyo nombre corresponde a la versión del núcleo que está funcionando (puede haber varios instalados) y ésta a su vez se encuentra dentro de la ruta /lib/modules. Con la orden uname -r se puede conocer la versión y componer el nombre completo de la carpeta que contiene los drivers para «recorrerla» viendo su contenido con la orden ls de forma recursiva utilizando la opción -R. Seguramente esto mostrará un buen número de carpetas y documentos, por lo que conviene filtrarlos con grep usando una parte representativa del nombre del driver buscado. Por ejemplo, para buscar los drivers relacionados con las comunicaciones I2C podría usarse la orden:

  • ls /lib/modules/$(uname -r)/kernel -R | grep i2c

Ejecutando esta orden en una placa Orange Pi Zero corriendo Armbian, como se muestra en la captura de pantalla de abajo, es fácil darse cuenta de que el driver buscado es i2c-algo-bit, ya que el resto de alternativas parecen ser multiplexores.

Armbian ARM Linux SBC buscar drivers Orange Pi Zero

En el ejemplo de la captura de pantalla de abajo, en el que se muestra la salida de consola de una placa ODROID C1 ejecutando Armbian, también resulta sencillo determinar que el driver adecuado es aml_i2c, ya que el resto son drivers para el decodificador de audio y vídeo CX25840.

Armbian ARM Linux SBC buscar drivers Odroid C1

Si el nombre no es lo bastante representativo para como para elegir el driver I2C, o para descartar los que no lo son, se puede utilizar modinfo, que necesita privilegios administrativos, para obtener más información de cada módulo. Para obtener solo la descripción se puede utilizar la opción -d.

Armbian ARM Linux SBC modinfo driver módulo información descripción

Aunque lo más habitual será buscar información de unos pocos módulos, este proceso se puede extender a todos los que sea necesario (en principio los destinados a un tipo de hardware) utilizando la orden find y ejecutando con -exec la orden modinfo. Para identificar más fácilmente cada módulo, se puede incluir también una orden ls y un separador con printf "\n".

  • find /lib/modules/$(uname -r)/kernel -name "*i2c*.ko" \
    -exec ls {} \; \
    -exec sudo modinfo -d {} \; \
    -exec printf "\n" \;

Armbian ARM Linux SBC modinfo find driver módulo información descripción

Si la información que muestra modinfo tampoco es suficiente, no queda más remedio que iniciar un proceso de ensayo y error con todos los drivers encontrados, comprobando si al cargarlos, como se explica en el siguiente apartado, se tiene acceso, o no, al hardware que se pretende controlar, las comunicaciones I2C en el ejemplo.

Cargar los drivers

En condiciones normales, el núcleo cargará en el arranque los driver del hardware detectado. En una distribución Linux basada en Debian, como es el caso de Armbian, para cargar expresamente un driver puede incluirse su nombre en la lista de /etc/modules-load.d/modules.conf pero antes es conveniente asegurarse de que funciona correctamente.

En primer lugar, puede ser que la distribución Linux haya incluido intencionadamente el driver en la lista negra para que no se cargue. En algunas ocasiones puede ser porque considere que no se va a utilizar y en otros por problemas de funcionamiento conocidos.

No existe un archivo de configuración específico con la lista negra sino que en la carpeta /etc/modprobe.d se pueden almacenar documentos (cuyo nombre suele incluir la palabra blacklist) en los que el se incluye el nombre del módulo, cuya carga se quiere impedir, precedido de la palabra clave blacklist, como puede verse en la captura de pantalla de ejemplo de abajo.

Linux SBC driver lista negra black list módulo kernel núcleo

Como es lógico, este método para «desactivar» drivers no funciona con los que están incluidos (compilados) en el núcleo, solamente con los que se cargan por separado.

Para cargar los módulos al arranque basta con incluir su nombre en un documento dentro de la carpeta /etc/modules-load.d. El documento suele llamarse modules.conf y suele ser un enlace al documento /etc/modules para que sea compatible entre sistemas con SysV y sistemas con systemd.

Linux SBC driver etc modules-load.d modules.conf módulo kernel núcleo

Antes de optar por incluir un módulo en la lista de carga automática al inicio, ya sea en /etc/modules o en /etc/modules-load.d/modules.conf, es una buena idea comprobar que el driver funciona correctamente cargándolo con modprobe.

Aunque utilizando las opciones de información de la orden modprobe (como -v, -vv o -vvv) se puede tener una idea de si ha funcionado o se ha producido algún error, para obtener más datos se puede consultar el log del núcleo con dmesg y mostrar con lsmod los drivers cargados. En ambos casos, filtrar con grep, permitirá extraer solo la información relativa a cierto grupo de drivers.

En el ejemplo de la captura de pantalla de abajo se utiliza una placa ODROID C1 ejecutando una distribución Linux Armbian en la que se quiere utilizar un puerto SPI. En primer lugar se buscan los drivers usando el método explicado más arriba; una vez identificados se verifica que no se han cargado; posteriormente se cargan con modprobe (solo es necesario cargar expresamente spicc, que cargará spidev aunque no sería ningún problema cargar ambos) y por último se verifica, usando otra vez con lsmod, si ya se han cargado correctamente.

Linux SBC driver Armbian modprobe lsmod cargar kernel núcleo

El siguiente documento de configuración (/etc/modules) muestra un ejemplo de configuración de los módulos que podrían cargarse en un SBC Orange Pi Zero para acceder al hardware desde aplicaciones de monitorización o control electrónico de dispositivos.

Configurar los drivers

Como se ha explicado antes, con la orden modinfo se puede obtener información sobre un driver del núcleo. Para que se muestren solamente las opciones de configuración que acepta el módulo se utiliza -p (parámetros del módulo). En el ejemplo del apartado anterior podrían consultarse los parámetros con la orden sudo modinfo spidev -p que informaría de que existe el parámetro bufsiz para establecer el tamaño máximo del mensaje en las comunicaciones SPI.

Al cargar con modprobe un driver se pueden incluir las opciones de configuración con el formato opción=valor. Con la orden sudo modprobe spidev bufsiz=128 se podría cargar el módulo spidev del ejemplo anterior con la opción bufsiz que se ha encontrado con modinfo.

Igual que ocurre con la lista negra de drivers, tampoco existe un documento especifico para almacenar la configuración, en su lugar, se crean documentos dentro de la carpeta /etc/modprobe.d en los que se configura un driver escribiendo la palabra clave options seguida del nombre del módulo y las diferentes opciones en el formato opción=valor y separadas por espacios si se utilizan varias.

Linux SBC driver Armbian opciones módulo modprobe lsmod

Asignar permisos para acceder al hardware usando los drivers del núcleo

En principio, los dispositivos del sistema, tal como aparecen, por ejemplo, en /dev tienen como propietario y grupo al superusuario, root, y permisos de acceso (al menos, de escritura) solo para el propietario. Para que otros usuarios puedan acceder a un dispositivo, lo habitual es sustituir el grupo del dispositivo por uno específico, al que se le asignarán los permisos de acceso correspondientes, y hacer que los usuarios que deban tener acceso pertenezcan a ese mismo grupo.

Para que la asignación del grupo de los dispositivos se realice automáticamente, cada vez que el driver se cargue, dicha asignación se puede incluir en reglas de udev.

Las reglas de udev se definen en documentos en la carpeta /etc/udev/rules.d en los que se indica el evento a que atiende la regla, las características del dispositivo y las acciones que deben realizarse cuando se produce el evento.

Identificar los dispositivos a los que afectan las reglas udev

Para definir el evento se utilizan palabras clave que representan el tipo y el identificador al que se atiende. Por ejemplo, KERNEL=="ttyS0" se verifica cuando en el núcleo (kernel) se prepare el puerto serie ttyS0. Para hacer referencia a varios puertos serie en la misma regla, en general, identificadores que hagan referencia a varios valores (nombres), se pueden utilizar expresiones del tipo ttyS[01] para los puertos cero y uno (cualquier carácter entre los corchetes), ttyS* para cualquiera de cualquier longitud, ttyS? para cualquiera con un carácter de longitud, incluir %n para hacer referencia al número asignado por el kernel (núcleo) (como 1 en /dev/i2c-1) o %k para todo el nombre que le asigne (como i2c-1 en /dev/i2c-1).

Con SUBSYSTEM se puede definir una regla para un grupo de dispositivos de la misma rama, por ejemplo SUBSYSTEM=="usb" hace referencia a cualquier dispositivo USB.

DRIVER hace referencia al módulo (driver) que controla cierto dispositivo y tendrá efecto en su carga. Por ejemplo DRIVER=="spicc" atendería a la carga del driver para las comunicaciones SPI de los ejemplos del apartado anterior.

Con ATTRS se puede definir un dispositivo o un grupo de dispositivos en función de una serie de características (atributos) que los describen. Por ejemplo, ATTRS{idVendor}=="067B" hace referencia a los conocidos adaptadores USB UART de Prolific Technology

Para saber las características de un dispositivo y decidir qué reglas lo definen se puede utilizar la orden udevadm (con privilegios administrativos) con la opción info para que muestre los datos, --name (abreviada -n) para especificar el nombre del dispositivo tal como aparece en la carpeta /dev y --attribute-walk (abreviada -a) para recorrer toda la cadena de conexiones del dispositivo. Por ejemplo, para saber las características del puerto I2C /dev/i2c-0 se utilizaría la orden:

  • sudo udevadm info --attribute-walk --name=/dev/i2c-0

Linux SBC driver Armbian udev rules kernel attrs subsystem

En el ejemplo de la captura de pantalla anterior puede verse que para identificar los puertos I2C lo más conveniente es hacer referencia usando SUBSYSTEM.

Asignar permisos en las reglas udev

Con respecto a las acciones que se llevan a cabo cuando se gestiona el evento (como cargar un driver), las más interesantes para asignar permisos de acceso al hardware son MODE, con la que definir el nivel de privilegios y GROUP, para establecer el grupo al que pertenecen los dispositivos. Por ejemplo, para que los miembros del grupo i2c tengan acceso a los puertos I2C referidos en el ejemplo anterior, podría utilizarse la regla SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660". Esta regla respeta al propietario original del dispositivo (root) y mantiene sus permisos de acceso de lectura y escritura en MODE (el primer 6) además de añadirlos al grupo (el segundo 6) sin otorgar ningún permiso al resto de usuarios del sistema (el último cero).

Aunque para la asignación de permisos a dispositivos no es habitual su uso, con OWNER también puede establecerse un propietario para el dispositivo diferente del inicial (root)

Operadores en las reglas udev

Como puede verse, los diferentes componentes de la regla se separan por comas y se distingue entre asignaciones = (un signo igual) y comparaciones positivas con == (dos signos igual) o negativas con !=. De la misma forma, cuando una asignación añade un elemento sin sustituirlo por los que pudieran existir anteriormente, se utiliza += en lugar del signo igual, al contrario, el código := permite asignar un valor impidiendo más cambios.

También es posible asignar un nombre del dispositivo, usando NAME, o crear un enlace al dispositivo con SYMLINK. Esta segunda opción es más recomendable ya que respeta el nombre original, que puede ser utilizado por aplicaciones que esperen algo estándar, a la vez que permite hacer referencia también con nuevos nombres arbitrarios, más personalizados. Por ejemplo, para crear un enlace /dev/uno con permisos de lectura y escritura para el grupo arduino cuando se conectara un dispositivo USB del fabricante 2341 (Arduino) del tipo 0043 (Arduino Uno), podría añadirse la regla

  • SUBSYSTEM=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0043",
    SYMLINK+="uno", GROUP="arduino", MODE="0660"

Por cierto, como se explica en el artículo sobre la asignación de nombres fijos al puerto serie USB de Arduino, lo recomendable para estos casos es añadir también el número de serie de cada dispositivo con ATTRS{serial} y/o usar como referencia una identificación (el enlace simbólico) única.

Ejecutar programas al asignar dispositivos

Las reglas de udev permiten obtener valores como el resultado de la ejecución de un programa. El código %c se sustituirá por el valor devuelto por el programa o, si se trata de varios, puede indicarse entre llaves el número del valor (número de la palabra en el resultado) empezando desde la izquierda o entre llaves y con un signo más, para empezar a contar desde la derecha.

Para obtener el resultado de la ejecución de un programa se utiliza PROGRAM, la ruta del programa y los parámetros, que pueden usar modificadores (excepto el propio %c, ya que no se conoce al inicio). Por ejemplo, la regla SUBSYSTEM=="i2c", PROGRAM="cat /etc/hostname", SYMLINK+="%k-%c" crearía un enlace simbólico a los puertos I2C utilizando el nombre que le asigna el sistema y le añadiría un sufijo que correspondiera con el nombre del sistema (host).

Si el resultado de la ejecución de un programa no es lo importante sino la propia ejecución, puede utilizarse RUN en lugar de PROGRAM con el mismo formato pero sin obtener un valor para %c.

Probar el funcionamiento de las reglas

Una vez definidas las reglas en el documento correspondiente de la carpeta /etc/udev/rules.d se pueden probar, antes de reiniciar el sistema, utilizando udevadm test indicando el dispositivo afectado. Por ejemplo, sudo udevadm test /dev/spidev0.0 permitiría comprobar las reglas que afectan el primer puerto SPI del sistema.

Activar las nuevas reglas sin reiniciar el sistema

Una vez que se ha establecido que las reglas en /etc/udev/rules.d son correctas, se pueden utilizar sin necesidad de reiniciar el sistema, aunque la próxima vez que se reinicie funcionarán automáticamente.

La forma más drástica de recargar las reglas es reiniciar udev con sudo /etc/init.d/udev restart con lo que, lógicamente, se recargarán también todas las reglas. Para recargar todas las reglas sin necesidad de reiniciar udev se puede utilizar la orden sudo udevadm control --reload-rules.

Si solo hace falta cargar las reglas que corresponden con cierto evento, se puede forzar con sudo udevadm trigger y la definición del dispositivo. Para especificar el dispositivo se utiliza la opción --type (abreviada -t) indicando devices (un único dispositivo) o subsystems (toda la «familia» de dispositivos) y una opción que indique el valor:

  • --subsystem-match los dispositivos pertenecen al subsistema indicado
  • --subsystem-nomatch los dispositivos no pertenecen al subsistema indicado
  • --attr-match atributos de los dispositivos
  • --attr-nomatch atributos no presentes en los dispositivos
  • --property-match los dispositivos tienen la propiedad indicada
  • --tag-match los dispositivos tienen la etiqueta endicada
  • --sysname-match dispositivos con el nombre de sistema indicado
  • --parent-match los dispositivos que tengan el padre indicado

Por ejemplo, para hacer que se carguen las reglas relativas a las comunicaciones SPI de las que se ha hablado antes se podría utilizar la orden

Reglas udev habituales para acceder al hardware en un SBC

Cuando se utiliza un SBC para control de dispositivos o para monitorización de sensores se necesita disponer de acceso al hardware. Para habilitar este acceso, como se ha explicado, se asignan los permisos correspondientes a los usuarios operadores de cada recurso, normalmente organizándolos por grupos. Las reglas de udev pueden resolver el acceso al hardware asignando a los los dispositivos los grupos y el nivel de permisos necesario.

En el caso de los dispositivos más habituales, como audio o vídeo, la infraestructura de grupos y de asignación de dispositivos suele estar resuelta y lo recomendable será que el usuario que se autoriza a acceder a estos dispositivos se añada al grupo que permite su uso. Para hacerlo, puede utilizarse, por ejemplo, con la orden usermod, con el formato sudo usermod -a -G grupo usuario. Para el hardware menos común puede ser necesario crear los grupos además de asignarlos a los dispostivos con udev. Aunque no hay un estándar al respecto, para acceder al hardware suelen utilizarse los grupos:

  • audio equipos de entrada y salida de sonido
  • dialout dispositivos de comunicaciones serie UART y las equiparables, como los adaptadores USB
  • gpio conexiones GPIO
  • i2c dispositivos para comunicaciones I2C
  • leds acceso a (algunos de) los indicadores LED del SBC
  • spi comunicaciones SPI
  • tty algunos dispositivos UART por su tipo de conexión o uso (como consolas de salida para depuración)
  • video dispositivos de entrada (cámara), salida (monitor) y control (mando a distancia) de vídeo

Linux Armbian ARM Raspberry permiso dev dispositivos driver hardware grupo usuario

El caso de las conexiones GPIO es un poco especial ya que cada entrada-salida se crea bajo demanda, no cuando se carga en el núcleo el driver para su gestión (gpio-sunxi, por ejemplo) así que no bastará con una regla que establezca el grupo y los permisos sino que será necesario ejecutar un programa para cambiarlo en la carpeta asociada a cada entrada-salida.

Normalmente, las carpetas del sistema utilizadas para acceder a los GPIO están en /sys/class/gpio y en /sys/devices/virtual/gpio, pero podrían variar entre sistemas y versiones. Por ejemplo, el módulo gpio-sunxi para los Allwinner utiliza carpetas en /sys/devices/platform/sunxi-pinctrl. Además de consultar la documentación correspondiente, para determinar las carpetas necesarias se pueden ir satisfaciendo los permisos que generen los intentos de usar de un recurso, comparando los de los usuarios del grupo gpio con los del superusuario, y añadiendo los datos de carpetas que resulten afectadas al documento hardware.rules.

Con los criterios anteriores, se podría grabar en la carpeta /etc/udev/rules.d un documento, por ejemplo, hardware.rules, con las siguientes reglas para acceder al hardware:

Aunque esta configuración funcionará en muchos sistemas, será necesario consultar la documentación ya que, dependiendo de las especificidades de cada SBC, a las anteriores reglas se pueden añadir otras. Al contrario, algunos drivers no necesitan reglas que establezcan los permisos, ya que pueden otorgarlos con seguridad; por ejemplo, w1-therm controla las comunicaciones 1-Wire para medir la temperatura y permite la lectura a cualquier usuario del sistema. De la misma forma, algunas no servirán en determinadas placas; por ejemplo, el subsistema bcm2835-gpiomem no está disponible en un SBC Orange Pi Zero, citada en algunos de los ejemplos anteriores.

En el caso de Raspbian, aunque inicialmente está inhabilitado el acceso a la mayoría del hadware, con las utilidades raspi-config o rc_gui se automatiza todo el proceso explicado en este apartado para activar su uso.

Instalar Linux SBC Raspbian rc_gui hardware activar acceso habilitar drivers

Establecer una dirección IP fija

Aunque lo más recomendable suele ser centralizar la asignación de las direcciones IP de los diferentes dispositivos de una red utilizando un servidor DHCP o incluso en vistas locales de un DNS, en determinadas circunstancias, como puede ser la ausencia de esta infraestructura en una pequeña instalación, es necesario configurar en el sistema una dirección IP fija.

En un sistema basado en Debian como Armbian, el usado aquí de referencia, la configuración de la dirección IP se almacena en /etc/network/interfaces y por defecto especificará que se asigne de forma dinámica la dirección IP más o menos así:

La configuración que establece una dirección IP fija sustituye la especificación dhcp del final de la línea resaltada en el código de arriba (que espera la dirección IP de un servidor DHCP) por static para indicar que se usa una dirección IP estática.

En el ejemplo anterior, se supone que el SBC está en la red 192.168.1.0 (de clase C), que en la dirección 192.168.1.1 hay un router que conecta a otras redes (Internet, por ejemplo), que los servidores de nombre de dominio son los que recomienda OpenNIC en función de mi ubicación y que la dirección IP fija elegida para el SBC es 192.168.1.123. Al incluir auto eth0 en la configuración, el interfaz se iniciará automáticamente en el arranque.

Para utilizar inmediatamente los cambios de configuración, sin necesidad de reiniciar el sistema, se puede reiniciar el servicio de red utilizando las órdenes:

    • sudo ip addr flush dev eth0 para eliminar la anterior configuración
    • sudo service networking restart para reiniciar el servicio con la nueva configuración

Opcionalmente, también es posible forzar la carga de la configuración desactivando el interfaz de red con ifdown y volviendo a activarlo inmediatamente después con ifup. Ambas órdenes pueden lanzarse en la misma línea separándolas por && como en el siguiente ejemplo:

  • sudo ifdown eth0 && sudo ifup eth0

El documento /etc/network/interfaces puede incluir información de varios interfaces de red (en realidad, ya se están definiendo dos: el loopback lo y eth0) lo cual incluye alias de dispositivos reales para crear otros virtuales y asignar varias direcciones de red al mismo dispositivo físico. Por ejemplo, añadiendo a la configuración el código de abajo, se crea un alias de eth0 en la red 192.168.2.0

Si en el sistema dispone de varios dispositivos de red, sean físicos o virtuales, solo se incluye en la configuración la pasarela (con gateway) y los DNS (con dns-nameservers) en uno de ellos.

En el caso de que la conexión sea wifi, a los datos de los ejemplos anteriores se le añade, al menos:

  • wpa-ssid para indicar el SSID al que se conecta
  • wpa-psk sirve para indicar la clave al punto de acceso wifi

Para obtener el código de la clave que se escribe en la entrada wpa-psk de la configuración se puede utilizar la orden wpa_passphrase a la que se le pasa como argumentos ① el SSID y ② la clave como en el siguiente ejemplo:

  • wpa_passphrase polaridad.es "Hba2h662JaKc2vH8a3dOhs"

Añadiendo allow-hotplug eth0 o allow-hotplug wlan0 a las configuraciones propuestas antes, sería posible conectar a la red después de haberla configurado en el arranque sin necesidad de intervenir «manualmente» en el sistema.

Para establecer una dirección MAC diferente a la física se puede utilizar hwaddress en el formato que aparece comentado en los ejemplos. La dirección se sustituye por el valor cero que se usa como muestra. Es necesario verificar que no entra en conflicto con las que se establezca al configurar el driver de red; por ejemplo, el módulo xradio_wlan del SBC Orange Pi Zero utiliza una específica en su configuración de xradio_wlan.conf en /etc/modprobe.d.

En la distribución Debian, y en algunas de las que derivan de ella, puede darse un conflicto entre los DNS que se especifican en el documento /etc/network/interfaces y los que se almacenan en el documento /etc/resolv.conf. De entre las formas posibles para eludir este problema, si se produce, la que he encontrado más sencilla consiste en eliminar el segundo documento, instalar resolvconf, y dejar que sea esta aplicación la que lo gestione, para lo que creará un enlace simbólico y tomará correctamente los datos de /etc/network/interfaces

  • sudo rm /etc/resolv.conf eliminar el documento con los DNS actuales
  • sudo apt-get update actualizar la información de los repositorios
  • sudo apt-get install resolvconf instalar resolvconf
  • sudo dpkg-reconfigure resolvconf reconfigurar los DNS

Igual que ocurre en otros aspectos, como el idioma, del que ya se ha hablado, diferentes distribuciones incluyen recursos propios para configurar las conexiones de red, incluyendo el establecimiento de una dirección IP estática o el SSID y la clave wifi. Por ejemplo, la distribución DietPi, también basada en Debian, como Armbian, utiliza el documento dietpi.txt ubicado en la partición dietpi.txt donde almacena los datos de la configuración inicial (para el primer arranque) además de la herramienta dietpi-config, que ya se ha mencionado, para configurar de manera interactiva, entre otros aspectos, la conexión de red.

Linux DietPi Debian configuración red local network SBC

Linux DietPi Debian configurar red local network SBC

Linux DietPi Debian configurar red local network IP fija SBC

Establecer el nombre del sistema

Cuando se administran varios sistemas, especialmente en remoto, puede ser útil identificar cada nodo (cada SBC) por un nombre de host. Como ocurre con otros parámetros, en una instalación convencional, el nombre del host suele establece en la fase inicial, frecuentemente con un diálogo; pero como las instalaciones de los SBC, como es el caso de Armbian, referencia de esta guía, se basan en una imagen preinstalada, el nombre ya está establecido, el del modelo del SBC, y debe cambiarse después.

En las instalaciones de distribuciones Linux basadas en Debian, como es el caso de Armbian, el nombre del host se almacena en varios archivos, para cambiarlo bastará con sustituir en ellos, editándolos con privilegios administrativos, el nombre original por el nuevo.

  • /etc/hostname
  • /etc/hosts
  • /etc/ssh/ssh_host_dsa_key.pub
  • /etc/ssh/ssh_host_rsa_key.pub

Aunque bastaría, para hacerlo manualmente, con usar un editor como nano, por ejemplo con la orden sudo nano /etc/hostname; se puede automatizar cada cambio usando sed. Suponiendo que el nombre original del SBC fuera orangepizero y el nuevo dospi, podría hacerse con la orden:

  • sudo sed -i "s/orangepizero/dospi/" /etc/hostname

Además de los anteriores archivos de configuración, algunas distribuciones y aplicaciones pueden añadir otros que sean necesarios para su funcionamiento. Un caso habitual son las aplicaciones de correo; por ejemplo SSMTP establece el nombre del host en /etc/ssmtp/ssmtp.conf. Armbian utiliza el fichero de configuración /etc/armbian-release en el que las variables BOARD y BOARD_NAME almacenan información relacionada con el nombre del sistema; cambiando la segunda, por ejemplo se puede obtener un MOTD personalizado usando, BOARD_NAME (el nombre de la placa).

Linux SBC Armbian host nombre Raspberry

Víctor Ventura

Desarrollando aplicaciones para la web conocí el potencial de internet de las cosas, encontré la excusa perfecta para satisfacer la inquietud de aprender electrónica que había tenido desde siempre. Ahora puedo darme el gusto de programar las cosas que yo mismo diseño y fabrico.

Más entradas - Página web

Sígueme:
TwitterLinkedIn

Seguir Víctor Ventura:

Programador multimedia y web + IoT. Mejor con software libre.

Desarrollando aplicaciones para la web conocí el potencial de internet de las cosas, encontré la excusa perfecta para satisfacer la inquietud de aprender electrónica que había tenido desde siempre. Ahora puedo darme el gusto de programar las cosas que yo mismo diseño y fabrico.

5 Respuestas

  1. paula

    Hola!
    Estoy empezando a programar con raspberry
    Que linux me recomiendas?

    • Víctor Ventura

      Hola, Paula.

      Si estás empezando y si el SBC por el que has optado es Raspberry Pi, te recomiendo Raspbian.

      Esta guía habla un poco de cómo instalarlo pero, como quiere ser más bien neutra, se dirige en general a las distros basadas en Debian y toma como referencia Armbian, que es la que funciona en más tipos de SBC y la que menos se aleja de un Debian «normal». De todas formas, no creo que tengas problema en configurar Raspbian tomando este texto como ejemplo.

      Como empiezas a programar, es muy posible que más adelante, con el criterio que desarrolles por tu propia experiencia, decidas usar otra distribución Linux (a no ser que el proyecto te imponga otro sistema, claro). Si me hubieras preguntado por la que mejor funciona con pocos recursos, o mejor optimiza los disponibles, te habría recomendado DietPi o si pensaras hacer aplicaciones para placas muy diferentes (por ser necesarias para proyectos muy diferentes) te habría recomendado Armbian, que funciona en muchos tipos de SBC.

      Como verás (ya lo he confesado más de una vez) soy un chico-Debian, pero si tienes preferencia por otro tipo de distribución GNU/Linux no vas a tener problema en encontrar una versión para la arquitectura ARM (tendrás que trabajar un poco para configurarla) o incluso pre-configurada para un SBC concreto.

      Te lo vas a pasar muy bien programando con Raspberry Pi ¡No se te olvide volver por polaridad.es y contarnos qué tal te va!

      • paula

        No he comprado ninguna raspberry por ahora estoy usando la que nos dan en el curso
        Cual me recomiendas?
        Muchas gracias.

        • Víctor Ventura

          Hola, Paula.

          No sé si te refieres a un modelo de Raspberry Pi o es que estás hablando del concepto de SBC usando el nombre de la marca (como se suele hacer con otras, como kleenex para decir pañuelo de papel, por ejemplo).

          Si me preguntas por un modelo de Raspberry Pi, te recomendaría la Raspberry Pi 3 B a no ser que necesites usar algo muy específico en el curso que implique otro modelo (esto es realmente raro que ocurra). Al contrario, si es posible para el curso, porque no necesitas, por ejemplo, Bluetooth, y encuentras una oferta espectacular (pero realmente espectacular, si no, no) para empezar te podría servir un modelo inferior, entendiendo que más adelante comprarás la que se adapte mejor a un uso concreto (por los recursos que necesite, como memoria, velocidad de la CPU, prestaciones de la salida de vídeo, cámara, almacenamiento interno, cantidad de GPIO…)

          Y si me preguntas qué SBC comprar, también te recomendaría la Raspberry Pi 3 B, ① porque ahora que empiezas querrás darle un uso genérico (tampoco me dices si vas a programar hardware a más bajo nivel, gráficos o hasta si se trata de un curso de introducción a la programación y se usa Raspberry Pi). ② Porque seguro que encuentras un distribuidor en tu ciudad (me encanta el comercio de cercanía) que además de ahorrarte los gastos de envío te atenderá la garantía y seguramente te pueda vender también accesorios y aconsejarte sobre ellos. ③ Porque es un SBC con muy buenas prestaciones, muy equilibrado y a un precio bastante razonable. ④ Porque tendrás para elegir muchísimas distribuciones GNU/Linux (en los otros SBC las alternativas son mucho más limitadas) que te permitirán aprender también un poco sobre sistemas, un conocimiento complementario muy importante en programación. Y ⑤ porque si decides que no vas a programar más (aunque esto es imposible que suceda) tendrás un equipo que te servirá para otros usos, como un centro multimedia para ver TV y escuchar música, por poner un ejemplo.

          Cuando termines el curso y acometas proyectos basados en SBC elegirás el que mejor se adapte a las necesidades concretas de cada ocasión. Los criterios principales que yo suelo considerar, además del precio, que debería corresponder con las prestaciones, suelen ser:

          • Optar por usar hardware libre, en cuyo caso tienes las BeagleBone Black o mis favoritas, las OLinuXino A20, lástima que los portes las encarecen un poco, pero son una opción, además de libre, muy profesional. Otra cosa que me gusta de ellas es que puedes instalar sin mucho problema una distro genérica para ARM, como Debian ARM.
          • La cantidad de «recursos de cómputo» disponibles (CPU y RAM, sobre todo), para lo que las placas ODROID están muy bien.
          • El tamaño, diminuto en el caso de las NanoPi, aunque las Orange Pi Zero, también pequeñísimas, son bastante más baratas.

          Por supuesto, además de esas líneas generales, cada proyecto puede necesitar especificaciones propias (conexión wifi, varios puertos Ethernet, conectores serial ATA…) que condicionarían la elección del SBC.

          Saludos y gracias por visitar en polaridad.es

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *