#
# (C) Copyright 2001
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
#
# See file CREDITS for list of people who contributed to this
# project.
#
# The files in this directory are free software; you can redistribute
# them and/or modify them 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.
#
# These files are distributed in the hope that they 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#

This directory contains scripts that help to perform certain actions
that need to be done frequently when working with U-Boot.

They are meant as EXAMPLE code, so it is very likely  that  you  will
have to modify them before use.



Short description:
==================

dot.kermrc:

	Example for "~/.kermrc" Kermit init file for use with U-Boot

	by Wolfgang Denk, 24 Jun 2001

flash_param:

        "kermit" script to automatically initialize the environment
        variables on your target. This is most useful during
        development when your environment variables are stored in an
        embedded flash sector which is erased whenever you install a
        new U-Boot image.

	by Swen Anderson, 10 May 2001

send_cmd:

	send_cmd U_BOOT_COMMAND

        "kermit" script to send a U-Boot command and print the
        results. When used from a shell with history (like the bash)
        this indirectly adds kind of history to U-Boot ;-)

	by Swen Anderson, 10 May 2001

send_image:

	send_image FILE_NAME OFFSET

        "kermit" script to automatically download a file to the
        target using the "loadb" command (kermit binary protocol)

	by Swen Anderson, 10 May 2001
