Merge branch 'for-next/env'
This commit is contained in:
commit
4df69d0b6e
|
@ -22,6 +22,8 @@
|
|||
*.orig
|
||||
*.dcd
|
||||
*.dcd.S
|
||||
*.bbenv
|
||||
*.bbenv.*
|
||||
|
||||
#
|
||||
# Top-level generic files
|
||||
|
|
20
Makefile
20
Makefile
|
@ -493,6 +493,7 @@ all: barebox-flash-image $(KBUILD_DTBS)
|
|||
endif
|
||||
|
||||
common-$(CONFIG_PBL_IMAGE) += pbl/
|
||||
common-$(CONFIG_DEFAULT_ENVIRONMENT) += defaultenv/
|
||||
|
||||
barebox-dirs := $(patsubst %/,%,$(filter %/, $(common-y)))
|
||||
|
||||
|
@ -504,6 +505,23 @@ barebox-alldirs := $(sort $(barebox-dirs) $(patsubst %/,%,$(filter %/, \
|
|||
pbl-common-y := $(patsubst %/, %/built-in-pbl.o, $(common-y))
|
||||
common-y := $(patsubst %/, %/built-in.o, $(common-y))
|
||||
|
||||
ifeq ($(CONFIG_DEFAULT_COMPRESSION_GZIP),y)
|
||||
DEFAULT_COMPRESSION_SUFFIX := .gz
|
||||
endif
|
||||
ifeq ($(CONFIG_DEFAULT_COMPRESSED_BZIP2),y)
|
||||
DEFAULT_COMPRESSION_SUFFIX := .bz2
|
||||
endif
|
||||
ifeq ($(CONFIG_DEFAULT_COMPRESSION_LZO),y)
|
||||
DEFAULT_COMPRESSION_SUFFIX := .lzo
|
||||
endif
|
||||
ifeq ($(CONFIG_DEFAULT_COMPRESSION_LZ4),y)
|
||||
DEFAULT_COMPRESSION_SUFFIX := .lz4
|
||||
endif
|
||||
ifeq ($(CONFIG_DEFAULT_COMPRESSION_NONE),y)
|
||||
DEFAULT_COMPRESSION_SUFFIX :=
|
||||
endif
|
||||
export DEFAULT_COMPRESSION_SUFFIX
|
||||
|
||||
# Build barebox
|
||||
# ---------------------------------------------------------------------------
|
||||
# barebox is built from the objects selected by $(barebox-init) and
|
||||
|
@ -1005,7 +1023,7 @@ clean: archclean $(clean-dirs)
|
|||
@find . $(RCS_FIND_IGNORE) \
|
||||
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
|
||||
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
|
||||
-o -name '*.symtypes' \) \
|
||||
-o -name '*.symtypes' -o -name '*.bbenv.*' -o -name "*.bbenv" \) \
|
||||
-type f -print | xargs rm -f
|
||||
|
||||
# mrproper - Delete all generated files, including .config
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
CONFIG_ARCH_IMX=y
|
||||
CONFIG_ARCH_IMX6=y
|
||||
CONFIG_MACH_MX6Q_ARM2=y
|
||||
CONFIG_IMX_IIM=y
|
||||
CONFIG_IMX_IIM_FUSE_BLOW=y
|
||||
|
@ -16,7 +15,7 @@ CONFIG_HUSH_FANCY_PROMPT=y
|
|||
CONFIG_CMDLINE_EDITING=y
|
||||
CONFIG_AUTO_COMPLETE=y
|
||||
CONFIG_DEFAULT_ENVIRONMENT_GENERIC=y
|
||||
CONFIG_DEFAULT_ENVIRONMENT_PATH="defaultenv arch/arm/boards/freescale-mx6-arm2/env/"
|
||||
CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/freescale-mx6-arm2/env/"
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_CMD_EDIT=y
|
||||
CONFIG_CMD_SLEEP=y
|
||||
|
@ -25,6 +24,7 @@ CONFIG_CMD_EXPORT=y
|
|||
CONFIG_CMD_PRINTENV=y
|
||||
CONFIG_CMD_READLINE=y
|
||||
CONFIG_CMD_TIME=y
|
||||
CONFIG_CMD_TFTP=y
|
||||
CONFIG_CMD_ECHO_E=y
|
||||
CONFIG_CMD_MEMINFO=y
|
||||
CONFIG_CMD_IOMEM=y
|
||||
|
@ -35,7 +35,6 @@ CONFIG_CMD_BOOTM_INITRD=y
|
|||
CONFIG_CMD_BOOTM_OFTREE=y
|
||||
CONFIG_CMD_BOOTM_OFTREE_UIMAGE=y
|
||||
CONFIG_CMD_UIMAGE=y
|
||||
# CONFIG_CMD_BOOTZ is not set
|
||||
# CONFIG_CMD_BOOTU is not set
|
||||
CONFIG_CMD_RESET=y
|
||||
CONFIG_CMD_GO=y
|
||||
|
@ -49,8 +48,6 @@ CONFIG_NET=y
|
|||
CONFIG_NET_DHCP=y
|
||||
CONFIG_NET_NFS=y
|
||||
CONFIG_NET_PING=y
|
||||
CONFIG_CMD_TFTP=y
|
||||
CONFIG_FS_TFTP=y
|
||||
CONFIG_NET_NETCONSOLE=y
|
||||
CONFIG_DRIVER_NET_FEC_IMX=y
|
||||
CONFIG_NET_USB=y
|
||||
|
@ -63,6 +60,7 @@ CONFIG_USB_STORAGE=y
|
|||
CONFIG_MCI=y
|
||||
CONFIG_MCI_STARTUP=y
|
||||
CONFIG_MCI_IMX_ESDHC=y
|
||||
CONFIG_FS_TFTP=y
|
||||
CONFIG_FS_FAT=y
|
||||
CONFIG_FS_FAT_WRITE=y
|
||||
CONFIG_FS_FAT_LFN=y
|
||||
|
|
|
@ -48,6 +48,7 @@ SECTIONS
|
|||
.rodata : {
|
||||
*(.rodata);
|
||||
*(.rodata.*)
|
||||
*(.bbenv.rodata.*)
|
||||
} > ram
|
||||
|
||||
. = ALIGN(4);
|
||||
|
|
|
@ -60,11 +60,14 @@ static int dfu_do_parse_one(char *partstr, char **endstr, struct usb_dfu_dev *df
|
|||
case PARSE_FLAGS:
|
||||
switch (*partstr) {
|
||||
case 's':
|
||||
dfu->flags |= DFU_FLAG_SAVE;
|
||||
dfu->flags |= DFU_FLAG_SAFE;
|
||||
break;
|
||||
case 'r':
|
||||
dfu->flags |= DFU_FLAG_READBACK;
|
||||
break;
|
||||
case 'c':
|
||||
dfu->flags |= DFU_FLAG_CREATE;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -170,9 +173,10 @@ BAREBOX_CMD_HELP_OPT ("-p <str>", "product string\n")
|
|||
BAREBOX_CMD_HELP_OPT ("-V <id>", "vendor id\n")
|
||||
BAREBOX_CMD_HELP_OPT ("-P <id>", "product id\n")
|
||||
BAREBOX_CMD_HELP_OPT ("<description>",
|
||||
"device1(name1)[sr],device2(name2)[sr]\n"
|
||||
"device1(name1)[sr],device2(name2)[src]\n"
|
||||
"'s' means 'safe mode' (download the complete image before flashing) and\n"
|
||||
"'r' that readback of the firmware is allowed.\n")
|
||||
"'r' that readback of the firmware is allowed.\n"
|
||||
"'c' if given, the file will be created (for use with regular files)\n")
|
||||
BAREBOX_CMD_HELP_END
|
||||
|
||||
/**
|
||||
|
|
|
@ -26,15 +26,17 @@
|
|||
#include <envfs.h>
|
||||
#include <errno.h>
|
||||
#include <fs.h>
|
||||
#include <malloc.h>
|
||||
|
||||
static int do_loadenv(int argc, char *argv[])
|
||||
{
|
||||
char *filename, *dirname;
|
||||
char *filename = NULL, *dirname;
|
||||
unsigned flags = 0;
|
||||
int opt;
|
||||
int scrub = 0;
|
||||
int defaultenv = 0;
|
||||
|
||||
while ((opt = getopt(argc, argv, "ns")) > 0) {
|
||||
while ((opt = getopt(argc, argv, "nsd")) > 0) {
|
||||
switch (opt) {
|
||||
case 'n':
|
||||
flags |= ENV_FLAG_NO_OVERWRITE;
|
||||
|
@ -42,6 +44,9 @@ static int do_loadenv(int argc, char *argv[])
|
|||
case 's':
|
||||
scrub = 1;
|
||||
break;
|
||||
case 'd':
|
||||
defaultenv = 1;
|
||||
break;
|
||||
default:
|
||||
return COMMAND_ERROR_USAGE;
|
||||
}
|
||||
|
@ -52,10 +57,24 @@ static int do_loadenv(int argc, char *argv[])
|
|||
else
|
||||
dirname = argv[optind + 1];
|
||||
|
||||
if (argc - optind < 1)
|
||||
if (argc - optind < 1) {
|
||||
filename = default_environment_path_get();
|
||||
else
|
||||
filename = argv[optind];
|
||||
} else {
|
||||
char *str = normalise_path(argv[optind]);
|
||||
|
||||
/*
|
||||
* /dev/defaultenv use to contain the defaultenvironment.
|
||||
* we do not have this file anymore, but maintain compatibility
|
||||
* to the 'loadenv -s /dev/defaultenv' command to restore the
|
||||
* default environment for some time.
|
||||
*/
|
||||
if (!strcmp(str, "/dev/defaultenv"))
|
||||
defaultenv = 1;
|
||||
else
|
||||
filename = argv[optind];
|
||||
|
||||
free(str);
|
||||
}
|
||||
|
||||
if (scrub) {
|
||||
int ret;
|
||||
|
@ -75,15 +94,19 @@ static int do_loadenv(int argc, char *argv[])
|
|||
}
|
||||
}
|
||||
|
||||
printf("loading environment from %s\n", filename);
|
||||
printf("loading environment from %s\n", defaultenv ? "defaultenv" : filename);
|
||||
|
||||
return envfs_load(filename, dirname, flags);
|
||||
if (defaultenv)
|
||||
return defaultenv_load(dirname, flags);
|
||||
else
|
||||
return envfs_load(filename, dirname, flags);
|
||||
}
|
||||
|
||||
BAREBOX_CMD_HELP_START(loadenv)
|
||||
BAREBOX_CMD_HELP_USAGE("loadenv OPTIONS [ENVFS] [DIRECTORY]\n")
|
||||
BAREBOX_CMD_HELP_OPT("-n", "do not overwrite existing files\n")
|
||||
BAREBOX_CMD_HELP_OPT("-s", "scrub old environment\n")
|
||||
BAREBOX_CMD_HELP_OPT("-d", "load default environment\n")
|
||||
BAREBOX_CMD_HELP_SHORT("Load environment from ENVFS into DIRECTORY (default: /dev/env0 -> /env).\n")
|
||||
BAREBOX_CMD_HELP_END
|
||||
|
||||
|
|
|
@ -535,35 +535,38 @@ config DEFAULT_ENVIRONMENT
|
|||
Enabling this option will give you a default environment when
|
||||
the environment found in the environment sector is invalid
|
||||
|
||||
config DEFAULT_ENVIRONMENT_COMPRESSED
|
||||
bool
|
||||
depends on DEFAULT_ENVIRONMENT
|
||||
depends on !IMAGE_COMPRESSION_LZO
|
||||
depends on !IMAGE_COMPRESSION_GZIP
|
||||
default y if ZLIB
|
||||
default y if BZLIB
|
||||
default y if LZO_DECOMPRESS
|
||||
|
||||
if DEFAULT_ENVIRONMENT_COMPRESSED
|
||||
|
||||
choice
|
||||
prompt "compression"
|
||||
prompt "default compression for in-barebox binaries"
|
||||
default DEFAULT_COMPRESSION_NONE if PBL_IMAGE
|
||||
default DEFAULT_COMPRESSION_LZO if LZO_DECOMPRESS
|
||||
default DEFAULT_COMPRESSION_GZIP if ZLIB
|
||||
default DEFAULT_COMPRESSION_LZ4 if LZ4_DECOMPRESS
|
||||
default DEFAULT_COMPRESSION_BZIP2 if BZLIB
|
||||
help
|
||||
Select the default compression for in-barebox binary files. Files
|
||||
compiled into barebox like for example the default environment will
|
||||
be compressed with this compression type.
|
||||
|
||||
config DEFAULT_ENVIRONMENT_COMPRESSED_GZIP
|
||||
config DEFAULT_COMPRESSION_GZIP
|
||||
bool "gzip"
|
||||
depends on ZLIB
|
||||
|
||||
config DEFAULT_ENVIRONMENT_COMPRESSED_BZIP2
|
||||
config DEFAULT_COMPRESSION_BZIP2
|
||||
bool "bzip2"
|
||||
depends on BZLIB
|
||||
|
||||
config DEFAULT_ENVIRONMENT_COMPRESSED_LZO
|
||||
config DEFAULT_COMPRESSION_LZO
|
||||
bool "lzo"
|
||||
depends on LZO_DECOMPRESS
|
||||
|
||||
endchoice
|
||||
config DEFAULT_COMPRESSION_LZ4
|
||||
bool "lz4"
|
||||
depends on LZ4_DECOMPRESS
|
||||
|
||||
endif
|
||||
config DEFAULT_COMPRESSION_NONE
|
||||
bool "no compression"
|
||||
|
||||
endchoice
|
||||
|
||||
config HAVE_DEFAULT_ENVIRONMENT_NEW
|
||||
bool
|
||||
|
@ -584,6 +587,18 @@ config DEFAULT_ENVIRONMENT_GENERIC_NEW
|
|||
select CMD_BOOT
|
||||
prompt "Generic environment template"
|
||||
|
||||
config DEFAULT_ENVIRONMENT_GENERIC_NEW_MENU
|
||||
bool
|
||||
depends on DEFAULT_ENVIRONMENT_GENERIC_NEW
|
||||
depends on CONFIG_CMD_MENU_MANAGEMENT
|
||||
default y
|
||||
|
||||
config DEFAULT_ENVIRONMENT_GENERIC_NEW_DFU
|
||||
bool
|
||||
depends on DEFAULT_ENVIRONMENT_GENERIC_NEW
|
||||
depends on USB_GADGET_DFU
|
||||
default y
|
||||
|
||||
config DEFAULT_ENVIRONMENT_GENERIC
|
||||
bool
|
||||
depends on !HAVE_DEFAULT_ENVIRONMENT_NEW
|
||||
|
|
153
common/Makefile
153
common/Makefile
|
@ -1,119 +1,48 @@
|
|||
obj-y += memory.o
|
||||
obj-y += memory_display.o
|
||||
obj-y += clock.o
|
||||
obj-y += console_common.o
|
||||
obj-y += startup.o
|
||||
obj-y += misc.o
|
||||
obj-y += memsize.o
|
||||
obj-y += resource.o
|
||||
obj-y += bootsource.o
|
||||
obj-$(CONFIG_AUTO_COMPLETE) += complete.o
|
||||
obj-$(CONFIG_BANNER) += version.o
|
||||
obj-$(CONFIG_BAREBOX_UPDATE) += bbu.o
|
||||
obj-$(CONFIG_BINFMT) += binfmt.o
|
||||
obj-$(CONFIG_SHELL_HUSH) += hush.o
|
||||
obj-$(CONFIG_SHELL_SIMPLE) += parser.o
|
||||
obj-$(CONFIG_BLOCK) += block.o
|
||||
obj-$(CONFIG_BLSPEC) += blspec.o
|
||||
obj-$(CONFIG_BOOTM) += bootm.o
|
||||
obj-$(CONFIG_CMD_LOADS) += s_record.o
|
||||
obj-$(CONFIG_CMD_MEMTEST) += memtest.o
|
||||
obj-$(CONFIG_COMMAND_SUPPORT) += command.o
|
||||
obj-$(CONFIG_CONSOLE_FULL) += console.o
|
||||
obj-$(CONFIG_CONSOLE_SIMPLE) += console_simple.o
|
||||
obj-$(CONFIG_DIGEST) += digest.o
|
||||
obj-$(CONFIG_DDR_SPD) += ddr_spd.o
|
||||
obj-$(CONFIG_ENV_HANDLING) += environment.o
|
||||
obj-$(CONFIG_ENVIRONMENT_VARIABLES) += env.o
|
||||
obj-$(CONFIG_FILETYPE) += filetype.o
|
||||
obj-$(CONFIG_FLEXIBLE_BOOTARGS) += bootargs.o
|
||||
obj-$(CONFIG_GLOBALVAR) += globalvar.o
|
||||
obj-$(CONFIG_GREGORIAN_CALENDER) += date.o
|
||||
obj-$(CONFIG_KALLSYMS) += kallsyms.o
|
||||
obj-$(CONFIG_ENV_HANDLING) += environment.o
|
||||
obj-$(CONFIG_AUTO_COMPLETE) += complete.o
|
||||
obj-$(CONFIG_POLLER) += poller.o
|
||||
obj-$(CONFIG_BLOCK) += block.o
|
||||
obj-$(CONFIG_PARTITION_DISK) += partitions.o partitions/
|
||||
|
||||
obj-$(CONFIG_CMD_LOADS) += s_record.o
|
||||
obj-$(CONFIG_MALLOC_DLMALLOC) += dlmalloc.o
|
||||
obj-$(CONFIG_MALLOC_TLSF) += tlsf_malloc.o tlsf.o
|
||||
obj-$(CONFIG_MALLOC_DUMMY) += dummy_malloc.o
|
||||
obj-$(CONFIG_MEMINFO) += meminfo.o
|
||||
obj-$(CONFIG_MENU) += menu.o
|
||||
obj-$(CONFIG_MODULES) += module.o
|
||||
extra-$(CONFIG_MODULES) += module.lds
|
||||
obj-$(CONFIG_OFTREE) += oftree.o
|
||||
|
||||
obj-$(CONFIG_BLSPEC) += blspec.o
|
||||
obj-y += memory.o
|
||||
obj-$(CONFIG_DDR_SPD) += ddr_spd.o
|
||||
obj-y += memory_display.o
|
||||
obj-$(CONFIG_MALLOC_DLMALLOC) += dlmalloc.o
|
||||
obj-$(CONFIG_MALLOC_TLSF) += tlsf_malloc.o
|
||||
obj-$(CONFIG_MALLOC_TLSF) += tlsf.o
|
||||
obj-$(CONFIG_MALLOC_DUMMY) += dummy_malloc.o
|
||||
obj-$(CONFIG_CMD_MEMTEST) += memtest.o
|
||||
obj-y += clock.o
|
||||
obj-$(CONFIG_BANNER) += version.o
|
||||
obj-$(CONFIG_MEMINFO) += meminfo.o
|
||||
obj-$(CONFIG_COMMAND_SUPPORT) += command.o
|
||||
obj-$(CONFIG_CONSOLE_FULL) += console.o
|
||||
obj-$(CONFIG_CONSOLE_SIMPLE) += console_simple.o
|
||||
obj-y += console_common.o
|
||||
obj-$(CONFIG_DIGEST) += digest.o
|
||||
obj-$(CONFIG_ENVIRONMENT_VARIABLES) += env.o
|
||||
obj-$(CONFIG_UIMAGE) += image.o
|
||||
obj-$(CONFIG_UIMAGE) += uimage.o
|
||||
obj-y += startup.o
|
||||
obj-y += misc.o
|
||||
obj-y += memsize.o
|
||||
obj-$(CONFIG_GLOBALVAR) += globalvar.o
|
||||
obj-$(CONFIG_RESET_SOURCE) += reset_source.o
|
||||
obj-$(CONFIG_FILETYPE) += filetype.o
|
||||
obj-y += resource.o
|
||||
obj-$(CONFIG_MENU) += menu.o
|
||||
obj-$(CONFIG_PASSWORD) += password.o
|
||||
obj-$(CONFIG_MODULES) += module.o
|
||||
obj-$(CONFIG_FLEXIBLE_BOOTARGS) += bootargs.o
|
||||
obj-$(CONFIG_BAREBOX_UPDATE) += bbu.o
|
||||
obj-y += bootsource.o
|
||||
obj-$(CONFIG_BOOTM) += bootm.o
|
||||
extra-$(CONFIG_MODULES) += module.lds
|
||||
extra-y += barebox_default_env barebox_default_env.h
|
||||
|
||||
ifdef CONFIG_DEFAULT_ENVIRONMENT
|
||||
$(obj)/startup.o: $(obj)/barebox_default_env.h
|
||||
$(obj)/env.o: $(obj)/barebox_default_env.h
|
||||
|
||||
ifeq ($(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW),y)
|
||||
DEFAULT_ENVIRONMENT_PATH = "defaultenv-2/base"
|
||||
ifeq ($(CONFIG_CMD_MENU_MANAGEMENT),y)
|
||||
DEFAULT_ENVIRONMENT_PATH += "defaultenv-2/menu"
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_DEFAULT_ENVIRONMENT_GENERIC),y)
|
||||
DEFAULT_ENVIRONMENT_PATH = "defaultenv"
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_DEFAULT_ENVIRONMENT_PATH),"")
|
||||
DEFAULT_ENVIRONMENT_PATH += $(CONFIG_DEFAULT_ENVIRONMENT_PATH)
|
||||
endif
|
||||
|
||||
ENV_FILES := $(shell cd $(srctree); for i in $(DEFAULT_ENVIRONMENT_PATH); do find $${i} -type f ; done)
|
||||
|
||||
endif # ifdef CONFIG_DEFAULT_ENVIRONMENT
|
||||
|
||||
#
|
||||
# Generate a barebox envfs image.
|
||||
#
|
||||
# echo $(ENV_FILES) > /dev/null is just for letting if_changed
|
||||
# recognize that something has changed when the environment has
|
||||
# other files,
|
||||
#
|
||||
quiet_cmd_env = ENV $@
|
||||
cmd_env = ($(srctree)/scripts/genenv $(srctree) $(objtree) $@ $(DEFAULT_ENVIRONMENT_PATH)) || \
|
||||
(echo $(ENV_FILES) > /dev/null; rm -f $@ ; false)
|
||||
|
||||
$(obj)/barebox_default_env: $(ENV_FILES) FORCE
|
||||
$(call if_changed,env)
|
||||
|
||||
barebox_default_env_comp =
|
||||
ifeq ($(CONFIG_DEFAULT_ENVIRONMENT_COMPRESSED_GZIP),y)
|
||||
barebox_default_env_comp = .gz
|
||||
endif
|
||||
ifeq ($(CONFIG_DEFAULT_ENVIRONMENT_COMPRESSED_BZIP2),y)
|
||||
barebox_default_env_comp = .bz2
|
||||
endif
|
||||
ifeq ($(CONFIG_DEFAULT_ENVIRONMENT_COMPRESSED_LZO),y)
|
||||
barebox_default_env_comp = .lzo
|
||||
endif
|
||||
|
||||
$(obj)/barebox_default_env.gz: $(obj)/barebox_default_env FORCE
|
||||
$(call if_changed,gzip)
|
||||
|
||||
$(obj)/barebox_default_env.bz2: $(obj)/barebox_default_env FORCE
|
||||
$(call if_changed,bzip2)
|
||||
|
||||
$(obj)/barebox_default_env.lzo: $(obj)/barebox_default_env FORCE
|
||||
$(call if_changed,lzo)
|
||||
|
||||
targets += barebox_default_env.lzo barebox_default_env.bz2 barebox_default_env.gz
|
||||
|
||||
quiet_cmd_env_h = ENVH $@
|
||||
cmd_env_h = cat $< | (cd $(obj) && $(objtree)/scripts/bin2c default_environment) > $@; \
|
||||
echo "static const int default_environment_uncompress_size=`stat -c%s $(obj)/barebox_default_env`;" >> $@
|
||||
|
||||
$(obj)/barebox_default_env.h: $(obj)/barebox_default_env$(barebox_default_env_comp) FORCE
|
||||
$(call if_changed,env_h)
|
||||
obj-$(CONFIG_PARTITION_DISK) += partitions.o partitions/
|
||||
obj-$(CONFIG_PASSWORD) += password.o
|
||||
obj-$(CONFIG_POLLER) += poller.o
|
||||
obj-$(CONFIG_RESET_SOURCE) += reset_source.o
|
||||
obj-$(CONFIG_SHELL_HUSH) += hush.o
|
||||
obj-$(CONFIG_SHELL_SIMPLE) += parser.o
|
||||
obj-$(CONFIG_UIMAGE) += image.o uimage.o
|
||||
|
||||
quiet_cmd_pwd_h = PWDH $@
|
||||
ifdef CONFIG_PASSWORD
|
||||
|
|
|
@ -162,7 +162,7 @@ out:
|
|||
* Note: This function will also be used on the host! See note in the header
|
||||
* of this file.
|
||||
*/
|
||||
int envfs_save(const char *filename, char *dirname)
|
||||
int envfs_save(const char *filename, const char *dirname)
|
||||
{
|
||||
struct envfs_super *super;
|
||||
int envfd, size, ret;
|
||||
|
@ -218,79 +218,53 @@ out1:
|
|||
}
|
||||
EXPORT_SYMBOL(envfs_save);
|
||||
|
||||
/**
|
||||
* Restore the last environment into the current one
|
||||
* @param[in] filename from where to restore
|
||||
* @param[in] dir where to store the last content
|
||||
* @return 0 on success, anything else in case of failure
|
||||
*
|
||||
* Note: This function will also be used on the host! See note in the header
|
||||
* of this file.
|
||||
*/
|
||||
int envfs_load(const char *filename, char *dir, unsigned flags)
|
||||
static int envfs_check_super(struct envfs_super *super, size_t *size)
|
||||
{
|
||||
if (ENVFS_32(super->magic) != ENVFS_MAGIC) {
|
||||
printf("envfs: wrong magic\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (crc32(0, super, sizeof(*super) - 4) != ENVFS_32(super->sb_crc)) {
|
||||
printf("wrong crc on env superblock\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (super->major < ENVFS_MAJOR)
|
||||
printf("envfs version %d.%d loaded into %d.%d\n",
|
||||
super->major, super->minor,
|
||||
ENVFS_MAJOR, ENVFS_MINOR);
|
||||
|
||||
*size = ENVFS_32(super->size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int envfs_check_data(struct envfs_super *super, const void *buf, size_t size)
|
||||
{
|
||||
uint32_t crc;
|
||||
|
||||
crc = crc32(0, buf, size);
|
||||
if (crc != ENVFS_32(super->crc)) {
|
||||
printf("wrong crc on env\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int envfs_load_data(void *buf, size_t size, const char *dir, unsigned flags)
|
||||
{
|
||||
struct envfs_super super;
|
||||
void *buf = NULL, *buf_free = NULL;
|
||||
int envfd;
|
||||
int fd, ret = 0;
|
||||
char *str, *tmp;
|
||||
int headerlen_full;
|
||||
unsigned long size;
|
||||
/* for envfs < 1.0 */
|
||||
struct envfs_inode_end inode_end_dummy;
|
||||
|
||||
inode_end_dummy.mode = ENVFS_32(S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
inode_end_dummy.magic = ENVFS_32(ENVFS_INODE_END_MAGIC);
|
||||
|
||||
envfd = open(filename, O_RDONLY);
|
||||
if (envfd < 0) {
|
||||
printf("Open %s %s\n", filename, errno_str());
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* read superblock */
|
||||
ret = read(envfd, &super, sizeof(struct envfs_super));
|
||||
if ( ret < sizeof(struct envfs_super)) {
|
||||
perror("read");
|
||||
ret = -errno;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if ( ENVFS_32(super.magic) != ENVFS_MAGIC) {
|
||||
printf("envfs: wrong magic on %s\n", filename);
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (crc32(0, (unsigned char *)&super, sizeof(struct envfs_super) - 4)
|
||||
!= ENVFS_32(super.sb_crc)) {
|
||||
printf("wrong crc on env superblock\n");
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
size = ENVFS_32(super.size);
|
||||
buf = xmalloc(size);
|
||||
buf_free = buf;
|
||||
ret = read(envfd, buf, size);
|
||||
if (ret < size) {
|
||||
perror("read");
|
||||
ret = -errno;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (crc32(0, (unsigned char *)buf, size)
|
||||
!= ENVFS_32(super.crc)) {
|
||||
printf("wrong crc on env\n");
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (super.major < ENVFS_MAJOR)
|
||||
printf("envfs version %d.%d loaded into %d.%d\n",
|
||||
super.major, super.minor,
|
||||
ENVFS_MAJOR, ENVFS_MINOR);
|
||||
|
||||
while (size) {
|
||||
struct envfs_inode *inode;
|
||||
struct envfs_inode_end *inode_end;
|
||||
|
@ -300,7 +274,7 @@ int envfs_load(const char *filename, char *dir, unsigned flags)
|
|||
buf += sizeof(struct envfs_inode);
|
||||
|
||||
if (ENVFS_32(inode->magic) != ENVFS_INODE_MAGIC) {
|
||||
printf("envfs: wrong magic on %s\n", filename);
|
||||
printf("envfs: wrong magic\n");
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
@ -324,7 +298,7 @@ int envfs_load(const char *filename, char *dir, unsigned flags)
|
|||
buf += headerlen_full;
|
||||
|
||||
if (ENVFS_32(inode_end->magic) != ENVFS_INODE_END_MAGIC) {
|
||||
printf("envfs: wrong inode_end_magic on %s\n", filename);
|
||||
printf("envfs: wrong inode_end_magic\n");
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
@ -368,11 +342,88 @@ skip:
|
|||
sizeof(struct envfs_inode);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int envfs_load_from_buf(void *buf, int len, const char *dir, unsigned flags)
|
||||
{
|
||||
int ret;
|
||||
size_t size;
|
||||
struct envfs_super *super = buf;
|
||||
|
||||
buf = super + 1;
|
||||
|
||||
ret = envfs_check_super(super, &size);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = envfs_check_data(super, buf, size);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = envfs_load_data(buf, size, dir, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the last environment into the current one
|
||||
* @param[in] filename from where to restore
|
||||
* @param[in] dir where to store the last content
|
||||
* @return 0 on success, anything else in case of failure
|
||||
*
|
||||
* Note: This function will also be used on the host! See note in the header
|
||||
* of this file.
|
||||
*/
|
||||
int envfs_load(const char *filename, const char *dir, unsigned flags)
|
||||
{
|
||||
struct envfs_super super;
|
||||
void *buf = NULL;
|
||||
int envfd;
|
||||
int ret = 0;
|
||||
size_t size;
|
||||
|
||||
envfd = open(filename, O_RDONLY);
|
||||
if (envfd < 0) {
|
||||
printf("Open %s %s\n", filename, errno_str());
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* read superblock */
|
||||
ret = read(envfd, &super, sizeof(struct envfs_super));
|
||||
if ( ret < sizeof(struct envfs_super)) {
|
||||
perror("read");
|
||||
ret = -errno;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = envfs_check_super(&super, &size);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
buf = xmalloc(size);
|
||||
ret = read(envfd, buf, size);
|
||||
if (ret < size) {
|
||||
perror("read");
|
||||
ret = -errno;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = envfs_check_data(&super, buf, size);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = envfs_load_data(buf, size, dir, flags);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = 0;
|
||||
out:
|
||||
close(envfd);
|
||||
if (buf_free)
|
||||
free(buf_free);
|
||||
free(buf);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <fs.h>
|
||||
#include <malloc.h>
|
||||
#include <errno.h>
|
||||
#include <envfs.h>
|
||||
|
||||
struct filetype_str {
|
||||
const char *name; /* human readable filetype */
|
||||
|
@ -51,6 +52,7 @@ static const struct filetype_str filetype_str[] = {
|
|||
[filetype_ext] = { "ext filesystem", "ext" },
|
||||
[filetype_gpt] = { "GUID Partition Table", "gpt" },
|
||||
[filetype_bpk] = { "Binary PacKage", "bpk" },
|
||||
[filetype_barebox_env] = { "barebox environment file", "bbenv" },
|
||||
};
|
||||
|
||||
const char *file_type_to_string(enum filetype f)
|
||||
|
@ -188,6 +190,8 @@ enum filetype file_detect_type(const void *_buf, size_t bufsize)
|
|||
|
||||
if (strncmp(buf8, "#!/bin/sh", 9) == 0)
|
||||
return filetype_sh;
|
||||
if (buf[0] == ENVFS_32(ENVFS_MAGIC))
|
||||
return filetype_barebox_env;
|
||||
|
||||
if (bufsize < 32)
|
||||
return filetype_unknown;
|
||||
|
|
|
@ -44,48 +44,6 @@
|
|||
extern initcall_t __barebox_initcalls_start[], __barebox_early_initcalls_end[],
|
||||
__barebox_initcalls_end[];
|
||||
|
||||
#ifdef CONFIG_DEFAULT_ENVIRONMENT
|
||||
#include "barebox_default_env.h"
|
||||
|
||||
static int register_default_env(void)
|
||||
{
|
||||
int ret;
|
||||
void *defaultenv;
|
||||
|
||||
if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_COMPRESSED)) {
|
||||
void *tmp = malloc(default_environment_size);
|
||||
|
||||
if (!tmp)
|
||||
return -ENOMEM;
|
||||
|
||||
memcpy(tmp, default_environment, default_environment_size);
|
||||
|
||||
defaultenv = xzalloc(default_environment_uncompress_size);
|
||||
|
||||
ret = uncompress(tmp, default_environment_size,
|
||||
NULL, NULL,
|
||||
defaultenv, NULL, uncompress_err_stdout);
|
||||
|
||||
free(tmp);
|
||||
|
||||
if (ret) {
|
||||
free(defaultenv);
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
defaultenv = (void *)default_environment;
|
||||
}
|
||||
|
||||
|
||||
add_mem_device("defaultenv", (unsigned long)defaultenv,
|
||||
default_environment_uncompress_size,
|
||||
IORESOURCE_MEM_WRITEABLE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
device_initcall(register_default_env);
|
||||
#endif
|
||||
|
||||
#if defined CONFIG_FS_RAMFS && defined CONFIG_FS_DEVFS
|
||||
static int mount_root(void)
|
||||
{
|
||||
|
@ -129,7 +87,7 @@ void __noreturn start_barebox(void)
|
|||
pr_err("no valid environment found on %s. "
|
||||
"Using default environment\n",
|
||||
default_environment_path);
|
||||
envfs_load("/dev/defaultenv", "/env", 0);
|
||||
defaultenv_load("/env", 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW) += defaultenv-2-base
|
||||
bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_MENU) += defaultenv-2-menu
|
||||
bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_DFU) += defaultenv-2-dfu
|
||||
bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-1
|
||||
obj-$(CONFIG_DEFAULT_ENVIRONMENT) += defaultenv.o
|
||||
extra-y += barebox_default_env barebox_default_env.h barebox_default_env$(DEFAULT_COMPRESSION_SUFFIX)
|
||||
|
||||
$(obj)/defaultenv.o: $(obj)/barebox_default_env.h
|
||||
|
||||
#
|
||||
# Generate a barebox envfs image.
|
||||
#
|
||||
quiet_cmd_env_default = ENV $@
|
||||
cmd_env_default = ($(srctree)/scripts/genenv $(srctree) $(objtree) $@ $(CONFIG_DEFAULT_ENVIRONMENT_PATH))
|
||||
|
||||
$(obj)/barebox_default_env: FORCE
|
||||
$(call cmd,env_default)
|
||||
|
||||
quiet_cmd_env_h = ENVH $@
|
||||
cmd_env_h = cat $< | (cd $(obj) && $(objtree)/scripts/bin2c "__aligned(4) default_environment") > $@; \
|
||||
echo "static const int default_environment_uncompress_size=`stat -c%s $(obj)/barebox_default_env`;" >> $@
|
||||
|
||||
$(obj)/barebox_default_env.h: $(obj)/barebox_default_env$(DEFAULT_COMPRESSION_SUFFIX) FORCE
|
||||
$(call if_changed,env_h)
|
|
@ -0,0 +1,39 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ "$1" = menu ]; then
|
||||
boot-menu-add-entry "$0" "Device Firmware upgrade (DFU)"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ -d /dfutmp ]; then
|
||||
rm -r /dfutmp
|
||||
fi
|
||||
|
||||
mkdir -p /dfutmp
|
||||
|
||||
kernel="/dfutmp/kernel"
|
||||
dtb="/dfutmp/dtb"
|
||||
cmdline="/dfutmp/cmdline"
|
||||
|
||||
global.bootm.image="$kernel"
|
||||
|
||||
dfu $kernel(kernel)c,$dtb(dtb)c,$cmdline(cmdline)c
|
||||
if [ $? != 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$kernel" ]; then
|
||||
echo "No kernel uploaded. Aborting"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f "$cmdline" ]; then
|
||||
global linux.bootargs.dyn.dfu
|
||||
readf $cmdline global.linux.bootargs.dyn.dfu
|
||||
fi
|
||||
|
||||
if [ -f "$dtb" ]; then
|
||||
global.bootm.oftree="$dtb"
|
||||
fi
|
||||
|
||||
true
|
|
@ -0,0 +1,151 @@
|
|||
/*
|
||||
* Copyright (C) 2014 Sascha Hauer, Pengutronix
|
||||
*
|
||||
* See file CREDITS for list of people who contributed to this
|
||||
* project.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <envfs.h>
|
||||
#include <filetype.h>
|
||||
#include <uncompress.h>
|
||||
#include <malloc.h>
|
||||
#include <init.h>
|
||||
#include <asm/unaligned.h>
|
||||
#include "barebox_default_env.h"
|
||||
|
||||
static LIST_HEAD(defaultenv_list);
|
||||
|
||||
struct defaultenv {
|
||||
struct list_head list;
|
||||
const char *name;
|
||||
void *buf;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
static void defaultenv_add_base(void)
|
||||
{
|
||||
static int base_added;
|
||||
|
||||
if (base_added)
|
||||
return;
|
||||
|
||||
base_added = 1;
|
||||
|
||||
if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW))
|
||||
defaultenv_append_directory(defaultenv_2_base);
|
||||
if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_MENU))
|
||||
defaultenv_append_directory(defaultenv_2_menu);
|
||||
if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW_DFU))
|
||||
defaultenv_append_directory(defaultenv_2_dfu);
|
||||
if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC))
|
||||
defaultenv_append_directory(defaultenv_1);
|
||||
|
||||
/*
|
||||
* The traditional environment given with CONFIG_DEFAULT_ENVIRONMENT_PATH.
|
||||
* Once all users are converted to bbenv-y this can go.
|
||||
*/
|
||||
defaultenv_append((void *)default_environment,
|
||||
default_environment_size, "defaultenv");
|
||||
}
|
||||
|
||||
/*
|
||||
* defaultenv_append - append a envfs buffer to the default environment
|
||||
* @buf: The buffer containing the binary environment. If it is
|
||||
* not a plain buffer it is assumed to be a compressed buffer.
|
||||
* @size: The length of the buffer
|
||||
*
|
||||
* This adds an overlay to the default environment. New files will be created,
|
||||
* existing files will be overwritten with the overlay.
|
||||
*/
|
||||
void defaultenv_append(void *buf, unsigned int size, const char *name)
|
||||
{
|
||||
struct defaultenv *df;
|
||||
|
||||
defaultenv_add_base();
|
||||
|
||||
df = xzalloc(sizeof(*df));
|
||||
df->buf = buf;
|
||||
df->size = size;
|
||||
df->name = name;
|
||||
|
||||
list_add_tail(&df->list, &defaultenv_list);
|
||||
}
|
||||
|
||||
static int defaultenv_load_one(struct defaultenv *df, const char *dir,
|
||||
unsigned flags)
|
||||
{
|
||||
void *freep = NULL;
|
||||
void *buf;
|
||||
enum filetype ft = file_detect_type(df->buf, df->size);
|
||||
uint32_t size;
|
||||
int ret;
|
||||
|
||||
pr_debug("loading %s\n", df->name);
|
||||
|
||||
if (!IS_ENABLED(CONFIG_DEFAULT_COMPRESSION_NONE) &&
|
||||
ft != filetype_barebox_env) {
|
||||
size = get_unaligned_le32(df->buf + df->size - 4);
|
||||
freep = malloc(size);
|
||||
if (!freep)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = uncompress(df->buf, df->size,
|
||||
NULL, NULL,
|
||||
freep, NULL, uncompress_err_stdout);
|
||||
if (ret) {
|
||||
free(freep);
|
||||
pr_err("Failed to uncompress: %s\n", strerror(-ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
buf = freep;
|
||||
} else {
|
||||
buf = df->buf;
|
||||
size = df->size;
|
||||
}
|
||||
|
||||
ret = envfs_load_from_buf(buf, size, dir, flags);
|
||||
|
||||
free(freep);
|
||||
|
||||
if (ret)
|
||||
pr_err("Failed to load defaultenv: %s\n", strerror(-ret));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* defaultenv_load - load the default environment
|
||||
* @dir: The directory the default environment should be loaded to.
|
||||
*
|
||||
* This loads all environment snippets previously registered with
|
||||
* defaultenv_append to the directory given with @dir.
|
||||
*
|
||||
* Return: 0 for success, negative error code otherwise.
|
||||
*/
|
||||
int defaultenv_load(const char *dir, unsigned flags)
|
||||
{
|
||||
struct defaultenv *df;
|
||||
int ret;
|
||||
|
||||
defaultenv_add_base();
|
||||
|
||||
list_for_each_entry(df, &defaultenv_list, list) {
|
||||
ret = defaultenv_load_one(df, dir, flags);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -244,10 +244,14 @@ static int handle_dnload(struct usb_function *f, const struct usb_ctrlrequest *c
|
|||
|
||||
if (w_length == 0) {
|
||||
dfu->dfu_state = DFU_STATE_dfuIDLE;
|
||||
if (dfu_devs[dfualt].flags & DFU_FLAG_SAVE) {
|
||||
if (dfu_devs[dfualt].flags & DFU_FLAG_SAFE) {
|
||||
int fd;
|
||||
unsigned flags = O_WRONLY;
|
||||
|
||||
fd = open(dfu_devs[dfualt].dev, O_WRONLY);
|
||||
if (dfu_devs[dfualt].flags & DFU_FLAG_CREATE)
|
||||
flags |= O_CREAT | O_TRUNC;
|
||||
|
||||
fd = open(dfu_devs[dfualt].dev, flags);
|
||||
if (fd < 0) {
|
||||
perror("open");
|
||||
ret = -EINVAL;
|
||||
|
@ -376,10 +380,16 @@ static int dfu_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
|
|||
goto out;
|
||||
}
|
||||
debug("dfu: starting download to %s\n", dfu_devs[dfualt].dev);
|
||||
if (dfu_devs[dfualt].flags & DFU_FLAG_SAVE)
|
||||
if (dfu_devs[dfualt].flags & DFU_FLAG_SAFE) {
|
||||
dfufd = open(DFU_TEMPFILE, O_WRONLY | O_CREAT);
|
||||
else
|
||||
dfufd = open(dfu_devs[dfualt].dev, O_WRONLY);
|
||||
} else {
|
||||
unsigned flags = O_WRONLY;
|
||||
|
||||
if (dfu_devs[dfualt].flags & DFU_FLAG_CREATE)
|
||||
flags |= O_CREAT | O_TRUNC;
|
||||
|
||||
dfufd = open(dfu_devs[dfualt].dev, flags);
|
||||
}
|
||||
|
||||
if (dfufd < 0) {
|
||||
dfu->dfu_state = DFU_STATE_dfuERROR;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#ifdef __BAREBOX__
|
||||
#include <asm/byteorder.h>
|
||||
#include <linux/stringify.h>
|
||||
#endif
|
||||
|
||||
#define ENVFS_MAJOR 1
|
||||
|
@ -90,8 +91,9 @@ struct envfs_super {
|
|||
#endif
|
||||
|
||||
#define ENV_FLAG_NO_OVERWRITE (1 << 0)
|
||||
int envfs_load(const char *filename, char *dirname, unsigned flags);
|
||||
int envfs_save(const char *filename, char *dirname);
|
||||
int envfs_load(const char *filename, const char *dirname, unsigned flags);
|
||||
int envfs_save(const char *filename, const char *dirname);
|
||||
int envfs_load_from_buf(void *buf, int len, const char *dir, unsigned flags);
|
||||
|
||||
/* defaults to /dev/env0 */
|
||||
#ifdef CONFIG_ENV_HANDLING
|
||||
|
@ -110,4 +112,34 @@ static inline char *default_environment_path_get(void)
|
|||
|
||||
int envfs_register_partition(const char *devname, unsigned int partnr);
|
||||
|
||||
#ifdef CONFIG_DEFAULT_ENVIRONMENT
|
||||
void defaultenv_append(void *buf, unsigned int size, const char *name);
|
||||
int defaultenv_load(const char *dir, unsigned flags);
|
||||
#else
|
||||
static inline void defaultenv_append(void *buf, unsigned int size, const char *name)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int defaultenv_load(const char *dir, unsigned flags)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Append environment directory compiled into barebox with bbenv-y
|
||||
* to the default environment. The symbol is generated from the filename
|
||||
* during the build process. Replace '-' with '_' to get the name
|
||||
* from the filename.
|
||||
*/
|
||||
#define defaultenv_append_directory(name) \
|
||||
{ \
|
||||
extern char __bbenv_##name##_start[]; \
|
||||
extern char __bbenv_##name##_end[]; \
|
||||
defaultenv_append(__bbenv_##name##_start, \
|
||||
__bbenv_##name##_end - \
|
||||
__bbenv_##name##_start, \
|
||||
__stringify(name)); \
|
||||
}
|
||||
|
||||
#endif /* _ENVFS_H */
|
||||
|
|
|
@ -29,6 +29,7 @@ enum filetype {
|
|||
filetype_gpt,
|
||||
filetype_ubifs,
|
||||
filetype_bpk,
|
||||
filetype_barebox_env,
|
||||
filetype_max,
|
||||
};
|
||||
|
||||
|
|
|
@ -22,8 +22,9 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define DFU_FLAG_SAVE (1 << 0)
|
||||
#define DFU_FLAG_SAFE (1 << 0)
|
||||
#define DFU_FLAG_READBACK (1 << 1)
|
||||
#define DFU_FLAG_CREATE (1 << 2)
|
||||
|
||||
struct usb_dfu_dev {
|
||||
char *name;
|
||||
|
|
|
@ -98,6 +98,7 @@ multi-objs-y := $(addprefix $(obj)/,$(multi-objs-y))
|
|||
multi-objs-m := $(addprefix $(obj)/,$(multi-objs-m))
|
||||
subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
|
||||
obj-dirs := $(addprefix $(obj)/,$(obj-dirs))
|
||||
bbenv-y := $(addprefix $(obj)/,$(bbenv-y))
|
||||
|
||||
# These flags are needed for modversions and compiling, so we define them here
|
||||
# already
|
||||
|
@ -193,6 +194,9 @@ quiet_cmd_gzip = GZIP $@
|
|||
cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -n -f -9 > $@) || \
|
||||
(rm -f $@ ; false)
|
||||
|
||||
%.gz: %
|
||||
$(call if_changed,gzip)
|
||||
|
||||
# DTC
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
@ -226,6 +230,34 @@ $(obj)/%.dtb: $(src)/%.dts FORCE
|
|||
|
||||
dtc-tmp = $(subst $(comma),_,$(dot-target).dts)
|
||||
|
||||
obj-y += $(patsubst %,%.bbenv$(DEFAULT_COMPRESSION_SUFFIX).o,$(bbenv-y))
|
||||
extra-y += $(patsubst %,%.bbenv$(DEFAULT_COMPRESSION_SUFFIX),$(bbenv-y))
|
||||
extra-y += $(patsubst %,%.bbenv$(DEFAULT_COMPRESSION_SUFFIX).S,$(bbenv-y))
|
||||
extra-y += $(patsubst %,%.bbenv$(DEFAULT_COMPRESSION_SUFFIX).o,$(bbenv-y))
|
||||
|
||||
quiet_cmd_env_S = ENV.S $@
|
||||
cmd_env_S = \
|
||||
( \
|
||||
echo '\#include <asm-generic/barebox.lds.h>'; \
|
||||
echo '.section .bbenv.rodata.$(subst -,_,$(*F)),"a"'; \
|
||||
echo '.balign STRUCT_ALIGNMENT'; \
|
||||
echo '.global __bbenv_$(subst -,_,$(*F))_start'; \
|
||||
echo '__bbenv_$(subst -,_,$(*F))_start:'; \
|
||||
echo '.incbin "$<" '; \
|
||||
echo '__bbenv_$(subst -,_,$(*F))_end:'; \
|
||||
echo '.global __bbenv_$(subst -,_,$(*F))_end'; \
|
||||
echo '.balign STRUCT_ALIGNMENT'; \
|
||||
) > $@
|
||||
|
||||
$(obj)/%.bbenv$(DEFAULT_COMPRESSION_SUFFIX).S: $(src)/%.bbenv$(DEFAULT_COMPRESSION_SUFFIX) FORCE
|
||||
$(call if_changed,env_S)
|
||||
|
||||
quiet_cmd_env = ENV $@
|
||||
cmd_env=$(srctree)/scripts/genenv $(srctree) $(objtree) $@ $<
|
||||
|
||||
%.bbenv$(DEFAULT_COMPRESSION_SUFFIX): % FORCE
|
||||
$(call cmd,env)
|
||||
|
||||
# Bzip2
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
@ -251,6 +283,9 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^) | \
|
|||
bzip2 -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
|
||||
(rm -f $@ ; false)
|
||||
|
||||
%.bz2: %
|
||||
$(call if_changed,bzip2)
|
||||
|
||||
# Lzma
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
@ -259,11 +294,17 @@ cmd_lzma = (cat $(filter-out FORCE,$^) | \
|
|||
lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
|
||||
(rm -f $@ ; false)
|
||||
|
||||
%.lzma: %
|
||||
$(call if_changed,lzma)
|
||||
|
||||
quiet_cmd_lzo = LZO $@
|
||||
cmd_lzo = (cat $(filter-out FORCE,$^) | \
|
||||
lzop -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
|
||||
(rm -f $@ ; false)
|
||||
|
||||
%.lzo: %
|
||||
$(call if_changed,lzo)
|
||||
|
||||
# XZ
|
||||
# ---------------------------------------------------------------------------
|
||||
# Use xzkern to compress the kernel image and xzmisc to compress other things.
|
||||
|
@ -292,11 +333,17 @@ cmd_xzmisc = (cat $(filter-out FORCE,$^) | \
|
|||
xz --check=crc32 --lzma2=dict=1MiB) > $@ || \
|
||||
(rm -f $@ ; false)
|
||||
|
||||
# lz4
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
quiet_cmd_lz4 = LZ4 $@
|
||||
cmd_lz4 = (cat $(filter-out FORCE,$^) | \
|
||||
lz4c -l -c1 stdin stdout && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
|
||||
(rm -f $@ ; false)
|
||||
|
||||
%.lz4: %
|
||||
$(call if_changed,lz4)
|
||||
|
||||
quiet_cmd_disasm = DISASM $@
|
||||
cmd_disasm = $(OBJDUMP) -d $< > $@
|
||||
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
#!/bin/bash
|
||||
|
||||
DEVICETREE=
|
||||
KERNEL=
|
||||
CMDLINE=
|
||||
|
||||
usage() {
|
||||
echo "usage: $0 [OPTIONS]"
|
||||
echo "This script uploads a kernel and optionally a devicetree"
|
||||
echo "and a kernel commandline to barebox via DFU running the"
|
||||
echo "'boot dfu' command."
|
||||
echo "OPTIONS:"
|
||||
echo " -k <kernel> kernelimage to upload"
|
||||
echo " -d <dtb> devicetree binary blob to upload"
|
||||
echo " -c \"cmdline\" kernel commandline"
|
||||
echo " -h This help text"
|
||||
|
||||
exit 0
|
||||
}
|
||||
|
||||
while getopts "k:d:c:h" opt
|
||||
do
|
||||
case "$opt" in
|
||||
h)
|
||||
usage
|
||||
;;
|
||||
d)
|
||||
DEVICETREE="$OPTARG"
|
||||
;;
|
||||
k)
|
||||
KERNEL="$OPTARG"
|
||||
;;
|
||||
c)
|
||||
CMDLINE="$OPTARG"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
dfu-util -D "${KERNEL}" -a kernel
|
||||
if [ $? != 0 ]; then
|
||||
echo "Failed to upload kernel"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "$DEVICETREE" ]; then
|
||||
dfu-util -D "${DEVICETREE}" -a dtb
|
||||
if [ $? != 0 ]; then
|
||||
echo "Failed to upload devicetree"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$CMDLINE" ]; then
|
||||
cmdlinefile=$(mktemp)
|
||||
|
||||
echo -e "$CMDLINE" > "${cmdlinefile}"
|
||||
|
||||
dfu-util -D "${cmdlinefile}" -a cmdline -R
|
||||
result=$?
|
||||
|
||||
rm -f "${cmdlinefile}"
|
||||
|
||||
if [ $result != 0 ]; then
|
||||
echo "Failed to upload cmdline"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
|
@ -10,7 +10,8 @@ basedir=$1
|
|||
target=$3
|
||||
shift 3
|
||||
|
||||
tempdir="$objtree/.barebox_default_env"
|
||||
tempdir="${target}.genenv.tmp"
|
||||
tmpfile="$(mktemp)"
|
||||
|
||||
mkdir -p "$tempdir"
|
||||
|
||||
|
@ -26,6 +27,13 @@ done
|
|||
|
||||
find $tempdir -name '.svn' -o -name '*~' -delete
|
||||
|
||||
$objtree/scripts/bareboxenv -s $tempdir $target
|
||||
$objtree/scripts/bareboxenv -s $tempdir ${tmpfile}
|
||||
|
||||
diff "${tmpfile}" "${target}" >/dev/null 2>/dev/null
|
||||
if [ $? != 0 ]; then
|
||||
mv "${tmpfile}" "${target}"
|
||||
else
|
||||
rm ${tmpfile}
|
||||
fi
|
||||
|
||||
rm -r $tempdir
|
||||
|
|
Loading…
Reference in New Issue