From fe76470a315ccb600fa42f3b3cad3de0543417cd Mon Sep 17 00:00:00 2001 From: Ricardo Martins Date: Thu, 28 Jan 2016 11:52:51 +0000 Subject: [PATCH] filesystem: implemented proper Raspberry Pi 2 upgrade. --- rules/filesystem/fs/etc/rc.d/upgrade | 66 ++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/rules/filesystem/fs/etc/rc.d/upgrade b/rules/filesystem/fs/etc/rc.d/upgrade index 8e0db76..a630def 100644 --- a/rules/filesystem/fs/etc/rc.d/upgrade +++ b/rules/filesystem/fs/etc/rc.d/upgrade @@ -174,6 +174,71 @@ uboot_part_upgrade_check() return 0 } +rpi2_boot_part_upgrade() +{ + label="$1" + dev="$2" + + echo -en "* $label: probing bootloader partition... " + if ! [ -b "$dev" ]; then + echo 'not present' + return 0 + fi + echo 'present' + + echo -en "* $label: mounting bootloader partition... " + mount -t vfat "$dev" /mnt > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "failed" + return 0 + fi + echo 'done' + + for f in bootcode.bin cmdline.txt config.txt fixup.dat start.elf; do + if [ -f "/mnt/$f" ]; then + echo -en "* $label: Replacing $f... " + cp "$base/.glued-new/boot/$f" /mnt + echo 'done' + fi + done + + dtb="bcm2709-rpi-2-b.dtb" + if [ -f "/mnt/$dtb" ]; then + echo -en "* $label: Replacing $dtb... " + cp "$base/.glued-new/boot/board.dtb" "/mnt/$dtb" + echo 'done' + fi + + kernel='kernel7.img' + if [ -f "/mnt/$kernel" ]; then + echo -en "* $label: Replacing $kernel... " + cp "$base/.glued-new/boot/kernel" "/mnt/$kernel" + echo 'done' + fi + + echo -en "* $label: unmounting bootloader partition... " + umount /mnt > /dev/null 2>&1 + if [ $? -ne 0 ]; then + echo 'failed' + return 1 + fi + + sync && sync && sync && sync + echo 'done' + return 0 +} + +# Check if board is a Raspberry Pi 2. +rpi2_boot_part_upgrade_check() +{ + dmesg | grep Machine | grep BCM2709 > /dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "* rpi2: machine detected" + rpi2_boot_part_upgrade "rpi2" "/dev/mmcblk0p1" + return 0 + fi +} + old_move() { echo "* Mounting rootfs read-write..." @@ -222,6 +287,7 @@ start() kernel_dst || return 1 new_unpack || return 1 uboot_part_upgrade_check || return 1 + rpi2_boot_part_upgrade_check || return 1 kernel_upgrade || return 1 old_move || return 1 }