mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] generic default environment - 2nd try
@ 2012-04-15 16:22 Sascha Hauer
  2012-04-15 16:22 ` [PATCH 1/2] add 2nd generation default env Sascha Hauer
  2012-04-15 16:22 ` [PATCH 2/2] ARM pcm038: switch to new default environment Sascha Hauer
  0 siblings, 2 replies; 5+ messages in thread
From: Sascha Hauer @ 2012-04-15 16:22 UTC (permalink / raw)
  To: barebox

Hi All,

This adds a new set of default environment scripts. The old default
environment has a number of shortcomings:

- It grows more complex but doesn't seem to get more flexible.
- We base our decision where the kernel, oftree and rootfs is stored
  on variables which describe only a choice, like 'nand' or 'net'.
  This does not make it possible to store the files in individual
  places, instead each time someone wants to store a kernel in a
  unusual place he has to add a new location and parse it in
  /env/bin/boot.
- USB network devices are not really supported, they always require
  a manual 'usb' command on the commandline to discover them.

The new default environment uses a different approach. Rather then
trying to control the behaviour of /env/bin/boot with an external
script, the control now is in /env/config which uses a set of helper
functions to get its job done.

Highlights are:

- A 'ifup' script brings up networking (only once) when it is needed.
  This can also handle the USB network case.
- The automount support allows to access arbitrary files on tftp
  servers, disks, filesystems on disks just by accessing them,
  no manual mounting or detecting is needed.
- Simpler usage. For example starting a second stage barebox now
  works with "bootm /mnt/tftp-dhcp/barebox.bin" instead of
  "dhcp; tftp barebox.bin /dev/ram0; go /dev/ram0". Doing a
  "bootm /mnt/tftp-dhcp/zImage" now usually works without the need
  of a boot script.

As this environment requires adjustments to the board environment and
it does not (yet) have all features (what is missing?) of the old
environment I did not switch all boards to the new environment and
left the old one in place. If you want to switch your board to the
new environment you can do so by selecting the HAVE_DEFAULT_ENVIRONMENT_NEW
option from your board Kconfig snippet and by adjusting your board
env/config file. An example for my alltime favourite pcm038 is included
in this series.

Sascha

----------------------------------------------------------------
Sascha Hauer (2):
      add 2nd generation default env
      ARM pcm038: switch to new default environment

 arch/arm/boards/pcm038/env/config      |   98 ++++++++++++++++++--------------
 arch/arm/mach-imx/Kconfig              |    1 +
 common/Kconfig                         |    4 ++
 common/Makefile                        |    4 ++
 defaultenv-2/bin/add-nand-bb           |    7 +++
 defaultenv-2/bin/boot                  |    5 ++
 defaultenv-2/bin/bootargs-ip-barebox   |    7 +++
 defaultenv-2/bin/bootargs-ip-dhcp      |    5 ++
 defaultenv-2/bin/bootargs-ip-none      |    5 ++
 defaultenv-2/bin/bootargs-ip-static    |    7 +++
 defaultenv-2/bin/bootargs-root-initrd  |   11 ++++
 defaultenv-2/bin/bootargs-root-jffs2   |    9 +++
 defaultenv-2/bin/bootargs-root-nfs     |   15 +++++
 defaultenv-2/bin/bootargs-root-ubi     |   13 +++++
 defaultenv-2/bin/ifup                  |   48 ++++++++++++++++
 defaultenv-2/bin/init                  |   29 ++++++++++
 defaultenv-2/bin/mount-tftp-dhcpserver |    5 ++
 defaultenv-2/bin/mtdparts-add          |   46 +++++++++++++++
 defaultenv-2/bin/mtdparts-init         |    3 +
 defaultenv-2/config                    |   72 +++++++++++++++++++++++
 defaultenv-2/network/eth0              |   12 ++++
 21 files changed, 363 insertions(+), 43 deletions(-)
 create mode 100644 defaultenv-2/bin/add-nand-bb
 create mode 100644 defaultenv-2/bin/boot
 create mode 100644 defaultenv-2/bin/bootargs-ip-barebox
 create mode 100644 defaultenv-2/bin/bootargs-ip-dhcp
 create mode 100644 defaultenv-2/bin/bootargs-ip-none
 create mode 100644 defaultenv-2/bin/bootargs-ip-static
 create mode 100644 defaultenv-2/bin/bootargs-root-initrd
 create mode 100644 defaultenv-2/bin/bootargs-root-jffs2
 create mode 100644 defaultenv-2/bin/bootargs-root-nfs
 create mode 100644 defaultenv-2/bin/bootargs-root-ubi
 create mode 100644 defaultenv-2/bin/ifup
 create mode 100644 defaultenv-2/bin/init
 create mode 100644 defaultenv-2/bin/mount-tftp-dhcpserver
 create mode 100644 defaultenv-2/bin/mtdparts-add
 create mode 100644 defaultenv-2/bin/mtdparts-init
 create mode 100644 defaultenv-2/config
 create mode 100644 defaultenv-2/network/eth0

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] add 2nd generation default env
  2012-04-15 16:22 [PATCH] generic default environment - 2nd try Sascha Hauer
@ 2012-04-15 16:22 ` Sascha Hauer
  2012-04-15 16:57   ` Jean-Christophe PLAGNIOL-VILLARD
  2012-04-15 16:22 ` [PATCH 2/2] ARM pcm038: switch to new default environment Sascha Hauer
  1 sibling, 1 reply; 5+ messages in thread
From: Sascha Hauer @ 2012-04-15 16:22 UTC (permalink / raw)
  To: barebox

The current default environment grows in complexity and still is
quite unflexible. The basic mistake we (or better I) made is that
we had a boot script and tried to control its behaviour with
variables passed to this script. This had the consequence that
with every new feature we had to pass another variable to this
script and add another if/else to the script. This environment
set inverts this behaviour. It introduces a set of helper functions
which /env/config can use to do its job.

The helpers are:

/env/bin/ifup

bring up networking. Uses /env/network/$interface to configure the
interface. If something has to be done to discover the interface (for
USB devices), the code can be put into /env/network/${interface}-discover

/env/bin/bootargs-root-*

Add fields to $bootargs relevant for the kernel to find its rootfs. We
currently have helpers for ubi, nfs, initrd and jffs2

/env/bin/bootargs-ip-*

Add fields to $bootargs relevant for the kernel to configure networking.
Currently we have helpers for dhcp, static or ip=none

/env/bin/mtdparts-init
/env/bin/mtdparts-add

Add barebox partitions to mtd like devices and construct the mtdparts
Kernel option.

Additionally the automount feature is used to transparently mount
filesystems. With this only the device/file which contains the kernel
has to be specified in /env/config.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 common/Kconfig                         |    4 ++
 common/Makefile                        |    4 ++
 defaultenv-2/bin/add-nand-bb           |    7 ++++
 defaultenv-2/bin/boot                  |    5 +++
 defaultenv-2/bin/bootargs-ip-barebox   |    7 ++++
 defaultenv-2/bin/bootargs-ip-dhcp      |    5 +++
 defaultenv-2/bin/bootargs-ip-none      |    5 +++
 defaultenv-2/bin/bootargs-ip-static    |    7 ++++
 defaultenv-2/bin/bootargs-root-initrd  |   11 +++++
 defaultenv-2/bin/bootargs-root-jffs2   |    9 ++++
 defaultenv-2/bin/bootargs-root-nfs     |   15 +++++++
 defaultenv-2/bin/bootargs-root-ubi     |   13 ++++++
 defaultenv-2/bin/ifup                  |   48 +++++++++++++++++++++
 defaultenv-2/bin/init                  |   29 +++++++++++++
 defaultenv-2/bin/mount-tftp-dhcpserver |    5 +++
 defaultenv-2/bin/mtdparts-add          |   46 ++++++++++++++++++++
 defaultenv-2/bin/mtdparts-init         |    3 ++
 defaultenv-2/config                    |   72 ++++++++++++++++++++++++++++++++
 defaultenv-2/network/eth0              |   12 ++++++
 19 files changed, 307 insertions(+)
 create mode 100644 defaultenv-2/bin/add-nand-bb
 create mode 100644 defaultenv-2/bin/boot
 create mode 100644 defaultenv-2/bin/bootargs-ip-barebox
 create mode 100644 defaultenv-2/bin/bootargs-ip-dhcp
 create mode 100644 defaultenv-2/bin/bootargs-ip-none
 create mode 100644 defaultenv-2/bin/bootargs-ip-static
 create mode 100644 defaultenv-2/bin/bootargs-root-initrd
 create mode 100644 defaultenv-2/bin/bootargs-root-jffs2
 create mode 100644 defaultenv-2/bin/bootargs-root-nfs
 create mode 100644 defaultenv-2/bin/bootargs-root-ubi
 create mode 100644 defaultenv-2/bin/ifup
 create mode 100644 defaultenv-2/bin/init
 create mode 100644 defaultenv-2/bin/mount-tftp-dhcpserver
 create mode 100644 defaultenv-2/bin/mtdparts-add
 create mode 100644 defaultenv-2/bin/mtdparts-init
 create mode 100644 defaultenv-2/config
 create mode 100644 defaultenv-2/network/eth0

diff --git a/common/Kconfig b/common/Kconfig
index a997f3d..7098f03 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -488,6 +488,7 @@ config DEFAULT_ENVIRONMENT_GENERIC
 	select HUSH_GETOPT
 	select CMD_CRC
 	select CMD_CRC_CMP
+	select CMD_AUTOMOUNT if HAVE_DEFAULT_ENVIRONMENT_NEW
 	prompt "Default environment generic"
 	help
 	  With this option barebox will use the generic default
@@ -497,6 +498,9 @@ config DEFAULT_ENVIRONMENT_GENERIC
 	  at least contain a /env/config file.
 	  This will be able to overwrite the files from defaultenv.
 
+config HAVE_DEFAULT_ENVIRONMENT_NEW
+	bool
+
 config DEFAULT_ENVIRONMENT_PATH
 	string
 	depends on DEFAULT_ENVIRONMENT
diff --git a/common/Makefile b/common/Makefile
index 76fe407..5e9fab3 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -40,8 +40,12 @@ $(obj)/startup.o: include/generated/barebox_default_env.h
 $(obj)/env.o: include/generated/barebox_default_env.h
 
 ifeq ($(CONFIG_DEFAULT_ENVIRONMENT_GENERIC),y)
+ifeq ($(CONFIG_HAVE_DEFAULT_ENVIRONMENT_NEW),y)
+DEFAULT_ENVIRONMENT_PATH = "defaultenv-2"
+else
 DEFAULT_ENVIRONMENT_PATH = "defaultenv"
 endif
+endif
 
 ifneq ($(CONFIG_DEFAULT_ENVIRONMENT_PATH),"")
 DEFAULT_ENVIRONMENT_PATH += $(CONFIG_DEFAULT_ENVIRONMENT_PATH)
diff --git a/defaultenv-2/bin/add-nand-bb b/defaultenv-2/bin/add-nand-bb
new file mode 100644
index 0000000..70d7706
--- /dev/null
+++ b/defaultenv-2/bin/add-nand-bb
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# hush expands wildcards when it initially parses a script. The
+# nand partitions do not exist when we enter /env/bin/init, so
+# we must start this script when the partitions exist.
+
+nand -a $1.*
diff --git a/defaultenv-2/bin/boot b/defaultenv-2/bin/boot
new file mode 100644
index 0000000..ab06a07
--- /dev/null
+++ b/defaultenv-2/bin/boot
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+. /env/config
+
+bootm ${bootm_opt} $kernel
diff --git a/defaultenv-2/bin/bootargs-ip-barebox b/defaultenv-2/bin/bootargs-ip-barebox
new file mode 100644
index 0000000..8c48883
--- /dev/null
+++ b/defaultenv-2/bin/bootargs-ip-barebox
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# pass barebox ip settings for eth0 to Linux
+
+ifup eth0
+
+bootargs="$bootargs ip=$eth0.ipaddr:$eth0.serverip:$eth0.gateway:$eth0.netmask::eth0:"
diff --git a/defaultenv-2/bin/bootargs-ip-dhcp b/defaultenv-2/bin/bootargs-ip-dhcp
new file mode 100644
index 0000000..38713a6
--- /dev/null
+++ b/defaultenv-2/bin/bootargs-ip-dhcp
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Do dhcp in Linux
+
+bootargs="$bootargs ip=dhcp"
diff --git a/defaultenv-2/bin/bootargs-ip-none b/defaultenv-2/bin/bootargs-ip-none
new file mode 100644
index 0000000..579df72
--- /dev/null
+++ b/defaultenv-2/bin/bootargs-ip-none
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# disable ip setup in Linux
+
+bootargs="$bootargs ip=none"
diff --git a/defaultenv-2/bin/bootargs-ip-static b/defaultenv-2/bin/bootargs-ip-static
new file mode 100644
index 0000000..93e9940
--- /dev/null
+++ b/defaultenv-2/bin/bootargs-ip-static
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# static kernel ip setup based on barebox values for eth0
+
+. /env/network/eth0
+
+bootargs="$bootargs ip=$ipaddr:$serverip:$gateway:$netmask::eth0:"
diff --git a/defaultenv-2/bin/bootargs-root-initrd b/defaultenv-2/bin/bootargs-root-initrd
new file mode 100644
index 0000000..f826a44
--- /dev/null
+++ b/defaultenv-2/bin/bootargs-root-initrd
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+rdinit="/sbin/init"
+
+while getopt "i:" opt; do
+	if [ ${opt} = i ]; then
+		rdinit=${OPTARG}
+	fi
+done
+
+bootargs="$bootargs root=/dev/ram0 rdinit=${rdinit}"
diff --git a/defaultenv-2/bin/bootargs-root-jffs2 b/defaultenv-2/bin/bootargs-root-jffs2
new file mode 100644
index 0000000..473e6e5
--- /dev/null
+++ b/defaultenv-2/bin/bootargs-root-jffs2
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+while getopt "m:" opt; do
+	if [ ${opt} = m ]; then
+		mtd=${OPTARG}
+	fi
+done
+
+bootargs="$bootargs root=$mtd rootfstype=jffs2"
diff --git a/defaultenv-2/bin/bootargs-root-nfs b/defaultenv-2/bin/bootargs-root-nfs
new file mode 100644
index 0000000..1ac0264
--- /dev/null
+++ b/defaultenv-2/bin/bootargs-root-nfs
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+while getopt "n:s:" opt; do
+	if [ ${opt} = n ]; then
+		nfsroot=${OPTARG}
+	elif [ ${opt} = s ]; then
+		serverip=${OPTARG}
+	fi
+done
+
+if [ -n ${serverip} ]; then
+	nfsroot="$serverip:$nfsroot"
+fi
+
+bootargs="$bootargs root=/dev/nfs nfsroot=$nfsroot,v3,tcp"
diff --git a/defaultenv-2/bin/bootargs-root-ubi b/defaultenv-2/bin/bootargs-root-ubi
new file mode 100644
index 0000000..e618779
--- /dev/null
+++ b/defaultenv-2/bin/bootargs-root-ubi
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+ubiroot=root
+
+while getopt "m:r:" opt; do
+	if [ ${opt} = r ]; then
+		ubiroot=${OPTARG}
+	elif [ ${opt} = m ]; then
+		mtd=${OPTARG}
+	fi
+done
+
+bootargs="$bootargs root=ubi0:$ubiroot ubi.mtd=$mtd rootfstype=ubifs"
diff --git a/defaultenv-2/bin/ifup b/defaultenv-2/bin/ifup
new file mode 100644
index 0000000..6d7ff86
--- /dev/null
+++ b/defaultenv-2/bin/ifup
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+mkdir -p /tmp/network
+
+if [ $# != 1 ]; then
+	echo "usage: ifup <interface>"
+	exit 1
+fi
+
+interface="$1"
+
+if [ -f /tmp/network/$interface ]; then
+	exit 0
+fi
+
+cmd=/env/network/$interface
+
+if [ ! -e $cmd ]; then
+	echo "$f: no such file"
+	exit 1
+fi
+
+. $cmd
+
+if [ $? != 0 ]; then
+	echo "failed to bring up $interface"
+	exit 1
+fi
+
+if [ -f /env/network/${interface}-discover ]; then
+	/env/network/${interface}-discover
+	if [ $? != 0 ]; then
+		echo "failed to discover eth0"
+		exit 1
+	fi
+fi
+
+if [ "$ip" = static ]; then
+	${interface}.ipaddr=$ipaddr
+	${interface}.netmask=$netmask
+	${interface}.serverip=$serverip
+	${interface}.gateway=$gateway
+elif [ "$ip" = dhcp ]; then
+	dhcp
+	exit $?
+fi
+
+echo -o /tmp/network/$interface up
diff --git a/defaultenv-2/bin/init b/defaultenv-2/bin/init
new file mode 100644
index 0000000..563c268
--- /dev/null
+++ b/defaultenv-2/bin/init
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+PATH=/env/bin
+export PATH
+
+. /env/config
+
+# initialize a mountpoint for the serverip sent by the dhcp server
+mkdir -p /mnt/tftp-dhcp
+automount /mnt/tftp-dhcp /env/bin/mount-tftp-dhcpserver
+
+# if the user has specified a tftp server add a mountpoint for it
+if [ -n "$tftpserver" ]; then
+	mkdir -p /mnt/tftp-static
+	automount /mnt/tftp-static /env/bin/mount-tftp-static
+fi
+
+if [ -f /env/bin/init-board ]; then
+	. /env/bin/init-board
+fi
+
+echo
+echo -n "Hit any key to stop autoboot: "
+timeout -a $autoboot_timeout
+if [ $? != 0 ]; then
+	exit
+fi
+
+boot
diff --git a/defaultenv-2/bin/mount-tftp-dhcpserver b/defaultenv-2/bin/mount-tftp-dhcpserver
new file mode 100644
index 0000000..a89fe71
--- /dev/null
+++ b/defaultenv-2/bin/mount-tftp-dhcpserver
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+ifup eth0
+
+mount $eth0.serverip tftp $automount_path
diff --git a/defaultenv-2/bin/mtdparts-add b/defaultenv-2/bin/mtdparts-add
new file mode 100644
index 0000000..91f750a
--- /dev/null
+++ b/defaultenv-2/bin/mtdparts-add
@@ -0,0 +1,46 @@
+#!/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
+	addpart -n $device "$parts" || exit
+	mkdir -p /tmp/mtdparts/${device}
+	if [ -n "${bbdev}" ]; then
+		add-nand-bb $device
+	fi
+fi
+
+if [ -n ${kernelname} ]; then
+	if [ -n "${mtdparts}" ]; then
+		mtdparts="${mtdparts};${kernelname}:${parts}"
+	else
+		mtdparts="${kernelname}:${parts}"
+	fi
+fi
diff --git a/defaultenv-2/bin/mtdparts-init b/defaultenv-2/bin/mtdparts-init
new file mode 100644
index 0000000..4282a89
--- /dev/null
+++ b/defaultenv-2/bin/mtdparts-init
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+mtdparts=
diff --git a/defaultenv-2/config b/defaultenv-2/config
new file mode 100644
index 0000000..af7cee9
--- /dev/null
+++ b/defaultenv-2/config
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+#
+# EXAMPLE FILE
+#
+# This should be overwritten by arch/<yourarch>/<yourboard>/env/config
+#
+# EXAMPLE FILE
+#
+
+#
+# ----- misc variables -----
+#
+
+user=
+hostname=
+autoboot_timeout=3
+tftp_path="/mnt/tftp-dhcp"
+
+#
+# ----- kernel, oftree and nfsroot -----
+#
+
+kernel="${tftp_path}/${user}-linux-${hostname}"
+#kernel="/dev/nand0.kernel.bb"
+#kernel="/dev/nor0.kernel"
+#bootm_opt="-o ${tftp_path}/${user}-oftree-${hostname}"
+nfsroot="/home/${user}/nfsroot/${hostname}"
+
+#
+# ----- mountpoints -----
+#
+
+# FAT on usb disk example
+#automount -d /mnt/fat 'usb; mount /dev/usbdisk0.0 fat $automount_path'
+# static tftp server example
+#automount -d /mnt/tftp 'ifup eth0; mount tftpserver tftp $automount_path'
+
+# initial bootargs
+bootargs="console=ttyS0,115200"
+
+#
+# ----- kernel ip settings -----
+#
+
+. bootargs-ip-dhcp
+#. bootargs-ip-static
+#. bootargs-ip-none
+#. bootargs-ip-barebox
+
+#
+# ----- kernel rootfs settings -----
+#
+
+. bootargs-root-nfs -n "$nfsroot"
+#. bootargs-root-ubi -r root -m nand0.root
+#. bootargs-root-jffs2 -m mtd:nand0.root
+
+#
+# ----- partitions -----
+#
+
+mtdparts_nor="512k(nor0.barebox)ro,128k(nor0.bareboxenv),2M(nor0.kernel),-(nor0.root)"
+mtdparts_nand="512k(nand0.barebox)ro,128k(nand0.bareboxenv),2M(nand0.kernel),-(nand0.root)"
+
+. mtdparts-init
+. mtdparts-add -d /dev/nor0 -k physmap-flash.0 -p ${mtdparts_nor}
+. mtdparts-add -d /dev/nand0 -k mxc_nand -b -p ${mtdparts_nand}
+
+bootargs="$bootargs mtdparts=$mtdparts"
+
+PS1="\e[1;32mbarebox@\e[1;36m\h:\w\e[0m "
diff --git a/defaultenv-2/network/eth0 b/defaultenv-2/network/eth0
new file mode 100644
index 0000000..14fcec8
--- /dev/null
+++ b/defaultenv-2/network/eth0
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# ip setting (static/dhcp)
+ip=dhcp
+
+# static setup used if ip=static
+ipaddr=
+netmask=
+gateway=
+serverip=
+
+# put code to discover eth0 (i.e. 'usb') to /env/network/eth0-discover
-- 
1.7.10


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 2/2] ARM pcm038: switch to new default environment
  2012-04-15 16:22 [PATCH] generic default environment - 2nd try Sascha Hauer
  2012-04-15 16:22 ` [PATCH 1/2] add 2nd generation default env Sascha Hauer
@ 2012-04-15 16:22 ` Sascha Hauer
  1 sibling, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2012-04-15 16:22 UTC (permalink / raw)
  To: barebox

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/boards/pcm038/env/config |   98 +++++++++++++++++++++----------------
 arch/arm/mach-imx/Kconfig         |    1 +
 2 files changed, 56 insertions(+), 43 deletions(-)

diff --git a/arch/arm/boards/pcm038/env/config b/arch/arm/boards/pcm038/env/config
index b1a5f42..d60bdea 100644
--- a/arch/arm/boards/pcm038/env/config
+++ b/arch/arm/boards/pcm038/env/config
@@ -1,52 +1,64 @@
 #!/bin/sh
 
-machine=pcm038
-eth0.serverip=
-user=
-
-# use 'dhcp' to do dhcp in barebox and in kernel
-# use 'none' if you want to skip kernel ip autoconfiguration
-ip=dhcp
-
-# or set your networking parameters here
-#eth0.ipaddr=a.b.c.d
-#eth0.netmask=a.b.c.d
-#eth0.gateway=a.b.c.d
-#eth0.serverip=a.b.c.d
-
-# can be either 'nfs', 'tftp', 'nor' or 'nand'
-kernel_loc=tftp
-# can be either 'net', 'nor', 'nand' or 'initrd'
-rootfs_loc=net
-
-# can be either 'jffs2' or 'ubifs'
-rootfs_type=ubifs
-rootfsimage=root-$machine.$rootfs_type
-
-kernelimage=zImage-$machine
-#kernelimage=uImage-$machine
-#kernelimage=Image-$machine
-#kernelimage=Image-$machine.lzo
-
-if [ -n $user ]; then
-	kernelimage="$user"-"$kernelimage"
-	nfsroot="$eth0.serverip:/home/$user/nfsroot/$machine"
-	rootfsimage="$user"-"$rootfsimage"
-else
-	nfsroot="$eth0.serverip:/path/to/nfs/root"
-fi
+#
+# ----- misc variables -----
+#
 
+user=none
+hostname=pcm038
 autoboot_timeout=3
+tftp_path="/mnt/tftp-dhcp"
 
-bootargs="console=ttymxc0,115200"
+#
+# ----- kernel, oftree and nfsroot -----
+#
 
-nor_parts="512k(barebox)ro,128k(bareboxenv),2M(kernel),-(root)"
-rootfs_mtdblock_nor=3
+kernel="${tftp_path}/${user}-linux-${hostname}"
+#kernel="/dev/nand0.kernel.bb"
+#kernel="/dev/nor0.kernel"
+#bootm_opt="-o ${tftp_path}/${user}-oftree-${hostname}"
+nfsroot="/home/${user}/nfsroot/${hostname}"
 
-nand_parts="512k(barebox)ro,128k(bareboxenv),2M(kernel),-(root)"
-rootfs_mtdblock_nand=7
-nand_device="mxc_nand"
+#
+# ----- mountpoints -----
+#
 
-# set a fancy prompt (if support is compiled in)
-PS1="\e[1;32mbarebox@\e[1;31m\h:\w\e[0m "
+# FAT on usb disk example
+#automount -d /mnt/fat 'usb; mount /dev/usbdisk0.0 fat $automount_path'
+# static tftp server example
+#automount -d /mnt/tftp 'ifup eth0; mount dude tftp $automount_path'
 
+# initial bootargs
+bootargs="console=ttymxc0,115200 earlyprintk"
+
+#
+# ----- kernel ip settings -----
+#
+
+. bootargs-ip-dhcp
+#. bootargs-ip-static
+#. bootargs-ip-none
+#. bootargs-ip-barebox
+
+#
+# ----- kernel rootfs settings -----
+#
+
+. bootargs-root-nfs -n "$nfsroot"
+#. bootargs-root-ubi -r root -m nand0.root
+#. bootargs-root-jffs2 -m mtd:nand0.root
+
+#
+# ----- partitions -----
+#
+
+mtdparts_nor="512k(nor0.barebox)ro,128k(nor0.bareboxenv),2M(nor0.kernel),-(nor0.root)"
+mtdparts_nand="512k(nand0.barebox)ro,128k(nand0.bareboxenv),2M(nand0.kernel),-(nand0.root)"
+
+. mtdparts-init
+. mtdparts-add -d /dev/nor0 -k physmap-flash.0 -p ${mtdparts_nor}
+. mtdparts-add -d /dev/nand0 -k mxc_nand -b -p ${mtdparts_nand}
+
+bootargs="$bootargs mtdparts=$mtdparts"
+
+PS1="\e[1;32mbarebox@\e[1;36m\h:\w\e[0m "
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 2f317c2..5856c2f 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -281,6 +281,7 @@ config MACH_PCM038
 	select SPI
 	select DRIVER_SPI_IMX
 	select MFD_MC13XXX
+	select HAVE_DEFAULT_ENVIRONMENT_NEW
 	help
 	  Say Y here if you are using Phytec's phyCORE-i.MX27 (pcm038) equipped
 	  with a Freescale i.MX27 Processor
-- 
1.7.10


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] add 2nd generation default env
  2012-04-15 16:22 ` [PATCH 1/2] add 2nd generation default env Sascha Hauer
@ 2012-04-15 16:57   ` Jean-Christophe PLAGNIOL-VILLARD
  2012-04-15 17:45     ` Sascha Hauer
  0 siblings, 1 reply; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-04-15 16:57 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On 18:22 Sun 15 Apr     , Sascha Hauer wrote:
> The current default environment grows in complexity and still is
> quite unflexible. The basic mistake we (or better I) made is that
> we had a boot script and tried to control its behaviour with
> variables passed to this script. This had the consequence that
> with every new feature we had to pass another variable to this
> script and add another if/else to the script. This environment
> set inverts this behaviour. It introduces a set of helper functions
> which /env/config can use to do its job.
> 
> The helpers are:
> 
> /env/bin/ifup
> 
> bring up networking. Uses /env/network/$interface to configure the
> interface. If something has to be done to discover the interface (for
> USB devices), the code can be put into /env/network/${interface}-discover
> 
> /env/bin/bootargs-root-*
> 
> Add fields to $bootargs relevant for the kernel to find its rootfs. We
> currently have helpers for ubi, nfs, initrd and jffs2
> 
> /env/bin/bootargs-ip-*
> 
> Add fields to $bootargs relevant for the kernel to configure networking.
> Currently we have helpers for dhcp, static or ip=none
> 
> /env/bin/mtdparts-init
> /env/bin/mtdparts-add
> 
> Add barebox partitions to mtd like devices and construct the mtdparts
> Kernel option.
> 
> Additionally the automount feature is used to transparently mount
> filesystems. With this only the device/file which contains the kernel
> has to be specified in /env/config.

can you give us few days to try before apply it

Best Regards,
J.

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] add 2nd generation default env
  2012-04-15 16:57   ` Jean-Christophe PLAGNIOL-VILLARD
@ 2012-04-15 17:45     ` Sascha Hauer
  0 siblings, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2012-04-15 17:45 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

On Sun, Apr 15, 2012 at 06:57:09PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 18:22 Sun 15 Apr     , Sascha Hauer wrote:
> > The current default environment grows in complexity and still is
> > quite unflexible. The basic mistake we (or better I) made is that
> > we had a boot script and tried to control its behaviour with
> > variables passed to this script. This had the consequence that
> > with every new feature we had to pass another variable to this
> > script and add another if/else to the script. This environment
> > set inverts this behaviour. It introduces a set of helper functions
> > which /env/config can use to do its job.
> > 
> > The helpers are:
> > 
> > /env/bin/ifup
> > 
> > bring up networking. Uses /env/network/$interface to configure the
> > interface. If something has to be done to discover the interface (for
> > USB devices), the code can be put into /env/network/${interface}-discover
> > 
> > /env/bin/bootargs-root-*
> > 
> > Add fields to $bootargs relevant for the kernel to find its rootfs. We
> > currently have helpers for ubi, nfs, initrd and jffs2
> > 
> > /env/bin/bootargs-ip-*
> > 
> > Add fields to $bootargs relevant for the kernel to configure networking.
> > Currently we have helpers for dhcp, static or ip=none
> > 
> > /env/bin/mtdparts-init
> > /env/bin/mtdparts-add
> > 
> > Add barebox partitions to mtd like devices and construct the mtdparts
> > Kernel option.
> > 
> > Additionally the automount feature is used to transparently mount
> > filesystems. With this only the device/file which contains the kernel
> > has to be specified in /env/config.
> 
> can you give us few days to try before apply it

Sure, no problem. In fact I would be glad to get some feedback on this.
Changing the defaultenv can be quite painful later when the board files
are changed.
I am sure though that something like that is needed, the current
defaultenv doesn't bring us much further.

Sascha


-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-04-15 17:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-15 16:22 [PATCH] generic default environment - 2nd try Sascha Hauer
2012-04-15 16:22 ` [PATCH 1/2] add 2nd generation default env Sascha Hauer
2012-04-15 16:57   ` Jean-Christophe PLAGNIOL-VILLARD
2012-04-15 17:45     ` Sascha Hauer
2012-04-15 16:22 ` [PATCH 2/2] ARM pcm038: switch to new default environment Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox