Signed-off-by: Bernhard Nortmann <[email protected]>
---
usb-boot | 116 +++++++++++++++++++++++++++++++++------------------------------
1 file changed, 61 insertions(+), 55 deletions(-)
diff --git a/usb-boot b/usb-boot
index 3881d29..be34004 100755
--- a/usb-boot
+++ b/usb-boot
@@ -20,72 +20,78 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-top=`dirname $0`
-if [ $# -lt 2 ]; then
- echo "Usage: $0 u-boot-spl.bin u-boot.bin [boot.scr] [kernel script.bin
[initramfs]]"
+# default (write) addresses, normally should match your U-Boot version
+kernel_addr_r=0x42000000 # kernel
+fdt_addr_r=0x43000000 # .dtb or script.bin
+scriptaddr=0x43100000 # boot script (.scr)
+ramdisk_addr_r=0x43300000 # initramfs
+
+usage() {
+ echo
+ echo "Usage:"
+ echo "$0 <spl> [<boot.scr> [<kernel> <devicefile> [<initramfs>]]]"
+ echo
+ echo "<spl> is typically u-boot-sunxi-with-spl.bin,"
+ echo "<devicefile> is script.bin (for older 3.4.x kernel),"
+ echo "or a .dtb file for newer (mainline) kernel using device tree"
+ echo
exit 1
-fi
-board=$1; shift || (echo "ERROR: u-boot-spl.bin must be specified"; exit 1;)
-uboot=$1; shift || (echo "ERROR: u-boot.bin must be specified"; exit 1;)
-bootscr=$top/felboot/ramboot.scr
-if [ ! -f $bootscr ]; then
- bootscr=$top/bin/ramboot.scr
-fi
-case "$1" in
-*.scr) bootscr="$1"; shift
- ;;
-esac
-if [ $# -ge 1 ]; then
- kernel=$1; shift || true
-fi
-if [ $# -ge 1 ]; then
- scriptbin=$1; shift || true
-fi
-if [ $# -ge 1 ]; then
- initramfs=$1; shift || true
-fi
+}
+
+top=`dirname $0`
fel() {
+ # echo fel command (args) to console, then execute it
echo fel "$@"
$top/fel $@
}
-case $board in
-*/*) felboot=$board
- ;;
-*)
- felboot=$top/felboot/fel-boot-${board}.bin
- if [ ! -f $felboot ]; then
- felboot=$top/bin/fel-boot-${board}.bin
+felfile() {
+ # (optionally) expand a filename ($2) with default directory,
+ # and ensure a corresponding file exists
+ # returns (possibly modified) filename as environment var specified by
$1
+ fname=$2
+ case ${fname} in
+ */*) ;; # use any filename with slashes 'as-is'
+ *) fname="${top}/felboot/$2" # prefix with standard dir
+ if [ ! -f ${fname} ]; then
+ fname="${top}/bin/$2" # try "bin" dir instead
+ fi
+ ;;
+ esac
+ if [ ! -f ${fname} ]; then
+ echo "ERROR: ($1) file ${fname} not found"
+ exit 1
fi
- ;;
-esac
-if [ ! -f $felboot ]; then
- echo "ERROR: Can't find SPL FEL binary ${board}"
- exit 1
+ export $1="${fname}"
+}
+
+if [ $# -lt 1 ]; then usage; fi
+
+felfile "spl" $1; shift || (echo "ERROR: <spl> must be specified"; usage;)
+
+if [ $# -ge 1 ]; then
+ felfile "bootscr" $1; shift
fi
-if [ `wc -c $felboot | cut '-d ' -f1` -gt 15616 ]; then
- echo "ERROR: SPL FEL binary too large. Must be the FEL version of SPL"
- exit 1
+if [ $# -ge 1 ]; then
+ felfile "kernel" $1; shift
fi
-if [ ! -f $bootscr ]; then
- echo "ERROR: Can't find boot script '${bootscr}'"
- exit 1
+if [ $# -ge 1 ]; then
+ felfile "scriptbin" $1; shift
fi
-fel write 0x2000 $felboot
-fel exe 0x2000
-sleep 1 # Wait for DRAM initialization to complete
-if [ -n "$uboot" ]; then
- fel write 0x4a000000 $uboot
+if [ $# -ge 1 ]; then
+ felfile "initramfs" $1; shift
fi
+
+FEL_ARGS="uboot $spl" # use "-v uboot $spl" for more verbose output
if [ -n "$bootscr" ]; then
- fel write 0x41000000 $bootscr
+ FEL_ARGS+=" write $scriptaddr $bootscr"
fi
if [ -n "$kernel" ]; then
- if [ -n "$scriptbin" ]; then
- fel write 0x43000000 $scriptbin
- fi
- fel write 0x44000000 $kernel
- if [ -n "$initramfs" ]; then
- fel write 0x4c000000 $initramfs
- fi
+ if [ -n "$scriptbin" ]; then
+ FEL_ARGS+=" write $fdt_addr_r $scriptbin"
+ fi
+ FEL_ARGS+=" write $kernel_addr_r $kernel"
+ if [ -n "$initramfs" ]; then
+ FEL_ARGS+=" write $ramdisk_addr_r $initramfs"
+ fi
fi
-fel exe 0x4a000000
+fel ${FEL_ARGS} # execute actual fel command
--
2.0.5
--
You received this message because you are subscribed to the Google Groups
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.