es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la diferencia entre fdt_addr y fdt_addr_r en uboot?

He estado trabajando en la implementación de u-boot en un RPi4 de 64 bits durante unas semanas.
Mi último gran error fue que al iniciar el kernel en boot.cmd -> estaba usando la variable fdtaddrr en lugar de fdt_addr.

¿Alguien sabe cuál es la diferencia entre las variables fdtaddr y fdtaddrr?
¿y por qué cuando cargamos el dtb usamos fdtaddrr? ¿y por qué usamos fdtaddr al iniciar el kernel?

Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Comprendiendo las variables fdt_addr y fdt_addr_r en u-boot

    En u-boot, fdt_addr y fdt_addr_r son variables utilizadas para almacenar la dirección del blob del árbol de dispositivos (DTB) en la memoria. El árbol de dispositivos es una estructura de datos utilizada por el kernel de Linux para describir la configuración de hardware de un dispositivo.

    La principal diferencia entre las dos variables es su duración. fdt_addr es una variable de entorno normal cuyo valor se almacena en memoria no volátil, lo que significa que persistirá incluso después de un reinicio del sistema. Por otro lado, fdt_addr_r es una variable de tiempo de ejecución cuyo valor solo está disponible durante la sesión de arranque actual, y su valor se pierde cuando el sistema se apaga o reinicia.

    Al cargar el archivo DTB durante el proceso de arranque, utilizamos la variable fdt_addr_r porque esta variable permite que el cargador de arranque (en este caso, u-boot) cargue el DTB en una ubicación de memoria determinada en tiempo de ejecución. Esta flexibilidad en la ubicación de la memoria permite que u-boot pueda adaptarse a DTBs de diferentes tamaños o con diferentes requisitos de configuración de hardware.

    Al arrancar el kernel, utilizamos la variable fdt_addr porque esta variable permite que el kernel acceda al DTB que ha sido cargado en la memoria por u-boot. Luego, el kernel utiliza el DTB para emparejar la configuración de hardware del dispositivo con los controladores de dispositivo apropiados y las configuraciones del sistema.

    En resumen, la variable fdt_addr_r es utilizada por u-boot durante la carga del DTB, mientras que la variable fdt_addr es utilizada por el kernel de Linux para acceder al DTB después de que ha sido cargado en la memoria.

Comments are closed.