diff --git a/packages/tools/u-boot/files/create_sdcard b/packages/tools/u-boot/files/create_sdcard new file mode 100755 index 0000000000..ce696ad202 --- /dev/null +++ b/packages/tools/u-boot/files/create_sdcard @@ -0,0 +1,270 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv) +# +# OpenELEC 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. +# +# OpenELEC 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. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC. If not, see . +################################################################################ + +# usage: sudo ./create_sdcard +# example: sudo ./create_sdcard /dev/sdb +# loop example: sudo ./create_sdcard /dev/loop0 ~/vSD.img + +# create an empty image file for use with loop device like this: +# dd if=/dev/zero of=~/vSD.img bs=1M count=910 + +if [ "$(id -u)" != "0" ]; then + clear + echo "#########################################################" + echo "# please execute with 'sudo' or -DANGEROUS!!!- as root #" + echo "# example: sudo ./create_sdcard #" + echo "#########################################################" + exit 1 +fi + +if [ -z "$1" ]; then + clear + echo "#########################################################" + echo "# please execute with your drive as option #" + echo "# example: sudo ./create_sdcard /dev/sdb #" + echo "# or: sudo ./create_sdcard /dev/mmcblk0 #" + echo "# or: sudo ./create_sdcard /dev/loop0 ~/vSD.img #" + echo "# to create an image file for /dev/loop0 option: #" + echo "# sudo dd if=/dev/zero of=~/vSD.img bs=1M count=910 #" + echo "#########################################################" + exit 1 +fi + +DISK="$1" +case $DISK in + "/dev/mmcblk"*) + PART1="${DISK}p1" + PART2="${DISK}p2" + ;; + "/dev/loop"*) + PART1="${DISK}p1" + PART2="${DISK}p2" + IMGFILE="$2" + losetup $DISK $IMGFILE + ;; + *) + PART1="${DISK}1" + PART2="${DISK}2" + ;; +esac + +clear +echo "#########################################################" +echo "# #" +echo "# OpenELEC.tv USB Installer #" +echo "# #" +echo "#########################################################" +echo "# #" +echo "# This will wipe any data off your chosen drive #" +echo "# Please read the instructions and use very carefully.. #" +echo "# #" +echo "#########################################################" + +# check for some required tools + + # this is needed to partion the drive + which parted > /dev/null + if [ "$?" = "1" ]; then + clear + echo "#########################################################" + echo "# #" + echo "# OpenELEC.tv missing tool - Installation will quit #" + echo "# #" + echo "# We can't find the required tool \"parted\" #" + echo "# on your system. #" + echo "# Please install it via your package manager. #" + echo "# #" + echo "#########################################################" + exit 1 + fi + + # this is needed to format the drive + which mkfs.vfat > /dev/null + if [ "$?" = "1" ]; then + clear + echo "#########################################################" + echo "# #" + echo "# OpenELEC.tv missing tool - Installation will quit #" + echo "# #" + echo "# We can't find the required tool \"mkfs.vfat\" #" + echo "# on your system. #" + echo "# Please install it via your package manager. #" + echo "# #" + echo "#########################################################" + exit 1 + fi + + # this is needed to format the drive + which mkfs.ext4 > /dev/null + if [ "$?" = "1" ]; then + clear + echo "#########################################################" + echo "# #" + echo "# OpenELEC.tv missing tool - Installation will quit #" + echo "# #" + echo "# We can't find the required tool \"mkfs.ext4\" #" + echo "# on your system. #" + echo "# Please install it via your package manager. #" + echo "# #" + echo "#########################################################" + exit 1 + fi + + # this is needed to tell the kernel for partition changes + which partprobe > /dev/null + if [ "$?" = "1" ]; then + clear + echo "#########################################################" + echo "# #" + echo "# OpenELEC.tv missing tool - Installation will quit #" + echo "# #" + echo "# We can't find the required tool \"partprobe\" #" + echo "# on your system. #" + echo "# Please install it via your package manager. #" + echo "# #" + echo "#########################################################" + exit 1 + fi + + # this is needed to tell the kernel for partition changes + which md5sum > /dev/null + if [ "$?" = "1" ]; then + clear + echo "#########################################################" + echo "# #" + echo "# OpenELEC.tv missing tool - Installation will quit #" + echo "# #" + echo "# We can't find the required tool \"md5sum\" #" + echo "# on your system. #" + echo "# Please install it via your package manager. #" + echo "# #" + echo "#########################################################" + exit 1 + fi + +# check MD5 sums + echo "checking MD5 sum..." + + md5sumFailed() + { + clear + echo "#########################################################" + echo "# #" + echo "# OpenELEC.tv failed md5 check - Installation will quit #" + echo "# #" + echo "# Your original download was probably corrupt. #" + echo "# Please visit www.openelec.tv and get another copy #" + echo "# #" + echo "#########################################################" + exit 1 + } + + md5sum -c target/KERNEL.md5 + if [ "$?" = "1" ]; then + md5sumFailed + fi + + md5sum -c target/SYSTEM.md5 + if [ "$?" = "1" ]; then + md5sumFailed + fi + +# (TODO) umount everything (if more than one partition) + umount ${DISK}* + +# remove all partitions from the drive + echo "writing new disklabel on $DISK (removing all partitions)..." + parted -s "$DISK" mklabel msdos + +# create a single partition + echo "creating partitions on $DISK..." + parted -s "$DISK" unit cyl mkpart primary fat32 -- 0 16 +# align the partition on 4mb boundary, starting at 132mb (132 % 4 == 0), which +# is right after the first partition + parted -s "$DISK" mkpart primary ext2 -- 132MiB -2cyl + +# make partition active (bootable) + echo "marking partition active..." + parted -s "$DISK" set 1 boot on + +# tell kernel we have a new partition table + echo "telling kernel we have a new partition table..." + partprobe "$DISK" + +# create filesystem + echo "creating filesystem on $PART1..." + mkfs.vfat "$PART1" -I -n System + +# create ext4 partition with optimized settings for running on flash/sd +# See http://blogofterje.wordpress.com/2012/01/14/optimizing-fs-on-sd-card/ for reference. + echo "creating filesystem on $PART2..." + mkfs.ext4 -O ^has_journal -E stride=2,stripe-width=1024 -b 4096 "$PART2" -L Storage + +# remount loopback device + if [ "$DISK" = "/dev/loop0" ]; then + sync + losetup -d $DISK + losetup $DISK $IMGFILE -o 1048576 --sizelimit 131071488 + PART1=$DISK + fi + +# mount partition + echo "mounting partition $PART1 ..." + rm -rf /tmp/openelec_install + mkdir -p /tmp/openelec_install + mount -t vfat "$PART1" /tmp/openelec_install + MOUNTPOINT=/tmp/openelec_install + +# install u-boot image, u-boot.imx if new u-boot. else SPL + echo "installing the bootloader..." + if [ -e "3rdparty/bootloader/u-boot.imx" ] ;then + dd if=3rdparty/bootloader/u-boot.imx of="$DISK" bs=1k seek=1 conv=fsync + elif [ -e "3rdparty/bootloader/SPL" ];then + dd if=3rdparty/bootloader/SPL of="$DISK" bs=1k seek=1 conv=fsync + else + echo "ERROR: no bootloader image found!! please execute in archive folder" + fi + +# copy files + echo "copying files to $MOUNTPOINT..." + cp target/KERNEL $MOUNTPOINT + cp target/SYSTEM $MOUNTPOINT + cp 3rdparty/bootloader/* $MOUNTPOINT + cp openelec.ico $MOUNTPOINT + cp README.md $MOUNTPOINT + +# sync disk + echo "syncing disk..." + sync + +# unmount partition + echo "unmounting partition $MOUNTPOINT ..." + umount $MOUNTPOINT + +# cleaning + echo "cleaning tempdir..." + rmdir $MOUNTPOINT + +# unmount loopback device + if [ "$DISK" = "/dev/loop0" ]; then + losetup -d $DISK + fi + +echo "...installation finished" diff --git a/packages/tools/u-boot/package.mk b/packages/tools/u-boot/package.mk index 628389cca2..cb3655dbd2 100644 --- a/packages/tools/u-boot/package.mk +++ b/packages/tools/u-boot/package.mk @@ -81,29 +81,26 @@ makeinstall_target() { fi mkdir -p $INSTALL/usr/share/bootloader - cp ./u-boot.bin $INSTALL/usr/share/bootloader + + if [ -f "./u-boot.imx" ]; then + cp ./u-boot.imx $INSTALL/usr/share/bootloader + fi if [ -f "./u-boot.img" ]; then cp ./u-boot.img $INSTALL/usr/share/bootloader fi - if [ -f "./MLO" ]; then - cp ./MLO $INSTALL/usr/share/bootloader - fi - if [ -f "./SPL" ]; then cp ./SPL $INSTALL/usr/share/bootloader fi - if [ -f "./boot.cfg" ]; then - cp ./boot.cfg $INSTALL/usr/share/bootloader - fi - if [ -f "./$UBOOT_CONFIGFILE" ]; then cp ./$UBOOT_CONFIGFILE $INSTALL/usr/share/bootloader fi - for config in $PROJECT_DIR/$PROJECT/bootloader/*; do - cp -PR $config $INSTALL/usr/share/bootloader - done + cp -PRv $PKG_DIR/scripts/update.sh $INSTALL/usr/share/bootloader + + if [ -f "$PROJECT_DIR/$PROJECT/bootloader/uEnv.txt" ]; then + cp -PR $PROJECT_DIR/$PROJECT/bootloader/uEnv.txt $INSTALL/usr/share/bootloader + fi } diff --git a/packages/tools/u-boot/release b/packages/tools/u-boot/release index f0de17090b..ac355a1674 100755 --- a/packages/tools/u-boot/release +++ b/packages/tools/u-boot/release @@ -25,14 +25,22 @@ if [ -z "$UBOOT_CONFIGFILE" ]; then fi mkdir -p $RELEASE_DIR/3rdparty/bootloader - cp -PR $BUILD/u-boot-*/$UBOOT_CONFIGFILE $RELEASE_DIR/3rdparty/bootloader - cp -PR $BUILD/u-boot-*/SPL $RELEASE_DIR/3rdparty/bootloader + if [ -e $BUILD/u-boot-*/$UBOOT_CONFIGFILE ] ;then + cp -PR $BUILD/u-boot-*/$UBOOT_CONFIGFILE $RELEASE_DIR/3rdparty/bootloader + fi + + if [ -e $BUILD/u-boot-*/SPL ] ;then + cp -PR $BUILD/u-boot-*/SPL $RELEASE_DIR/3rdparty/bootloader + elif [ -e $BUILD/u-boot-*/u-boot.imx ] ;then + cp -PR $BUILD/u-boot-*/u-boot.imx $RELEASE_DIR/3rdparty/bootloader + fi + cp -PR $BUILD/u-boot-*/u-boot.img $RELEASE_DIR/3rdparty/bootloader for dtb in $BUILD/linux-*/arch/arm/boot/dts/*.dtb; do cp -PR $dtb $RELEASE_DIR/3rdparty/bootloader done - for config in $PROJECT_DIR/$PROJECT/bootloader/*; do - cp -PR $config $RELEASE_DIR/3rdparty/bootloader - done + if [ -f "$PROJECT_DIR/$PROJECT/bootloader/uEnv.txt" ]; then + cp -PR $PROJECT_DIR/$PROJECT/bootloader/uEnv.txt $RELEASE_DIR/3rdparty/bootloader + fi diff --git a/projects/Cuboxi/bootloader/update.sh b/packages/tools/u-boot/scripts/update.sh similarity index 65% rename from projects/Cuboxi/bootloader/update.sh rename to packages/tools/u-boot/scripts/update.sh index d4b189adfa..57652a3fb3 100755 --- a/projects/Cuboxi/bootloader/update.sh +++ b/packages/tools/u-boot/scripts/update.sh @@ -19,6 +19,7 @@ ################################################################################ [ -z "$BOOT_ROOT" ] && BOOT_ROOT="/flash" +[ -z "$BOOT_DISK" ] && BOOT_DISK=$(df "$BOOT_ROOT" |tail -1 |awk {' print $1 '}) [ -z "$SYSTEM_ROOT" ] && SYSTEM_ROOT="" # mount $BOOT_ROOT r/w @@ -34,7 +35,22 @@ done # update bootloader files - # todo + if [ -f $SYSTEM_ROOT/usr/share/bootloader/u-boot.img ]; then + echo "*** updating u-boot image: $BOOT_ROOT/u-boot.img ..." + cp -p $SYSTEM_ROOT/usr/share/bootloader/u-boot.img $BOOT_ROOT + fi + + if [ -f $SYSTEM_ROOT/usr/share/bootloader/SPL ]; then + echo "*** updating u-boot SPL Blob on: $DISK ..." + dd if="$SYSTEM_ROOT/usr/share/bootloader/SPL" of="$BOOT_DISK" bs=1k seek=1 conv=fsync + fi + + # prefer uEnv.txt over boot.scr + if [ -f $SYSTEM_ROOT/usr/share/bootloader/uEnv.txt ]; then + cp -p $SYSTEM_ROOT/usr/share/bootloader/uEnv.txt $BOOT_ROOT + elif [ -f $SYSTEM_ROOT/usr/share/bootloader/boot.scr ]; then + cp -p $SYSTEM_ROOT/usr/share/bootloader/boot.scr $BOOT_ROOT + fi # mount $BOOT_ROOT r/o sync diff --git a/projects/Cuboxi/bootloader/boot.cfg b/projects/Cuboxi/bootloader/boot.cfg deleted file mode 100644 index 23acf25fab..0000000000 --- a/projects/Cuboxi/bootloader/boot.cfg +++ /dev/null @@ -1,3 +0,0 @@ -setenv bootargs 'boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2 debugging quiet video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24,bpp=32 dmfc=3' -fatload mmc 0:1 0x10800000 /KERNEL -bootz 0x10800000