Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
bbx [2022/09/20 11:29] gzugman [Primer método] |
bbx [2023/10/19 21:57] (actual) cnigri Aclaracion para caso SD |
||
---|---|---|---|
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, | ||
- | |||
- | * **[[http:// | ||
- | 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:// | ||
- | 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 | | ||
- | | | | ||
- | +--------------------------------------+ | ||
- | | | | ||
- | | | ||
- | | | | ||
- | +--------------------------------------+ | ||
- | | | | ||
- | | DTB | | ||
- | | | | ||
- | +--------------------------------------+ | ||
- | | | | ||
- | | zImage | ||
- | | | | ||
- | +--------------------------------------+ | ||
- | | | | ||
- | | Linux rootfs | ||
- | | | | ||
- | +--------------------------------------+ | ||
- | </ | ||
- | |||
- | ==== RAM ==== | ||
- | {{: | ||
====== Procedimiento ====== | ====== Procedimiento ====== | ||
Línea 80: | Línea 31: | ||
<code bash> | <code bash> | ||
christian@desarrollo:/ | christian@desarrollo:/ | ||
- | </ | + | </ |
+ | * [[https:// | ||
===== Instalacion del cross compiler ===== | ===== Instalacion del cross compiler ===== | ||
- | Como // | + | Como // |
<code bash> | <code bash> | ||
Línea 118: | Línea 70: | ||
</ | </ | ||
- | ===== Instalación | + | ===== Instalación de dependencias |
Dependencias antes de empezar: | Dependencias antes de empezar: | ||
<code bash> | <code bash> | ||
+ | user@machine: | ||
user@machine: | user@machine: | ||
user@machine: | user@machine: | ||
+ | user@machine: | ||
+ | user@machine: | ||
+ | user@machine: | ||
+ | </ | ||
+ | Si se desea trabajar con el entorno visual [[https:// | ||
+ | <code bash> | ||
+ | user@machine: | ||
+ | user@machine: | ||
+ | </ | ||
+ | ===== Instalación de emulador ===== | ||
+ | Instalar el emulador (responder Y a todo lo requerido) | ||
+ | <code bash> | ||
+ | user@machine: | ||
</ | </ | ||
+ | Verificar instalación. La versión puede diferir según la distribución que se esté empleando | ||
+ | <code bash> | ||
+ | user@machine: | ||
+ | QEMU emulator version 2.5.0 (Debian 1: | ||
+ | </ | ||
+ | Verificar ejecución. Las sintaxis de los argumentos puede diferir segun la versión, por lo cual se recomienda verificar la misma mediante la opción '' | ||
+ | <code bash> | ||
+ | user@machine: | ||
+ | pulseaudio: set_sink_input_volume() failed | ||
+ | pulseaudio: Reason: Invalid argument | ||
+ | pulseaudio: set_sink_input_mute() failed | ||
+ | pulseaudio: Reason: Invalid argument | ||
+ | qemu: fatal: Trying to execute code outside RAM or ROM at 0x02000000 | ||
+ | |||
+ | R00=00000000 R01=00000000 R02=00000000 R03=00000000 | ||
+ | R04=00000000 R05=00000000 R06=00000000 R07=00000000 | ||
+ | R08=00000000 R09=00000000 R10=00000000 R11=00000000 | ||
+ | R12=00000000 R13=00000000 R14=00000000 R15=02000000 | ||
+ | PSR=400001d3 -Z-- A svc32 | ||
+ | s00=00000000 s01=00000000 d00=0000000000000000 | ||
+ | s02=00000000 s03=00000000 d01=0000000000000000 | ||
+ | s04=00000000 s05=00000000 d02=0000000000000000 | ||
+ | s06=00000000 s07=00000000 d03=0000000000000000 | ||
+ | s08=00000000 s09=00000000 d04=0000000000000000 | ||
+ | s10=00000000 s11=00000000 d05=0000000000000000 | ||
+ | s12=00000000 s13=00000000 d06=0000000000000000 | ||
+ | s14=00000000 s15=00000000 d07=0000000000000000 | ||
+ | s16=00000000 s17=00000000 d08=0000000000000000 | ||
+ | s18=00000000 s19=00000000 d09=0000000000000000 | ||
+ | s20=00000000 s21=00000000 d10=0000000000000000 | ||
+ | s22=00000000 s23=00000000 d11=0000000000000000 | ||
+ | s24=00000000 s25=00000000 d12=0000000000000000 | ||
+ | s26=00000000 s27=00000000 d13=0000000000000000 | ||
+ | s28=00000000 s29=00000000 d14=0000000000000000 | ||
+ | s30=00000000 s31=00000000 d15=0000000000000000 | ||
+ | s32=00000000 s33=00000000 d16=0000000000000000 | ||
+ | s34=00000000 s35=00000000 d17=0000000000000000 | ||
+ | s36=00000000 s37=00000000 d18=0000000000000000 | ||
+ | s38=00000000 s39=00000000 d19=0000000000000000 | ||
+ | s40=00000000 s41=00000000 d20=0000000000000000 | ||
+ | s42=00000000 s43=00000000 d21=0000000000000000 | ||
+ | s44=00000000 s45=00000000 d22=0000000000000000 | ||
+ | s46=00000000 s47=00000000 d23=0000000000000000 | ||
+ | s48=00000000 s49=00000000 d24=0000000000000000 | ||
+ | s50=00000000 s51=00000000 d25=0000000000000000 | ||
+ | s52=00000000 s53=00000000 d26=0000000000000000 | ||
+ | s54=00000000 s55=00000000 d27=0000000000000000 | ||
+ | s56=00000000 s57=00000000 d28=0000000000000000 | ||
+ | s58=00000000 s59=00000000 d29=0000000000000000 | ||
+ | s60=00000000 s61=00000000 d30=0000000000000000 | ||
+ | s62=00000000 s63=00000000 d31=0000000000000000 | ||
+ | FPSCR: 00000000 | ||
+ | Aborted (core dumped) | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Instalación y construcción de U-Boot ===== | ||
Descargar el // | Descargar el // | ||
Línea 168: | Línea 191: | ||
user@machine: | user@machine: | ||
</ | </ | ||
- | |||
- | |||
===== Instalación y construcción del Linux Kernel ===== | ===== Instalación y construcción del Linux Kernel ===== | ||
Línea 191: | Línea 212: | ||
</ | </ | ||
- | Puede que al ejecutar el script **build_kernel.sh** arroje un error pidiendo satisfacer ciertas dependencias, | + | Puede que al ejecutar el script **build_kernel.sh** arroje un error pidiendo satisfacer ciertas dependencias, |
<code bash> | <code bash> | ||
Línea 205: | Línea 226: | ||
</ | </ | ||
- | En cuyo caso, ejecuté | + | En cuyo caso, ejecute |
<code bash> | <code bash> | ||
user@machine: | user@machine: | ||
</ | </ | ||
- | Volvemos | + | Volver a ejecutar el script, |
{{td3: | {{td3: | ||
Línea 271: | 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:// | + | Verificar que la tarjeta microSD **no** se encuentre dentro de la lista de incompatibles |
**NOTA:** tener cuidado con los comandos a continuación, | **NOTA:** tener cuidado con los comandos a continuación, | ||
Línea 290: | Línea 311: | ||
<code bash> | <code bash> | ||
+ | |||
+ | Para el caso que nuestro dispositivo sea **/ | ||
+ | |||
+ | <code bash> | ||
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 364: | Línea 389: | ||
=== Root File System === | === Root File System === | ||
- | <code bash> | + | <code bash> |
- | user@machine: | + | user@machine: |
- | user@machine: | + | user@machine: |
- | user@machine: | + | user@machine: |
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 521: | Línea 546: | ||
- 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. | ||
- | - sudo ifconfig **nombre_interfaz_usb_de_BBB** 192.168.7.1 | + | - sudo su |
- | - sudo iptables %%--%%table nat %%--%%append POSTROUTING %%--%%out-interface **interfaz_WLAN_que_brindara_internet** -j MASQUERADE | + | - ifconfig **nombre_interfaz_usb_de_BBB** 192.168.7.1 |
- | - sudo iptables %%--%%append FORWARD %%--%%in-interface **nombre_interfaz_usb_de_BBB** -j ACCEPT | + | - iptables %%--%%table nat %%--%%append POSTROUTING %%--%%out-interface **interfaz_WLAN_que_brindara_internet** -j MASQUERADE |
- | - sudo echo 1 > / | + | - iptables %%--%%append FORWARD %%--%%in-interface **nombre_interfaz_usb_de_BBB** -j ACCEPT |
+ | - echo 1 > / | ||
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. | 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. | ||
=== Verificar que haya internet === | === Verificar que haya internet === | ||
- | - ping www.example.com | + | |
En caso que no consigamos es probable que no este configurado ningún servidor DNS. | En caso que no consigamos es probable que no este configurado ningún servidor DNS. | ||
Para ello abrir el archivo "/ | Para ello abrir el archivo "/ | ||
- | - sudo nano / | + | |
Si el archivo no tiene ningún nameserver, agregar: | Si el archivo no tiene ningún nameserver, agregar: | ||
- | - nameserver 8.8.8.8 | + | |
Luego reiniciar el servicio con: | Luego reiniciar el servicio con: | ||
- | - sudo systemctl restart systemd-resolved.service | + | |
Verificar nuevamente si se puede resolver el dominio | Verificar nuevamente si se puede resolver el dominio | ||
- | - ping www.example.com | + | |
==== Segundo método (NO seguro para producto) ==== | ==== Segundo método (NO seguro para producto) ==== | ||
Línea 583: | Línea 609: | ||
//ssh localhost// | //ssh localhost// | ||
- | --- // | ||
--- // | --- // | ||
- | //2020/08/23 00:00// | + | |
+ | // |