summaryrefslogtreecommitdiffstats
path: root/defaultenv
diff options
context:
space:
mode:
Diffstat (limited to 'defaultenv')
-rw-r--r--defaultenv/Makefile24
-rw-r--r--defaultenv/defaultenv-1/bin/_boot_help (renamed from defaultenv/bin/_boot_help)0
-rw-r--r--defaultenv/defaultenv-1/bin/_update (renamed from defaultenv/bin/_update)0
-rw-r--r--defaultenv/defaultenv-1/bin/_update_help (renamed from defaultenv/bin/_update_help)0
-rw-r--r--defaultenv/defaultenv-1/bin/boot (renamed from defaultenv/bin/boot)0
-rw-r--r--defaultenv/defaultenv-1/bin/init (renamed from defaultenv/bin/init)0
-rw-r--r--defaultenv/defaultenv-1/bin/update (renamed from defaultenv/bin/update)0
-rw-r--r--defaultenv/defaultenv-1/config (renamed from defaultenv/config)0
-rw-r--r--defaultenv/defaultenv-2-base/bin/bootargs-ip11
-rw-r--r--defaultenv/defaultenv-2-base/bin/init80
-rw-r--r--defaultenv/defaultenv-2-base/bin/mtdparts-add49
-rw-r--r--defaultenv/defaultenv-2-base/boot/net19
-rw-r--r--defaultenv/defaultenv-2-base/config25
-rw-r--r--defaultenv/defaultenv-2-base/data/ansi-colors30
-rw-r--r--defaultenv/defaultenv-2-base/data/boot-template14
-rw-r--r--defaultenv/defaultenv-2-base/init/automount22
-rw-r--r--defaultenv/defaultenv-2-base/init/ps17
-rw-r--r--defaultenv/defaultenv-2-base/network/eth016
-rw-r--r--defaultenv/defaultenv-2-dfu/boot/dfu39
-rw-r--r--defaultenv/defaultenv-2-menu/menu/boot-entries-collect13
-rw-r--r--defaultenv/defaultenv-2-menu/menu/boot-entries-edit20
-rw-r--r--defaultenv/defaultenv-2-menu/menu/boot-entries-remove18
-rw-r--r--defaultenv/defaultenv-2-menu/menu/boot-menu-add-entry5
-rw-r--r--defaultenv/defaultenv-2-menu/menu/boot-menu-new-boot-entry21
-rw-r--r--defaultenv/defaultenv-2-menu/menu/init-entries-collect9
-rw-r--r--defaultenv/defaultenv-2-menu/menu/init-entries-edit20
-rw-r--r--defaultenv/defaultenv-2-menu/menu/init-menu-add-entry3
-rw-r--r--defaultenv/defaultenv-2-menu/menu/mainmenu23
-rw-r--r--defaultenv/defaultenv-2-menu/menu/settings21
-rw-r--r--defaultenv/defaultenv.c151
30 files changed, 640 insertions, 0 deletions
diff --git a/defaultenv/Makefile b/defaultenv/Makefile
new file mode 100644
index 0000000000..fc679ebc9c
--- /dev/null
+++ b/defaultenv/Makefile
@@ -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)
diff --git a/defaultenv/bin/_boot_help b/defaultenv/defaultenv-1/bin/_boot_help
index a07e4e0135..a07e4e0135 100644
--- a/defaultenv/bin/_boot_help
+++ b/defaultenv/defaultenv-1/bin/_boot_help
diff --git a/defaultenv/bin/_update b/defaultenv/defaultenv-1/bin/_update
index 8e27ee10c6..8e27ee10c6 100644
--- a/defaultenv/bin/_update
+++ b/defaultenv/defaultenv-1/bin/_update
diff --git a/defaultenv/bin/_update_help b/defaultenv/defaultenv-1/bin/_update_help
index b41e288ba0..b41e288ba0 100644
--- a/defaultenv/bin/_update_help
+++ b/defaultenv/defaultenv-1/bin/_update_help
diff --git a/defaultenv/bin/boot b/defaultenv/defaultenv-1/bin/boot
index c17ccdb8f5..c17ccdb8f5 100644
--- a/defaultenv/bin/boot
+++ b/defaultenv/defaultenv-1/bin/boot
diff --git a/defaultenv/bin/init b/defaultenv/defaultenv-1/bin/init
index adb3c43a66..adb3c43a66 100644
--- a/defaultenv/bin/init
+++ b/defaultenv/defaultenv-1/bin/init
diff --git a/defaultenv/bin/update b/defaultenv/defaultenv-1/bin/update
index 1578789a56..1578789a56 100644
--- a/defaultenv/bin/update
+++ b/defaultenv/defaultenv-1/bin/update
diff --git a/defaultenv/config b/defaultenv/defaultenv-1/config
index 391ba47c18..391ba47c18 100644
--- a/defaultenv/config
+++ b/defaultenv/defaultenv-1/config
diff --git a/defaultenv/defaultenv-2-base/bin/bootargs-ip b/defaultenv/defaultenv-2-base/bin/bootargs-ip
new file mode 100644
index 0000000000..2d4486caf8
--- /dev/null
+++ b/defaultenv/defaultenv-2-base/bin/bootargs-ip
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# pass either static ip or dhcp to kernel based on barebox settings
+
+. /env/network/eth0
+
+if [ $ip = dhcp ]; then
+ global.linux.bootargs.dyn.ip="ip=dhcp"
+else
+ global.linux.bootargs.dyn.ip="ip=$ipaddr:$serverip:$gateway:$netmask::eth0:"
+fi
diff --git a/defaultenv/defaultenv-2-base/bin/init b/defaultenv/defaultenv-2-base/bin/init
new file mode 100644
index 0000000000..3a0e93b49d
--- /dev/null
+++ b/defaultenv/defaultenv-2-base/bin/init
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+export PATH=/env/bin
+
+global hostname
+global user
+global autoboot_timeout
+global boot.default
+global allow_color
+global linux.bootargs.base
+global linux.bootargs.console
+#linux.bootargs.dyn.* will be cleared at the beginning of boot
+global linux.bootargs.dyn.ip
+global linux.bootargs.dyn.root
+global editcmd
+
+[ -z "${global.hostname}" ] && global.hostname=generic
+[ -z "${global.user}" ] && global.user=none
+[ -z "${global.autoboot_timeout}" ] && global.autoboot_timeout=3
+[ -z "${global.boot.default}" ] && global.boot.default=net
+[ -z "${global.allow_color}" ] && global.allow_color=true
+[ -z "${global.editcmd}" ] && global.editcmd=sedit
+
+[ -e /env/config-board ] && /env/config-board
+/env/config
+
+# request password to login if a timeout is specified and password set
+if [ -n ${global.login.timeout} ]; then
+ [ ${global.login.timeout} -gt 0 ] && login_cmd=login
+fi
+# allow the input if not
+[ -n ${global.console.input_allow} ] && global.console.input_allow=1
+
+# allow to stop the boot before execute the /env/init/*
+# but without waiting
+timeout -s -a -v key 0
+
+if [ "${key}" = "q" ]; then
+ ${login_cmd}
+ exit
+fi
+
+[ -n ${login_cmd} ] && global.console.input_allow=0
+
+for i in /env/init/*; do
+ . $i
+done
+
+if [ -e /env/menu ]; then
+ echo -e -n "\nHit m for menu or any other key to stop autoboot: "
+else
+ echo -e -n "\nHit any key to stop autoboot: "
+fi
+
+[ -n ${login_cmd} ] && global.console.input_allow=1
+
+timeout -a $global.autoboot_timeout -v key
+autoboot="$?"
+
+[ -n ${login_cmd} ] && global.console.input_allow=0
+
+if [ "${key}" = "q" ]; then
+ ${login_cmd}
+ exit
+fi
+
+if [ "$autoboot" = 0 ]; then
+ boot
+fi
+
+if [ -e /env/menu ]; then
+ ${login_cmd}
+ if [ "${key}" != "m" ]; then
+ echo -e "\ntype exit to get to the menu"
+ sh
+ fi
+ /env/menu/mainmenu
+fi
+
+${login_cmd}
diff --git a/defaultenv/defaultenv-2-base/bin/mtdparts-add b/defaultenv/defaultenv-2-base/bin/mtdparts-add
new file mode 100644
index 0000000000..58c9fa7a21
--- /dev/null
+++ b/defaultenv/defaultenv-2-base/bin/mtdparts-add
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+mkdir -p /tmp/mtdparts
+
+parts=
+device=
+kernelname=
+bbdev=
+
+while getopt "p:d:k:b" opt; do
+ if [ ${opt} = p ]; then
+ parts=${OPTARG}
+ elif [ ${opt} = d ]; then
+ device=${OPTARG}
+ elif [ ${opt} = k ]; then
+ kernelname=${OPTARG}
+ elif [ ${opt} = b ]; then
+ bbdev=true
+ fi
+done
+
+if [ -z "${device}" ]; then
+ echo "$0: no device given"
+ exit
+fi
+
+if [ -z "${parts}" ]; then
+ echo "$0: no partitions given"
+ exit
+fi
+
+if [ -e /tmp/mtdparts/${device} ]; then
+ if [ -n "/dev/${device}.*.bb" ]; then
+ nand -d /dev/${device}.*.bb
+ fi
+ delpart /dev/${device}.*
+fi
+
+addpart -n /dev/${device} "$parts" || exit
+mkdir -p /tmp/mtdparts/${device}
+
+if [ -n "${bbdev}" ]; then
+ nand -a /dev/${device}.*
+fi
+
+if [ -n ${kernelname} ]; then
+ global linux.mtdparts.${device}
+ global.linux.mtdparts.${device}="${kernelname}:${parts}"
+fi
diff --git a/defaultenv/defaultenv-2-base/boot/net b/defaultenv/defaultenv-2-base/boot/net
new file mode 100644
index 0000000000..05bb728fa1
--- /dev/null
+++ b/defaultenv/defaultenv-2-base/boot/net
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+if [ "$1" = menu ]; then
+ boot-menu-add-entry "$0" "network (tftp, nfs)"
+ exit
+fi
+
+path="/mnt/tftp"
+
+global.bootm.image="${path}/${global.user}-linux-${global.hostname}"
+
+oftree="${path}/${global.user}-oftree-${global.hostname}"
+if [ -f "${oftree}" ]; then
+ global.bootm.oftree="$oftree"
+fi
+
+nfsroot="/home/${global.user}/nfsroot/${global.hostname}"
+bootargs-ip
+global.linux.bootargs.dyn.root="root=/dev/nfs nfsroot=$nfsroot,v3,tcp"
diff --git a/defaultenv/defaultenv-2-base/config b/defaultenv/defaultenv-2-base/config
new file mode 100644
index 0000000000..784ae52b80
--- /dev/null
+++ b/defaultenv/defaultenv-2-base/config
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# change network settings in /env/network/eth0
+# change mtd partition settings and automountpoints in /env/init/*
+
+#global.hostname=
+
+# set to false if you do not want to have colors
+#global.allow_color=true
+
+# user (used for network filenames)
+#global.user=none
+
+# timeout in seconds before the default boot entry is started
+#global.autoboot_timeout=3
+
+# list of boot entries. These are executed in order until one
+# succeeds. An entry can be:
+# - a filename in /env/boot/
+# - a full path to a directory. All files in this directory are
+# treated as boot files and executed in alphabetical order
+#global.boot.default=net
+
+# base bootargs
+#global.linux.bootargs.base="console=ttyS0,115200"
diff --git a/defaultenv/defaultenv-2-base/data/ansi-colors b/defaultenv/defaultenv-2-base/data/ansi-colors
new file mode 100644
index 0000000000..636532979a
--- /dev/null
+++ b/defaultenv/defaultenv-2-base/data/ansi-colors
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+if [ ${global.allow_color} != "true" ]; then
+ exit
+fi
+
+# Colors
+export RED='\e[1;31m'
+export BLUE='\e[1;34m'
+export GREEN='\e[1;32m'
+export CYAN='\e[1;36m'
+export YELLOW='\e[1;33m'
+export PINK='\e[1;35m'
+export WHITE='\e[1;37m'
+
+export DARK_RED='\e[2;31m'
+export DARK_BLUE='\e[2;34m'
+export DARK_GREEN='\e[2;32m'
+export DARK_CYAN='\e[2;36m'
+export DARK_YELLOW='\e[2;33m'
+export DARK_PINK='\e[2;35m'
+export DARK_WHITE='\e[2;37m'
+
+export RED_INV='\e[1;41m'
+export BLUE_INV='\e[1;44m'
+export GREEN_INV='\e[1;42m'
+export CYAN_INV='\e[1;46m'
+export ORANGE_INV='\e[1;43m'
+export PINK_INV='\e[1;45m'
+export NC='\e[0m' # No Color
diff --git a/defaultenv/defaultenv-2-base/data/boot-template b/defaultenv/defaultenv-2-base/data/boot-template
new file mode 100644
index 0000000000..9297499036
--- /dev/null
+++ b/defaultenv/defaultenv-2-base/data/boot-template
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+if [ "$1" = menu ]; then
+ boot-menu-add-entry "$0" "<menu text here>"
+ exit
+fi
+
+global.bootm.image=<path to image>
+#global.bootm.oftree=<path to oftree>
+#global.bootm.initrd=<path to initrd>
+
+#bootargs-ip
+
+global.linux.bootargs.dyn.root="root=<rootfs here>"
diff --git a/defaultenv/defaultenv-2-base/init/automount b/defaultenv/defaultenv-2-base/init/automount
new file mode 100644
index 0000000000..fe56d920e7
--- /dev/null
+++ b/defaultenv/defaultenv-2-base/init/automount
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+if [ "$1" = menu ]; then
+ init-menu-add-entry "$0" "Automountpoints"
+ exit
+fi
+
+# automount tftp server based on $eth0.serverip
+
+mkdir -p /mnt/tftp
+automount /mnt/tftp 'ifup eth0 && mount -t tftp $eth0.serverip /mnt/tftp'
+
+# automount nfs server example
+
+#nfshost=somehost
+#mkdir -p /mnt/${nfshost}
+#automount /mnt/$nfshost "ifup eth0 && mount -t nfs ${nfshost}:/tftpboot /mnt/${nfshost}"
+
+# FAT on usb disk example
+
+#mkdir -p /mnt/fat
+#automount -d /mnt/fat 'usb && [ -e /dev/disk0.0 ] && mount /dev/disk0.0 /mnt/fat'
diff --git a/defaultenv/defaultenv-2-base/init/ps1 b/defaultenv/defaultenv-2-base/init/ps1
new file mode 100644
index 0000000000..02d7b4b780
--- /dev/null
+++ b/defaultenv/defaultenv-2-base/init/ps1
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if [ ${global.allow_color} = "true" ]; then
+ export PS1="\e[1;32mbarebox@\e[1;36m\h:\w\e[0m "
+else
+ export PS1="barebox@\h:\w "
+fi
diff --git a/defaultenv/defaultenv-2-base/network/eth0 b/defaultenv/defaultenv-2-base/network/eth0
new file mode 100644
index 0000000000..7e731cae00
--- /dev/null
+++ b/defaultenv/defaultenv-2-base/network/eth0
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# ip setting (static/dhcp)
+ip=dhcp
+global.dhcp.vendor_id=barebox-${global.hostname}
+
+# static setup used if ip=static
+ipaddr=
+netmask=
+gateway=
+serverip=
+
+# MAC address if needed
+#ethaddr=xx:xx:xx:xx:xx:xx
+
+# put code to discover eth0 (i.e. 'usb') to /env/network/eth0-discover
diff --git a/defaultenv/defaultenv-2-dfu/boot/dfu b/defaultenv/defaultenv-2-dfu/boot/dfu
new file mode 100644
index 0000000000..c9463b667e
--- /dev/null
+++ b/defaultenv/defaultenv-2-dfu/boot/dfu
@@ -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
diff --git a/defaultenv/defaultenv-2-menu/menu/boot-entries-collect b/defaultenv/defaultenv-2-menu/menu/boot-entries-collect
new file mode 100644
index 0000000000..c066c930ab
--- /dev/null
+++ b/defaultenv/defaultenv-2-menu/menu/boot-entries-collect
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+cd /env/boot
+
+./$global.boot.default menu
+
+for i in *; do
+ if [ "$i" != "$global.boot.default" ]; then
+ ./$i menu
+ fi
+done
+
+cd /
diff --git a/defaultenv/defaultenv-2-menu/menu/boot-entries-edit b/defaultenv/defaultenv-2-menu/menu/boot-entries-edit
new file mode 100644
index 0000000000..c4e1c3d5fd
--- /dev/null
+++ b/defaultenv/defaultenv-2-menu/menu/boot-entries-edit
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+export menu_exit=false
+
+while true; do
+ menu -a -m boot_entries_edit -d "\e[1;36mEdit boot entries\e[0m"
+
+ boot-entries-collect
+
+ menu -e -a -m boot_entries_edit -c "boot-menu-new-boot-entry" -d "Add a new entry"
+ menu -e -a -m boot_entries_edit -c "boot-entries-remove" -d "Remove an entry"
+ menu -e -a -m boot_entries_edit -c "menu_exit=true" -d "back"
+
+ menu -s -m boot_entries_edit
+ menu -r -m boot_entries_edit
+
+ if [ $menu_exit = true ]; then
+ exit
+ fi
+done
diff --git a/defaultenv/defaultenv-2-menu/menu/boot-entries-remove b/defaultenv/defaultenv-2-menu/menu/boot-entries-remove
new file mode 100644
index 0000000000..566be9dd6e
--- /dev/null
+++ b/defaultenv/defaultenv-2-menu/menu/boot-entries-remove
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+export menu_exit=false
+
+while true; do
+ menu -a -m boot_entries_remove -d "\e[1;36mRemove Boot entry\e[0m"
+
+ boot-entries-collect
+
+ menu -e -a -m boot_entries_remove -c "menu_exit=true" -d "back"
+
+ menu -s -m boot_entries_remove
+ menu -r -m boot_entries_remove
+
+ if [ $menu_exit = true ]; then
+ exit
+ fi
+done
diff --git a/defaultenv/defaultenv-2-menu/menu/boot-menu-add-entry b/defaultenv/defaultenv-2-menu/menu/boot-menu-add-entry
new file mode 100644
index 0000000000..f06c524034
--- /dev/null
+++ b/defaultenv/defaultenv-2-menu/menu/boot-menu-add-entry
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+menu -e -a -m boot -c "boot -v $1; echo; readline \"press enter to continue\" a " -d "Boot: ${GREEN}$2${NC}"
+menu -e -a -m boot_entries_edit -c "$global.editcmd /env/boot/$1" -d "${GREEN}$2${NC}"
+menu -e -a -m boot_entries_remove -c "rm /env/boot/$1" -d "${GREEN}$2${NC}"
diff --git a/defaultenv/defaultenv-2-menu/menu/boot-menu-new-boot-entry b/defaultenv/defaultenv-2-menu/menu/boot-menu-new-boot-entry
new file mode 100644
index 0000000000..c5e982cdb2
--- /dev/null
+++ b/defaultenv/defaultenv-2-menu/menu/boot-menu-new-boot-entry
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+name=
+
+readline "Name of the new entry: " name
+
+if [ -z "$name" ]; then
+ exit 1
+fi
+
+if [ -e "/env/boot/$name" ]; then
+ echo "entry $name already exists"
+ readline "<enter>" unused
+ exit 1
+fi
+
+cp /env/data/boot-template /env/boot/$name
+
+edit /env/boot/$name
+
+boot-menu-show rebuild
diff --git a/defaultenv/defaultenv-2-menu/menu/init-entries-collect b/defaultenv/defaultenv-2-menu/menu/init-entries-collect
new file mode 100644
index 0000000000..dbb775779a
--- /dev/null
+++ b/defaultenv/defaultenv-2-menu/menu/init-entries-collect
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+cd /env/init
+
+for i in *; do
+ ./$i menu
+done
+
+cd /
diff --git a/defaultenv/defaultenv-2-menu/menu/init-entries-edit b/defaultenv/defaultenv-2-menu/menu/init-entries-edit
new file mode 100644
index 0000000000..fc02b327d9
--- /dev/null
+++ b/defaultenv/defaultenv-2-menu/menu/init-entries-edit
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+export menu_exit=false
+
+while true; do
+ menu -a -m init_entries_edit -d "\e[1;36mEdit init entries\e[0m"
+
+ menu -e -a -m init_entries_edit -R -c "true" -d ">> Reset board to let changes here take effect <<"
+
+ init-entries-collect
+
+ menu -e -a -m init_entries_edit -c "menu_exit=true" -d "back"
+
+ menu -s -m init_entries_edit
+ menu -r -m init_entries_edit
+
+ if [ $menu_exit = true ]; then
+ exit
+ fi
+done
diff --git a/defaultenv/defaultenv-2-menu/menu/init-menu-add-entry b/defaultenv/defaultenv-2-menu/menu/init-menu-add-entry
new file mode 100644
index 0000000000..7cb5686402
--- /dev/null
+++ b/defaultenv/defaultenv-2-menu/menu/init-menu-add-entry
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+menu -e -a -m init_entries_edit -c "$global.editcmd /env/init/$1" -d "\e[1;32m$2\e[0m"
diff --git a/defaultenv/defaultenv-2-menu/menu/mainmenu b/defaultenv/defaultenv-2-menu/menu/mainmenu
new file mode 100644
index 0000000000..f10f67a62f
--- /dev/null
+++ b/defaultenv/defaultenv-2-menu/menu/mainmenu
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+savepath=$PATH
+export menupath=$PATH:/env/menu
+
+. /env/data/ansi-colors
+
+while true; do
+ export PATH=${menupath}
+
+ echo $PATH
+
+ menu -a -m boot -d "${CYAN}Welcome to Barebox${NC}"
+
+ boot-entries-collect
+
+ menu -e -a -m boot -c "settings" -d "Settings"
+ menu -e -a -m boot -c 'PATH=$savepath; echo "enter exit to return to menu"; sh' -d "${DARK_YELLOW}Shell${NC}"
+ menu -e -a -m boot -c reset -d "${RED}Reset${NC}"
+
+ menu -s -m boot
+ menu -r -m boot
+done
diff --git a/defaultenv/defaultenv-2-menu/menu/settings b/defaultenv/defaultenv-2-menu/menu/settings
new file mode 100644
index 0000000000..db619afa6f
--- /dev/null
+++ b/defaultenv/defaultenv-2-menu/menu/settings
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+export menu_exit=false
+
+while true; do
+ menu -a -m settings -d "${CYAN}Settings${NC}"
+
+ menu -e -a -R -m settings -c "$global.editcmd /env/network/eth0" -d "Network settings"
+ menu -e -a -R -m settings -c "$global.editcmd /env/config" -d "Config settings"
+ menu -e -a -m settings -c "boot-entries-edit" -d "Edit boot entries"
+ menu -e -a -m settings -c "init-entries-edit" -d "Edit init entries"
+ menu -e -a -R -m settings -c "saveenv || echo \"failed to save environment\" && sleep 2" -d "Save settings"
+ menu -e -a -m settings -c "menu_exit=true" -d "back"
+
+ menu -s -m settings
+ menu -r -m settings
+
+ if [ $menu_exit = true ]; then
+ exit
+ fi
+done
diff --git a/defaultenv/defaultenv.c b/defaultenv/defaultenv.c
new file mode 100644
index 0000000000..dc0e484c88
--- /dev/null
+++ b/defaultenv/defaultenv.c
@@ -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;
+}