Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
bbx [2023/05/02 00:34]
cnigri Fix - Actualizacion de dependencias
bbx [2025/08/19 20:21] (actual)
gzugman [FAQ]
Línea 5: Línea 5:
  
 La idea es que el alumno pueda empaparse con el procedimiento básico para la generación de imágenes //custom// de Linux para sistemas embebidos. Cada caso, será particular al embebido en cuestión, pero típicamente consta de lo mismos **macro-pasos** enumerados.  La idea es que el alumno pueda empaparse con el procedimiento básico para la generación de imágenes //custom// de Linux para sistemas embebidos. Cada caso, será particular al embebido en cuestión, pero típicamente consta de lo mismos **macro-pasos** enumerados. 
- 
-====== Mapa de memoria ====== 
-==== Componentes del sistema ==== 
-* **MLO :** 
-Minimal LOader es un bootloader básico utilizado por TI (Texas Instruments) para las familias OMAP y derivados. Su principal misión es inicializar el hardware, unidades del SOC y  
-periféricos de la placa, mínimo para la operación. Por lo general en este software se configura el controlador de RAM externa, terminal de depuración, relojes del sistema y unidades de control de alimentación 
- 
-* **[[http://www.denx.de/wiki/U-Boot|U-Boot]] :** 
-Es un bootloader de propósito general destinado principalmente a embebidos. Entre las funciones implementadas se destacan la inicialización de los pines no críticos para la primera etapa de arranque, hardware secundario (USB, display), la copia de la imagen del kernel, rootfs y DTB de la memoria persistente a RAM y su posterior expansión (deflat) 
-  
-* **[[http://wiki.electron.frba.utn.edu.ar/doku.php?id=td3:device_tree_presentation|DTB]] :** 
-Es el binario (Device Tree Blob) asociado al DTS (Device Tree Source) que describe el hardware del sistema 
- 
-* **zImage :** 
-Imagen comprimida del kernel de Linux 
- 
-* **rootfs :** 
-Imagen del sistema de archivos del sistema. En el mismo se localizan todos los binarios necesarios para operación a nivel usuario (root/user) del sistema, así 
-como tambien aquellos utilizados por el propio OS para su correcta ejecución. 
- 
- 
-==== SD ==== 
- 
-<code asm> 
-+--------------------------------------+ 
-|                                      | 
-|                  MLO                 | 
-|                                      | 
-+--------------------------------------+ 
-|                                      | 
-|                 U-Boot               | 
-|                                      | 
-+--------------------------------------+ 
-|                                      | 
-|                  DTB                 | 
-|                                      | 
-+--------------------------------------+ 
-|                                      | 
-|                zImage                | 
-|                                      | 
-+--------------------------------------+ 
-|                                      | 
-|              Linux rootfs            | 
-|                                      | 
-+--------------------------------------+  
-</code> 
- 
-==== RAM ==== 
-{{:td3:under_construction.jpg|105x200}} 
  
 ====== Procedimiento ====== ====== Procedimiento ======
Línea 126: Línea 77:
 user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo apt install flex user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo apt install flex
 user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo apt install build-essential user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo apt install build-essential
-user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo apt-get install libncurses5 +user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo apt install libncurses5 
-user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo apt install install libpython2.7+user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo apt install libpython2.7
 </code> </code>
 Si se desea trabajar con el entorno visual [[https://www.gnu.org/software/ddd/ | DDD ]] y disponer del [[https://www.gnu.org/software/gdb/ | GDB]] para depurar múltiples arquitecturas (el conjunto de herramientas //crosstoolchain// ya dispone del //gdb// para la arquitectura ARM) Si se desea trabajar con el entorno visual [[https://www.gnu.org/software/ddd/ | DDD ]] y disponer del [[https://www.gnu.org/software/gdb/ | GDB]] para depurar múltiples arquitecturas (el conjunto de herramientas //crosstoolchain// ya dispone del //gdb// para la arquitectura ARM)
Línea 341: Línea 292:
  
 ==== Preparación de la microSD ==== ==== Preparación de la microSD ====
-Verificar que la tarjeta microSD **no** se encuentre dentro de la lista de [[http://http://wiki.electron.frba.utn.edu.ar/doku.php?id=td3:bbx&do=edit&rev=#faq|incompatibles]])+Verificar que la tarjeta microSD **no** se encuentre dentro de la lista de incompatibles en la sección FAQ (al final de esta página)
  
 **NOTA:** tener cuidado con los comandos a continuación, sobre todo con el comando **dd**, ya que si ponemos mal el //device// (el "disco" en este caso"), podemos llegar a perder la PC Host. Para más información, ingresar a la pagina [[http://man7.org/linux/man-pages/man1/dd.1.html|man linux dd]]. **NOTA:** tener cuidado con los comandos a continuación, sobre todo con el comando **dd**, ya que si ponemos mal el //device// (el "disco" en este caso"), podemos llegar a perder la PC Host. Para más información, ingresar a la pagina [[http://man7.org/linux/man-pages/man1/dd.1.html|man linux dd]].
Línea 360: Línea 311:
  
 <code bash>user@machine:~/ubicacion_carpeta/Imagen_BBB$ export DISK=/dev/mmcblk0</code> <code bash>user@machine:~/ubicacion_carpeta/Imagen_BBB$ export DISK=/dev/mmcblk0</code>
 +
 +Para el caso que nuestro dispositivo sea **/dev/sd<letra><numero>**
 +
 +<code bash>user@machine:~/ubicacion_carpeta/Imagen_BBB$ export DISK=/dev/sd<letra></code>
  
 Con el comando **lsblk** podrán obtener un listado de las unidades de almacenamiento y sus particiones. Con el comando **lsblk** podrán obtener un listado de las unidades de almacenamiento y sus particiones.
Línea 434: Línea 389:
 === Root File System === === Root File System ===
  
-<code bash>user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/  +<code bash>user@machine:~/ubicacion_carpeta/Imagen_BBB/ubuntu-XXXX-XXXX-XXX-XXX$ sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/  
-user@machine:~/ubicacion_carpeta/Imagen_BBB$ sync +user@machine:~/ubicacion_carpeta/Imagen_BBB/ubuntu-XXXX-XXXX-XXX-XXX$ sync 
-user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo chown root:root /media/rootfs/ +user@machine:~/ubicacion_carpeta/Imagen_BBB/ubuntu-XXXX-XXXX-XXX-XXX$ sudo chown root:root /media/rootfs/ 
-user@machine:~/ubicacion_carpeta/Imagen_BBB$ sudo chmod 755 /media/rootfs/</code>+user@machine:~/ubicacion_carpeta/Imagen_BBB/ubuntu-XXXX-XXXX-XXX-XXX$ sudo chmod 755 /media/rootfs/</code>
  
 Crear el archivo uEnv.txt en el directorio local de trabajo, con las siguientes lineas: Crear el archivo uEnv.txt en el directorio local de trabajo, con las siguientes lineas:
Línea 575: Línea 530:
 </code>  </code> 
  
-===== Internet en Beaglebone a través de la PC =====+========== Internet en Beaglebone a través de la PC ==========
  
-Hay dos formas para lograrlo. 
  
-==== Primer método ==== 
  
-=== Pasos a realizar en la BBB === 
  
-Ejecutar los siguientes comandos en la consola:+Hay dos formas para lograrlo.
  
-  - sudo ifconfig usb0 192.168.7.2 +==== Primer método ====
-  - sudo route add default gw 192.168.7.1+
  
 === Pasos a realizar en la PC === === Pasos a realizar en la PC ===
  
   - Correr ifconfig y anotar el nombre de la interfaz que tiene la dirección 192.168.7.1 (que es el que se conecta a la Beaglebone) y luego anotar el nombre de la interfaz que provee Internet.   - Correr ifconfig y anotar el nombre de la interfaz que tiene la dirección 192.168.7.1 (que es el que se conecta a la Beaglebone) y luego anotar el nombre de la interfaz que provee Internet.
 +Es importante no poner comillas en los nombres de las interfaces que se colocan en los comandos que se muestran arriba. Estos archivos se pueden poner un archivo batch ejecutable (de texto) para no tipearlos cada vez que arranque la PC o la Beaglebone.
 +
 +Ejecutar los siguientes comandos por consola con los nombres de las interfaces correctas.
   - sudo su   - sudo su
   - ifconfig **nombre_interfaz_usb_de_BBB** 192.168.7.1   - ifconfig **nombre_interfaz_usb_de_BBB** 192.168.7.1
Línea 597: Línea 551:
   - echo 1 > /proc/sys/net/ipv4/ip_forward   - echo 1 > /proc/sys/net/ipv4/ip_forward
  
-Es importante no poner comillas en los nombres de las interfaces que se colocan en los comandos que se muestran arriba. Estos archivos se pueden poner un archivo batch ejecutable (de texto) para no tipearlos cada vez que arranque la PC o la Beaglebone.+Si reiniciamos la PC esta configuración se perderá, si se desea que permanezca hay que incluir pasos 2 a 4 en un archivo ejecutable de shell en incluirlo en el .bashrc
  
-=== Verificar que haya internet === +=== Pasos a realizar en la BBB ===
-    ping www.example.com +
-En caso que no consigamos es probable que no este configurado ningún servidor DNS. +
-Para ello abrir el archivo "/etc/resolv.conf" +
-    sudo nano /etc/resolv.conf+
  
-Si el archivo no tiene ningún nameserver, agregar: +Ejecutar los siguientes comandos en la consola:
-    nameserver 8.8.8.8+
  
-Luego reiniciar el servicio con: +1) Crear un archivo config_gw.sh con el siguiente contenido:
-    sudo systemctl restart systemd-resolved.service+
  
-Verificar nuevamente si se puede resolver el dominio+   #!/bin/bash 
 +   sudo ifconfig usb0 192.168.7.2 
 +   sudo route add default gw 192.168.7.1 
 + 
 +2) Proveer atributos de ejecucion: 
 + 
 +    chmod +x config_gw.sh 
 + 
 +3) Agregar el path completo del archivo que creamos al final del file ~/.bashrc: 
 +    /home/debian/config_gw.sh 
 + 
 +4) Configurar DNS utilizando un archivo de configuración: 
 +  
 +4.a) Crear directorio donde guardaremos la configuracion:  
 + 
 +    sudo mkdir -p /etc/systemd/resolved.conf.d/ 
 +  
 +4.b) Creamos un nuevo archivo, como ejemplo:  
 + 
 +    /etc/systemd/resolved.conf.d/dns_servers.conf 
 +  
 +4.c) Lo abrimos 
 +    sudo nano /etc/systemd/resolved.conf.d/dns_servers.conf 
 +     
 +4.d) y agregamos las configuraciones de DNS dentro de la seccion [Resolve]: 
 + 
 +    [Resolve] 
 +    DNS=8.8.8.8 8.8.4.4 
 +    Domains=example.com local 
 + 
 +5) Reiniciar systemd-resolved: 
 +Luego de aplicar los cambios, reiniciar el servicio systemd-resolved para que los cambios tomen efecto: 
 + 
 +    sudo systemctl restart systemd-resolved 
 + 
 +6) Reiniciar BBB 
 + 
 +    sudo reboot 
 + 
 +7)  Verificar configuracion de DNS: 
 + 
 +    resolvectl status
     ping www.example.com     ping www.example.com
 +
 +Si todo resulto exitoso, la BBB podrá resolver el dominio www.example.com
 +
 +
 ==== Segundo método (NO seguro para producto) ==== ==== Segundo método (NO seguro para producto) ====
  
Línea 656: Línea 649:
  --- //[[cnigri@frba.utn.edu.ar|ChristiaN]]//\\  --- //[[cnigri@frba.utn.edu.ar|ChristiaN]]//\\
  --- //[[luciano.ferreyro@iteda.cnea.gov.ar|LFerreyro]]//\\   --- //[[luciano.ferreyro@iteda.cnea.gov.ar|LFerreyro]]//\\ 
-//2023/03/25 18:00//+ --- //[[gzugman@frba.utn.edu.ar|GZugman]]//\\ 
 +2025/08/19 20:17//