#!/bin/bash target_rootfs=/dev/sda2 target_kern=/dev/sda1 set -x kernel_image=/boot/vmlinuz-`uname -r` ls ${kernel_image} ls_boot=$? echo "console=tty1 debug verbose root=${target_rootfs} rootwait rw lsm.module_locking=0" > /tmp/config if [ ${ls_boot} -eq 0 ] then echo "Packing kernel" vbutil_kernel --pack /tmp/newkern \ --keyblock /usr/share/vboot/devkeys/kernel.keyblock \ --version 1 \ --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \ --config /tmp/config \ --vmlinuz ${kernel_image} \ --arch arm else echo "Repacking running kernel" # need to use "cgpt show /dev/mmcblk0" to determine kernel with highest priority to choose which one to copy. We are assuming partitions 2 and 4 are kernels ptwo=`cgpt show -i 2 -P /dev/mmcblk0` pfour=`cgpt show -i 4 -P /dev/mmcblk0` echo "Priority of partition 2 is ${ptwo}, priority of partition 4 is ${pfour}" rblock=2 if [ ${two} -eq 0] then rblock=4 else if [ ${pfour} -lt ${ptwo} ] then if [ ${pfour} -ne 0 ] then rblock=4 fi fi fi echo "Determined that partition ${rblock} is running kernel" dd if=/dev/mmcblk0p${rblock} of=/tmp/oldblob echo "Repacking running kernel" vbutil_kernel --repack /tmp/newkern \ --keyblock /usr/share/vboot/devkeys/kernel.keyblock \ --version 1 \ --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \ --config /tmp/config \ --oldblob /tmp/oldblob fi if [ $? -ne 0 ] then echo "vbutil_kernel failed" exit 99 fi echo "Copying new kernel to $target_kern" dd if=/tmp/newkern of=$target_kern