aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaju Kumar Pothuraju <raju.kumar-pothuraju@xilinx.com>2021-01-05 20:20:17 +0530
committerMark Hatle <mark.hatle@xilinx.com>2021-02-17 14:59:05 -0800
commit4d7b03600770fca03d08f92fc47a739da9f5c0db (patch)
tree7f7cb27f0d66b20d1e721aad7eb785db1ddc372e
parent1ed38fd943fb6c53e83e3cc4a18a88be0b58add4 (diff)
downloadmeta-xilinx-4d7b03600770fca03d08f92fc47a739da9f5c0db.tar.gz
meta-xilinx-4d7b03600770fca03d08f92fc47a739da9f5c0db.tar.bz2
meta-xilinx-4d7b03600770fca03d08f92fc47a739da9f5c0db.zip
u-boot-zynq-scr: Add microblaze support for boot.scr
Adding microblaze support for boot.scr and moving the generic boot script from petalinux to yocto layers. The generic boot script will read the boot_target variable on uboot and based on the bootmode it will execute the boot commands. Signed-off-by: Raju Kumar Pothuraju <raju.kumar-pothuraju@xilinx.com> Signed-off-by: Mark Hatle <mark.hatle@xilinx.com>
-rw-r--r--meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr.bb159
-rw-r--r--meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.generic68
-rw-r--r--meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.ubifs55
3 files changed, 273 insertions, 9 deletions
diff --git a/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr.bb b/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr.bb
index e8b91922..aecc36df 100644
--- a/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr.bb
+++ b/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr.bb
@@ -12,6 +12,7 @@ COMPATIBLE_MACHINE ?= "^$"
COMPATIBLE_MACHINE_zynqmp = "zynqmp"
COMPATIBLE_MACHINE_zynq = "zynq"
COMPATIBLE_MACHINE_versal = "versal"
+COMPATIBLE_MACHINE_microblaze = "microblaze"
KERNELDT = "${@os.path.basename(d.getVar('KERNEL_DEVICETREE').split(' ')[0]) if d.getVar('KERNEL_DEVICETREE') else ''}"
DEVICE_TREE_NAME ?= "${@bb.utils.contains('PREFERRED_PROVIDER_virtual/dtb', 'device-tree', 'system.dtb', d.getVar('KERNELDT'), d)}"
@@ -22,14 +23,24 @@ RAMDISK_IMAGE_zynq ?= "uramdisk.image.gz"
KERNEL_BOOTCMD_zynqmp ?= "booti"
KERNEL_BOOTCMD_zynq ?= "bootm"
KERNEL_BOOTCMD_versal ?= "booti"
+KERNEL_BOOTCMD_microblaze ?= "bootm"
BOOTMODE ?= "sd"
+BOOTFILE_EXT ?= ".${SOC_FAMILY}"
+
+#Make this value to "1" to skip appending base address to ddr offsets.
+SKIP_APPEND_BASEADDR ?= "0"
+
+DDR_BASEADDR ?= "0x0"
+DDR_BASEADDR_microblaze ?= "0x80000000"
SRC_URI = " \
file://boot.cmd.sd.zynq \
file://boot.cmd.sd.zynqmp \
file://boot.cmd.sd.versal \
file://boot.cmd.qspi.versal \
+ file://boot.cmd.generic \
+ file://boot.cmd.ubifs \
file://pxeboot.pxe \
"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -38,16 +49,95 @@ UBOOTSCR_BASE_NAME ?= "${PN}-${PKGE}-${PKGV}-${PKGR}${IMAGE_VERSION_SUFFIX}"
UBOOTPXE_CONFIG ?= "pxelinux.cfg"
UBOOTPXE_CONFIG_NAME = "${UBOOTPXE_CONFIG}${IMAGE_VERSION_SUFFIX}"
-DEVICETREE_ADDRESS_zynqmp ?= "0x100000"
-DEVICETREE_ADDRESS_zynq ?= "0x2000000"
-DEVICETREE_ADDRESS_versal ?= "0x1000"
-KERNEL_LOAD_ADDRESS_zynqmp ?= "0x200000"
-KERNEL_LOAD_ADDRESS_zynq ?= "0x2080000"
-KERNEL_LOAD_ADDRESS_versal ?= "0x80000"
+DEVICETREE_ADDRESS ?= "${@append_baseaddr(d,d.getVar('DEVICETREE_OFFSET'))}"
+
+DEVICETREE_OFFSET_microblaze ?= "0x1e00000"
+DEVICETREE_OFFSET_zynqmp ?= "0x100000"
+DEVICETREE_OFFSET_zynq ?= "0x2000000"
+DEVICETREE_OFFSET_versal ?= "0x1000"
+
+KERNEL_LOAD_ADDRESS ?= "${@append_baseaddr(d,d.getVar('KERNEL_OFFSET'))}"
+
+KERNEL_OFFSET_microblaze ?= "0x0"
+KERNEL_OFFSET_zynqmp ?= "0x200000"
+KERNEL_OFFSET_zynq ?= "0x2080000"
+KERNEL_OFFSET_versal ?= "0x80000"
+
+KERNEL_IMAGE ?= "${KERNEL_IMAGETYPE}"
+
+RAMDISK_IMAGE_ADDRESS ?= "${@append_baseaddr(d,d.getVar('RAMDISK_OFFSET'))}"
+
+RAMDISK_OFFSET_microblaze ?= "0x2e00000"
+RAMDISK_OFFSET_zynq ?= "0x4000000"
+RAMDISK_OFFSET_zynqmp ?= "0x4000000"
+RAMDISK_OFFSET_versal ?= "0x6000000"
+
+FIT_IMAGE_LOAD_ADDRESS ?= "${@append_baseaddr(d,d.getVar('FIT_IMAGE_OFFSET'))}"
+FIT_IMAGE_OFFSET ?= "0x10000000"
+FIT_IMAGE ?= "image.ub"
+
+## Below offsets and sizes are based on 32MB QSPI Memory for zynq
+## For MB
+## Load boot.scr at 0xFC0000 -> 15MB of QSPI/NAND Memory
+QSPI_KERNEL_OFFSET_microblaze ?= "0xBC0000"
+QSPI_KERNEL_SIZE_microblaze ?= "0x500000"
+QSPI_RAMDISK_SIZE_microblaze ?= "0xA00000"
+
+## For zynq
+## Load boot.scr at 0xFC0000 -> 15MB of QSPI/NAND Memory
+QSPI_KERNEL_OFFSET_zynq ?= "0x1000000"
+QSPI_RAMDISK_OFFSET_zynq ?= "0x1580000"
+
+NAND_KERNEL_OFFSET_zynq ?= "0x1000000"
+NAND_RAMDISK_OFFSET_zynq ?= "0x4600000"
+
+QSPI_KERNEL_SIZE_zynq ?= "0x500000"
+QSPI_RAMDISK_SIZE_zynq ?= "0xA00000"
-RAMDISK_IMAGE_ADDRESS_zynq ?= "0x4000000"
-RAMDISK_IMAGE_ADDRESS_versal ?= "0x6000000"
+NAND_KERNEL_SIZE ?= "0x3200000"
+NAND_RAMDISK_SIZE ?= "0x3200000"
+## Below offsets and sizes are based on 128MB QSPI Memory for zynqmp/versal
+## For zynqMP
+## Load boot.scr at 0x3E80000 -> 62MB of QSPI/NAND Memory
+QSPI_KERNEL_OFFSET ?= "0xF00000"
+QSPI_KERNEL_OFFSET_zynqmpdr ?= "0x3F00000"
+QSPI_RAMDISK_OFFSET ?= "0x4000000"
+QSPI_RAMDISK_OFFSET_zynqmpdr ?= "0x5D00000"
+
+NAND_KERNEL_OFFSET_zynqmp ?= "0x4100000"
+NAND_RAMDISK_OFFSET_zynqmp ?= "0x7800000"
+
+QSPI_KERNEL_SIZE_zynqmp ?= "0x1D00000"
+QSPI_RAMDISK_SIZE ?= "0x4000000"
+QSPI_RAMDISK_SIZE_zynqmpdr ?= "0x1D00000"
+
+## For versal
+## Load boot.scr at 0x7F80000 -> 127MB of QSPI/NAND Memory
+QSPI_KERNEL_OFFSET_versal ?= "0xF00000"
+QSPI_RAMDISK_OFFSET_versal ?= "0x2E00000"
+
+NAND_KERNEL_OFFSET_versal ?= "0x4100000"
+NAND_RAMDISK_OFFSET_versal ?= "0x8200000"
+
+QSPI_KERNEL_SIZE_versal ?= "0x1D00000"
+QSPI_RAMDISK_SIZE_versal ?= "0x4000000"
+
+QSPI_KERNEL_IMAGE_microblaze ?= "image.ub"
+QSPI_KERNEL_IMAGE_zynq ?= "image.ub"
+QSPI_KERNEL_IMAGE_zynqmp ?= "image.ub"
+QSPI_KERNEL_IMAGE_versal ?= "image.ub"
+
+NAND_KERNEL_IMAGE ?= "image.ub"
+
+QSPI_FIT_IMAGE_LOAD_ADDRESS ?= "${@append_baseaddr(d,"0x10000000")}"
+QSPI_FIT_IMAGE_SIZE ?= "0x6400000"
+QSPI_FIT_IMAGE_SIZE_zynqmpdr ?= "0x3F00000"
+QSPI_FIT_IMAGE_SIZE_zynq ?= "0xF00000"
+QSPI_FIT_IMAGE_SIZE_microblaze ?= "0xF00000"
+
+NAND_FIT_IMAGE_LOAD_ADDRESS ?= "${@append_baseaddr(d,"0x10000000")}"
+NAND_FIT_IMAGE_SIZE ?= "0x6400000"
SDBOOTDEV ?= "0"
@@ -56,6 +146,38 @@ BITSTREAM_LOAD_ADDRESS ?= "0x100000"
do_configure[noexec] = "1"
do_install[noexec] = "1"
+python () {
+ baseaddr = d.getVar('DDR_BASEADDR') or "0x0"
+ if baseaddr == "0x0":
+ d.setVar('PRE_BOOTENV','')
+ else:
+ soc_family = d.getVar('SOC_FAMILY') or ""
+ if soc_family == "zynqmp":
+ fdt_high = "0x10000000"
+ elif soc_family == "zynq":
+ fdt_high = "0x20000000"
+ elif soc_family == "versal":
+ fdt_high = "0x70000000"
+ else:
+ fdt_high = ""
+
+ if fdt_high:
+ basefdt_high = append_baseaddr(d,fdt_high)
+ bootenv = "setenv fdt_high " + basefdt_high
+ d.appendVar('PRE_BOOTENV',bootenv)
+}
+
+def append_baseaddr(d,offset):
+ skip_append = d.getVar('SKIP_APPEND_BASEADDR') or ""
+ if skip_append == "1":
+ return offset
+ import subprocess
+ baseaddr = d.getVar('DDR_BASEADDR') or "0x0"
+ subcmd = "$((%s+%s));" % (baseaddr,offset)
+ cmd = "printf '0x%08x' " + str(subcmd)
+ output = subprocess.check_output(cmd, shell=True).decode("utf-8")
+ return output
+
def get_bitstream_load_type(d):
if boot_files_bitstream(d)[1] :
return "loadb"
@@ -75,7 +197,26 @@ do_compile() {
-e 's/@@BITSTREAM_LOAD_ADDRESS@@/${BITSTREAM_LOAD_ADDRESS}/g' \
-e 's/@@BITSTREAM_IMAGE@@/${@boot_files_bitstream(d)[0]}/g' \
-e 's/@@BITSTREAM_LOAD_TYPE@@/${@get_bitstream_load_type(d)}/g' \
- "${WORKDIR}/boot.cmd.${BOOTMODE}.${SOC_FAMILY}" > "${WORKDIR}/boot.cmd"
+ -e 's/@@QSPI_KERNEL_OFFSET@@/${QSPI_KERNEL_OFFSET}/' \
+ -e 's/@@NAND_KERNEL_OFFSET@@/${NAND_KERNEL_OFFSET}/' \
+ -e 's/@@QSPI_KERNEL_SIZE@@/${QSPI_KERNEL_SIZE}/' \
+ -e 's/@@NAND_KERNEL_SIZE@@/${NAND_KERNEL_SIZE}/' \
+ -e 's/@@QSPI_RAMDISK_OFFSET@@/${QSPI_RAMDISK_OFFSET}/' \
+ -e 's/@@NAND_RAMDISK_OFFSET@@/${NAND_RAMDISK_OFFSET}/' \
+ -e 's/@@QSPI_RAMDISK_SIZE@@/${QSPI_RAMDISK_SIZE}/' \
+ -e 's/@@NAND_RAMDISK_SIZE@@/${NAND_RAMDISK_SIZE}/' \
+ -e 's/@@KERNEL_IMAGE@@/${KERNEL_IMAGE}/' \
+ -e 's/@@QSPI_KERNEL_IMAGE@@/${QSPI_KERNEL_IMAGE}/' \
+ -e 's/@@NAND_KERNEL_IMAGE@@/${NAND_KERNEL_IMAGE}/' \
+ -e 's/@@QSPI_FIT_IMAGE_LOAD_ADDRESS@@/${QSPI_FIT_IMAGE_LOAD_ADDRESS}/' \
+ -e 's/@@FIT_IMAGE_LOAD_ADDRESS@@/${FIT_IMAGE_LOAD_ADDRESS}/' \
+ -e 's/@@QSPI_FIT_IMAGE_SIZE@@/${QSPI_FIT_IMAGE_SIZE}/' \
+ -e 's/@@NAND_FIT_IMAGE_LOAD_ADDRESS@@/${NAND_FIT_IMAGE_LOAD_ADDRESS}/' \
+ -e 's/@@NAND_FIT_IMAGE_SIZE@@/${NAND_FIT_IMAGE_SIZE}/' \
+ -e 's/@@FIT_IMAGE@@/${FIT_IMAGE}/' \
+ -e 's/@@PRE_BOOTENV@@/${PRE_BOOTENV}/' \
+ -e 's/@@RAMDISK_IMAGE1@@/${RAMDISK_IMAGE1}/' \
+ "${WORKDIR}/boot.cmd.${BOOTMODE}${BOOTFILE_EXT}" > "${WORKDIR}/boot.cmd"
mkimage -A arm -T script -C none -n "Boot script" -d "${WORKDIR}/boot.cmd" boot.scr
sed -e 's/@@KERNEL_IMAGETYPE@@/${KERNEL_IMAGETYPE}/' \
-e 's/@@DEVICE_TREE_NAME@@/${DEVICE_TREE_NAME}/' \
diff --git a/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.generic b/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.generic
new file mode 100644
index 00000000..b8ebf645
--- /dev/null
+++ b/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.generic
@@ -0,0 +1,68 @@
+# This is a boot script for U-Boot
+# Generate boot.scr:
+# mkimage -c none -A arm -T script -d boot.cmd.default boot.scr
+#
+################
+@@PRE_BOOTENV@@
+
+for boot_target in ${boot_targets};
+do
+ if test "${boot_target}" = "jtag" ; then
+ @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
+ exit;
+ fi
+ if test "${boot_target}" = "mmc0" || test "${boot_target}" = "mmc1" ; then
+ if test -e ${devtype} ${devnum}:${distro_bootpart} /@@FIT_IMAGE@@; then
+ fatload ${devtype} ${devnum}:${distro_bootpart} @@FIT_IMAGE_LOAD_ADDRESS@@ @@FIT_IMAGE@@;
+ bootm @@FIT_IMAGE_LOAD_ADDRESS@@;
+ exit;
+ fi
+ if test -e ${devtype} ${devnum}:${distro_bootpart} /@@KERNEL_IMAGE@@; then
+ fatload ${devtype} ${devnum}:${distro_bootpart} @@KERNEL_LOAD_ADDRESS@@ @@KERNEL_IMAGE@@;;
+ fi
+ if test -e ${devtype} ${devnum}:${distro_bootpart} /system.dtb; then
+ fatload ${devtype} ${devnum}:${distro_bootpart} @@DEVICETREE_ADDRESS@@ system.dtb;
+ fi
+ if test -e ${devtype} ${devnum}:${distro_bootpart} /@@RAMDISK_IMAGE1@@; then
+ fatload ${devtype} ${devnum}:${distro_bootpart} @@RAMDISK_IMAGE_ADDRESS@@ @@RAMDISK_IMAGE1@@;
+ @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
+ exit;
+ fi
+ if test -e ${devtype} ${devnum}:${distro_bootpart} /@@RAMDISK_IMAGE@@; then
+ fatload ${devtype} ${devnum}:${distro_bootpart} @@RAMDISK_IMAGE_ADDRESS@@ @@RAMDISK_IMAGE@@;
+ @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
+ exit;
+ fi
+ @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ - @@DEVICETREE_ADDRESS@@
+ exit;
+ fi
+ if test "${boot_target}" = "xspi0" || test "${boot_target}" = "qspi" || test "${boot_target}" = "qspi0"; then
+ sf probe 0 0 0;
+ if test "@@QSPI_KERNEL_IMAGE@@" = "@@FIT_IMAGE@@"; then
+ sf read @@QSPI_FIT_IMAGE_LOAD_ADDRESS@@ @@QSPI_KERNEL_OFFSET@@ @@QSPI_FIT_IMAGE_SIZE@@;
+ bootm @@QSPI_FIT_IMAGE_LOAD_ADDRESS@@;
+ exit;
+ fi
+ if test "@@QSPI_KERNEL_IMAGE@@" = "@@KERNEL_IMAGE@@"; then
+ sf read @@KERNEL_LOAD_ADDRESS@@ @@QSPI_KERNEL_OFFSET@@ @@QSPI_KERNEL_SIZE@@;
+ sf read @@RAMDISK_IMAGE_ADDRESS@@ @@QSPI_RAMDISK_OFFSET@@ @@QSPI_RAMDISK_SIZE@@
+ @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
+ exit;
+ fi
+ exit;
+ fi
+ if test "${boot_target}" = "nand" || test "${boot_target}" = "nand0"; then
+ nand info
+ if test "@@NAND_KERNEL_IMAGE@@" = "@@FIT_IMAGE@@"; then
+ nand read @@NAND_FIT_IMAGE_LOAD_ADDRESS@@ @@NAND_KERNEL_OFFSET@@ @@NAND_FIT_IMAGE_SIZE@@;
+ bootm @@NAND_FIT_IMAGE_LOAD_ADDRESS@@;
+ exit;
+ fi
+ if test "@@NAND_KERNEL_IMAGE@@" = "@@KERNEL_IMAGE@@"; then
+ nand read @@KERNEL_LOAD_ADDRESS@@ @@NAND_KERNEL_OFFSET@@ @@NAND_KERNEL_SIZE@@;
+ nand read @@RAMDISK_IMAGE_ADDRESS@@ @@NAND_RAMDISK_OFFSET@@ @@NAND_RAMDISK_SIZE@@;
+ @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
+ exit;
+ fi
+ fi
+done
diff --git a/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.ubifs b/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.ubifs
new file mode 100644
index 00000000..2b21c3cf
--- /dev/null
+++ b/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.ubifs
@@ -0,0 +1,55 @@
+# This is a boot script for U-Boot
+# Generate boot.scr:
+# mkimage -c none -A arm -T script -d boot.cmd.default boot.scr
+#
+################
+@@PRE_BOOTENV@@
+
+for boot_target in ${boot_targets};
+do
+ if test "${boot_target}" = "xspi0" || test "${boot_target}" = "qspi" || test "${boot_target}" = "qspi0"; then
+ ubifsls @@FIT_IMAGE@@
+ if test $? = 0; then
+ ubifsload @@QSPI_FIT_IMAGE_LOAD_ADDRESS@@ @@FIT_IMAGE@@;
+ bootm @@QSPI_FIT_IMAGE_LOAD_ADDRESS@@;
+ exit;
+ fi
+ ubifsls @@KERNEL_IMAGE@@
+ if test $? = 0; then
+ ubifsload @@KERNEL_LOAD_ADDRESS@@ @@KERNEL_IMAGE@@;
+ fi
+ ubifsls system.dtb
+ if test $? = 0; then
+ ubifsload @@DEVICETREE_ADDRESS@@ system.dtb
+ fi
+ ubifsls @@RAMDISK_IMAGE@@
+ if test $? = 0; then
+ ubifsload @@RAMDISK_IMAGE_ADDRESS@@ @@RAMDISK_IMAGE@@
+ @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
+ exit;
+ fi
+ @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ - @@DEVICETREE_ADDRESS@@
+ exit;
+ fi
+ if test "${boot_target}" = "mmc0" || test "${boot_target}" = "mmc1" ; then
+ run bootcmd_${boot_target};
+ if test -e ${devtype} ${devnum}:${distro_bootpart} /@@FIT_IMAGE@@; then
+ ext4load ${devtype} ${devnum}:${distro_bootpart} @@FIT_IMAGE_LOAD_ADDRESS@@ @@FIT_IMAGE@@;
+ bootm @@FIT_IMAGE_LOAD_ADDRESS@@;
+ exit;
+ fi
+ if test -e ${devtype} ${devnum}:${distro_bootpart} /@@KERNEL_IMAGE@@; then
+ ext4load ${devtype} ${devnum}:${distro_bootpart} @@KERNEL_LOAD_ADDRESS@@ @@KERNEL_IMAGE@@;
+ fi
+ if test -e ${devtype} ${devnum}:${distro_bootpart} /system.dtb; then
+ ext4load ${devtype} ${devnum}:${distro_bootpart} @@DEVICETREE_ADDRESS@@ system.dtb;
+ fi
+ if test -e ${devtype} ${devnum}:${distro_bootpart} /@@RAMDISK_IMAGE@@; then
+ ext4load ${devtype} ${devnum}:${distro_bootpart} @@RAMDISK_IMAGE_ADDRESS@@ @@RAMDISK_IMAGE@@;
+ @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ @@RAMDISK_IMAGE_ADDRESS@@ @@DEVICETREE_ADDRESS@@
+ exit;
+ fi
+ @@KERNEL_BOOTCMD@@ @@KERNEL_LOAD_ADDRESS@@ - @@DEVICETREE_ADDRESS@@
+ exit;
+ fi
+done