diff --git a/rpi3-convert-stage-5.sh b/rpi3-convert-stage-5.sh index ee4cef2..5ba4758 100755 --- a/rpi3-convert-stage-5.sh +++ b/rpi3-convert-stage-5.sh @@ -16,26 +16,64 @@ application_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" output_dir=${application_dir}/output +uboot_dir=${output_dir}/uboot-mender bin_dir_pi=${output_dir}/bin/raspberrypi sdimg_base_dir=$output_dir/sdimg +GCC_VERSION="6.3.1" echo "Running: $(basename $0)" declare -a sdimgmappings declare -a sdimg_partitions=("boot" "primary" "secondary" "data") +version() { + echo "$@" | awk -F. '{ printf("%d%03d%03d\n", $1,$2,$3); }' +} + +# Takes following arguments: +# +# $1 - ARM toolchain build_uboot_files() { + local CROSS_COMPILE=${1}- + local ARCH=arm + local branch="mender-rpi-2017.09" + local commit="988e0ec54" + local uboot_repo_vc_dir=$uboot_dir/.git + + export CROSS_COMPILE=$CROSS_COMPILE + export ARCH=$ARCH + mkdir -p $bin_dir_pi - echo -e "Downloading U-Boot related files..." + echo -e "Building U-Boot related files..." + + if [ ! -d $uboot_repo_vc_dir ]; then + git clone https://github.com/mendersoftware/uboot-mender.git -b $branch + git checkout $commit + fi + + cd $uboot_dir + + make --quiet distclean + make rpi_3_32b_defconfig && make + make envtools + + cat<<-'EOF' >boot.cmd + fdt addr ${fdt_addr} && fdt get value bootargs /chosen bootargs + run mender_setup + mmc dev ${mender_uboot_dev} + load ${mender_uboot_root} ${kernel_addr_r} /boot/zImage + bootz ${kernel_addr_r} - ${fdt_addr} + run mender_try_to_recover + EOF + + $uboot_dir/tools/mkimage -A arm -T script -C none -n "Boot script" -d "boot.cmd" boot.scr - wget -q -O $bin_dir_pi/boot.scr \ - https://github.com/mirzak/mender-conversion-tools/raw/mirza/wip/bin/raspberrypi/boot.scr - wget -q -O $bin_dir_pi/fw_printenv \ - https://github.com/mirzak/mender-conversion-tools/raw/mirza/wip/bin/raspberrypi/fw_printenv wget -q -O $bin_dir_pi/init_resize.sh \ https://raw.githubusercontent.com/mirzak/mender-conversion-tools/mirza/wip/bin/raspberrypi/init_resize.sh - wget -q -O $bin_dir_pi/u-boot.bin \ - https://github.com/mirzak/mender-conversion-tools/raw/mirza/wip/bin/raspberrypi/u-boot.bin + + cp -t $bin_dir_pi $uboot_dir/boot.scr $uboot_dir/tools/env/fw_printenv $uboot_dir/u-boot.bin + + cd $output_dir } # Takes following arguments: @@ -80,7 +118,6 @@ install_files() { sudo cp ${bin_dir_pi}/u-boot.bin ${boot_dir}/kernel7.img sudo cp ${bin_dir_pi}/boot.scr ${boot_dir} - sudo cp ${bin_dir_pi}/init_resize.sh ${rootfs_dir}/usr/lib/raspi-config/init-resize.sh sudo cp ${boot_dir}/config.txt ${output_dir}/config.txt @@ -112,6 +149,23 @@ do_install_bootloader() { exit 1 fi + if [ -z "${toolchain}" ]; then + echo "ARM toolchain not set. Aborting." + exit 1 + fi + + if [[ $(which ${toolchain}-gcc) = 1 ]]; then + echo "Error: ARM GCC not found in PATH. Aborting." + exit 1 + fi + + local gcc_version=$(${toolchain}-gcc -dumpversion) + + if [ $(version $gcc_version) -ne $(version $GCC_VERSION) ]; then + echo "Error: Invalid ARM GCC version ($gcc_version). Expected $GCC_VERSION. Aborting." + exit 1 + fi + [ ! -f $image ] && { echo "$image - file not found. Aborting."; exit 1; } # Map & mount Mender compliant image. @@ -120,7 +174,7 @@ do_install_bootloader() { mkdir -p $output_dir && cd $output_dir # Build patched U-Boot files. - build_uboot_files + build_uboot_files $toolchain mount_sdimg ${sdimgmappings[@]}