Comment le bootloader de u-boot lit / enregistre ses variables d’environnement?

  • Comment le bootloader de u-boot lit / enregistre ses variables d’environnement?
  • Comment nous déclarons l’adresse de la section Variable de l’environnement u-boot dans Flash?

  • De la description ci- dessous : L’environnement U-Boot est un bloc de mémoire qui est conservé sur un stockage persistant et copié dans la mémoire vive lorsque U-Boot démarre.

Quelle est la signification de ” copié dans la RAM “?

U-boot va copier le bloc de mémoire des variables d’environnement vers la RAM?

Merci

Oui, U-boot copiera le bloc de mémoire des variables d’environnement dans la RAM.

Le stockage persistant, d’où provient le bloc, est spécifique à la plate-forme. Quelques options de stockage communes (et le fichier source gérant cette option de stockage):

NOR flash common/env_flash.c SPI flash common/env_sf.c MMC common/env_mmc.c 

Les définitions de CONFIG_ dans include / configs / yourboard.h détermineront les détails. Par exemple, pour SPI flash mappé en haut de la mémoire, peut-être:

 #define CONFIG_ENV_IS_IN_SPI_FLASH #define CONFIG_ENV_SIZE 0x00001000 #define CONFIG_ENV_ADDR 0xFFFFF000 

CONFIG_ENV_ADDR est l’adresse de la section Variable de l’environnement u-boot dans Flash.

Notez que u-boot crée automatiquement un CRC32 sur cette section lors de l’écriture de l’environnement sur un stockage persistant. Ce CRC est vérifié lorsque l’environnement est lu au démarrage. Si le contrôle CRC ne réussit pas, l’environnement stocké n’est pas utilisé. au lieu de cela, un nouvel environnement par défaut, codé en dur dans le code du programme, est utilisé, c’est un cas particulier.

Lors de l’initialisation U-Boot, les variables d’environnement sont imscopes dans une table de hachage. En fonctionnement, toutes les opérations de lecture / écriture et toutes les commandes “printenv” (variable d’environnement d’affichage) et “setenv” (set environment variable) utilisent ces entrées de table. Toutes les modifications ne sont pas enregistrées jusqu’à ce que la commande “saveenv” soit terminée, ce qui écrit dans le stockage persistant.

Pour plus d’informations, reportez -vous aux lignes 14-24 et u-boot / README des lignes u-boot / common / cmd_nvedit.c (numéros de ligne pour v2013.10).

L’adresse et la taille du bloc de variables env seront définies dans le fichier d’en-tête du tableau. Voir include / configs / am3517_evm.h par exemple:

 #define CONFIG_SYS_ENV_SECT_SIZE (128 << 10) /* 128 KiB */ #define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET 

U-boot charge CONFIG_SYS_ENV_SECT_SIZE depuis SMNAND_ENV_OFFSET . Vous pouvez modifier les valeurs, puis les enregistrer via saveenv .