mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-15 07:43:07 +00:00
86b9c3e4e4
At present U-Boot environment variables, and thus scripts, are defined by CONFIG_EXTRA_ENV_SETTINGS. It is painful to add large amounts of text to this file and dealing with quoting and newlines is harder than it should be. It would be better if we could just type the script into a text file and have it included by U-Boot. Add a feature that brings in a .env file associated with the board config, if present. To use it, create a file in a board/<vendor> directory, typically called <board>.env and controlled by the CONFIG_ENV_SOURCE_FILE option. The environment variables should be of the form "var=value". Values can extend to multiple lines. See the README under 'Environment Variables:' for more information and an example. In many cases environment variables need access to the U-Boot CONFIG variables to select different options. Enable this so that the environment scripts can be as useful as the ones currently in the board config files. This uses the C preprocessor, means that comments can be included in the environment using /* ... */ Also support += to allow variables to be appended to. This is needed when using the preprocessor. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Marek Behún <marek.behun@nic.cz> Tested-by: Marek Behún <marek.behun@nic.cz>
140 lines
3.6 KiB
C
140 lines
3.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* (C) Copyright 2000-2010
|
|
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
*
|
|
* (C) Copyright 2001 Sysgo Real-Time Solutions, GmbH <www.elinos.com>
|
|
* Andreas Heppel <aheppel@sysgo.de>
|
|
*/
|
|
|
|
#include <env_callback.h>
|
|
#include <linux/stringify.h>
|
|
|
|
#ifndef USE_HOSTCC
|
|
#include <generated/environment.h>
|
|
#endif
|
|
|
|
#ifdef DEFAULT_ENV_INSTANCE_EMBEDDED
|
|
env_t embedded_environment __UBOOT_ENV_SECTION__(environment) = {
|
|
ENV_CRC, /* CRC Sum */
|
|
#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
|
|
1, /* Flags: valid */
|
|
#endif
|
|
{
|
|
#elif defined(DEFAULT_ENV_INSTANCE_STATIC)
|
|
static char default_environment[] = {
|
|
#elif defined(DEFAULT_ENV_IS_RW)
|
|
char default_environment[] = {
|
|
#else
|
|
const char default_environment[] = {
|
|
#endif
|
|
#ifndef CONFIG_USE_DEFAULT_ENV_FILE
|
|
#ifdef CONFIG_ENV_CALLBACK_LIST_DEFAULT
|
|
ENV_CALLBACK_VAR "=" CONFIG_ENV_CALLBACK_LIST_DEFAULT "\0"
|
|
#endif
|
|
#ifdef CONFIG_ENV_FLAGS_LIST_DEFAULT
|
|
ENV_FLAGS_VAR "=" CONFIG_ENV_FLAGS_LIST_DEFAULT "\0"
|
|
#endif
|
|
#ifdef CONFIG_USE_BOOTARGS
|
|
"bootargs=" CONFIG_BOOTARGS "\0"
|
|
#endif
|
|
#ifdef CONFIG_BOOTCOMMAND
|
|
"bootcmd=" CONFIG_BOOTCOMMAND "\0"
|
|
#endif
|
|
#ifdef CONFIG_RAMBOOTCOMMAND
|
|
"ramboot=" CONFIG_RAMBOOTCOMMAND "\0"
|
|
#endif
|
|
#ifdef CONFIG_NFSBOOTCOMMAND
|
|
"nfsboot=" CONFIG_NFSBOOTCOMMAND "\0"
|
|
#endif
|
|
#if defined(CONFIG_BOOTDELAY)
|
|
"bootdelay=" __stringify(CONFIG_BOOTDELAY) "\0"
|
|
#endif
|
|
#if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0)
|
|
"baudrate=" __stringify(CONFIG_BAUDRATE) "\0"
|
|
#endif
|
|
#ifdef CONFIG_LOADS_ECHO
|
|
"loads_echo=" __stringify(CONFIG_LOADS_ECHO) "\0"
|
|
#endif
|
|
#ifdef CONFIG_ETHPRIME
|
|
"ethprime=" CONFIG_ETHPRIME "\0"
|
|
#endif
|
|
#ifdef CONFIG_IPADDR
|
|
"ipaddr=" __stringify(CONFIG_IPADDR) "\0"
|
|
#endif
|
|
#ifdef CONFIG_SERVERIP
|
|
"serverip=" __stringify(CONFIG_SERVERIP) "\0"
|
|
#endif
|
|
#ifdef CONFIG_SYS_AUTOLOAD
|
|
"autoload=" CONFIG_SYS_AUTOLOAD "\0"
|
|
#endif
|
|
#ifdef CONFIG_PREBOOT
|
|
"preboot=" CONFIG_PREBOOT "\0"
|
|
#endif
|
|
#ifdef CONFIG_ROOTPATH
|
|
"rootpath=" CONFIG_ROOTPATH "\0"
|
|
#endif
|
|
#ifdef CONFIG_GATEWAYIP
|
|
"gatewayip=" __stringify(CONFIG_GATEWAYIP) "\0"
|
|
#endif
|
|
#ifdef CONFIG_NETMASK
|
|
"netmask=" __stringify(CONFIG_NETMASK) "\0"
|
|
#endif
|
|
#ifdef CONFIG_HOSTNAME
|
|
"hostname=" CONFIG_HOSTNAME "\0"
|
|
#endif
|
|
#ifdef CONFIG_BOOTFILE
|
|
"bootfile=" CONFIG_BOOTFILE "\0"
|
|
#endif
|
|
#ifdef CONFIG_SYS_LOAD_ADDR
|
|
"loadaddr=" __stringify(CONFIG_SYS_LOAD_ADDR)"\0"
|
|
#endif
|
|
#if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0)
|
|
"pcidelay=" __stringify(CONFIG_PCI_BOOTDELAY)"\0"
|
|
#endif
|
|
#ifdef CONFIG_ENV_VARS_UBOOT_CONFIG
|
|
"arch=" CONFIG_SYS_ARCH "\0"
|
|
#ifdef CONFIG_SYS_CPU
|
|
"cpu=" CONFIG_SYS_CPU "\0"
|
|
#endif
|
|
#ifdef CONFIG_SYS_BOARD
|
|
"board=" CONFIG_SYS_BOARD "\0"
|
|
"board_name=" CONFIG_SYS_BOARD "\0"
|
|
#endif
|
|
#ifdef CONFIG_SYS_VENDOR
|
|
"vendor=" CONFIG_SYS_VENDOR "\0"
|
|
#endif
|
|
#ifdef CONFIG_SYS_SOC
|
|
"soc=" CONFIG_SYS_SOC "\0"
|
|
#endif
|
|
#ifdef CONFIG_ENV_IMPORT_FDT
|
|
"env_fdt_path=" CONFIG_ENV_FDT_PATH "\0"
|
|
#endif
|
|
#endif
|
|
#if defined(CONFIG_BOOTCOUNT_BOOTLIMIT) && (CONFIG_BOOTCOUNT_BOOTLIMIT > 0)
|
|
"bootlimit=" __stringify(CONFIG_BOOTCOUNT_BOOTLIMIT)"\0"
|
|
#endif
|
|
#ifdef CONFIG_EXTRA_ENV_TEXT
|
|
# ifdef CONFIG_EXTRA_ENV_SETTINGS
|
|
# error "Your board uses a text-file environment, so must not define CONFIG_EXTRA_ENV_SETTINGS"
|
|
# endif
|
|
/* This is created in the Makefile */
|
|
CONFIG_EXTRA_ENV_TEXT
|
|
#endif
|
|
#ifdef CONFIG_EXTRA_ENV_SETTINGS
|
|
CONFIG_EXTRA_ENV_SETTINGS
|
|
#endif
|
|
"\0"
|
|
#else /* CONFIG_USE_DEFAULT_ENV_FILE */
|
|
#include "generated/defaultenv_autogenerated.h"
|
|
#endif
|
|
#ifdef DEFAULT_ENV_INSTANCE_EMBEDDED
|
|
}
|
|
#endif
|
|
};
|
|
|
|
#if !defined(USE_HOSTCC) && !defined(DEFAULT_ENV_INSTANCE_EMBEDDED)
|
|
#include <env_internal.h>
|
|
static_assert(sizeof(default_environment) <= ENV_SIZE,
|
|
"Default environment is too large");
|
|
#endif
|