Cet article est basé sur u-boot.2016.03.
1. Le rôle des variables environnementales
Le rôle des variables d'environnement dans uboot est de nous permettre de définir des variables d'environnement pour que le code se comporte différemment sans changer le code source ou recompiler, comme l'heure de démarrage, l'adresse IP, les bootargs vers le noyau, etc., certains La variable d'environnement peut ne prend effet qu'après le redémarrage et la valeur nouvellement définie peut être utilisée immédiatement après certains réglages.
2. Variables d'environnement couramment utilisées
Les variables d'environnement couramment utilisées sont définies dans une structure et chaque variable d'environnement est composée d'un nom de variable, d'un symbole égal, d'un contenu de variable et de "\ 0".
/include/env_default.h
const uchar default_environment[] = {
...
#ifdef CONFIG_BOOTARGS
"bootargs=" CONFIG_BOOTARGS "\0"
#endif
#ifdef CONFIG_BOOTCOMMAND
"bootcmd=" CONFIG_BOOTCOMMAND "\0"
#endif
...
#ifdef CONFIG_EXTRA_ENV_SETTINGS
CONFIG_EXTRA_ENV_SETTINGS
#endif
...
};
Variable d'environnement | la description |
---|---|
bootargs | Paramètres de démarrage transmis au noyau |
bootcmd | Commandes exécutées depuis le démarrage |
bootdelay | Nombre de secondes à attendre pour le démarrage automatique |
débit en bauds | Le débit en bauds de la console série |
ipaddr | Adresse IP de cette machine |
serverip | Adresse IP du serveur |
passerelleip | Passerelle native |
masque de réseau | Masque de sous-réseau |
cambre | Architecture (bras) |
vendeur | Usine de copeaux (freescale) |
ici CONFIG_EXTRA_ENV_SETTINGSIl est assez spécial et est généralement défini dans le fichier au niveau de la carte.
Ce que nous utilisons ici est la carte de développement de référence de sabreauto, cette macro est définie dans mx6sabre_common.h.
3. Analyse du code
Les principaux documents concernés sont:
common/board_f.c//uboot启动时比较靠前的初始化工作
common/board_r.c//uboot启动时比较靠后的初始化工作
common/env_common.c// 中间层实现
cmd/nvedit.c//命令层实现
common/env_flash.c//驱动层实现(以eimnor为例)
lib/Hashtable.c //哈希表实现
3.1 Structure de séquence:
3.2 Structure hiérarchique:
Toute l'architecture d'env dans uboot peut être divisée en 3 parties: