2020-01-14 17:45:44 +00:00
|
|
|
RAMFS_COPY_BIN='grub-bios-setup'
|
|
|
|
|
2007-08-21 18:23:57 +00:00
|
|
|
platform_check_image() {
|
2017-05-03 06:57:29 +00:00
|
|
|
local diskdev partdev diff
|
2014-06-02 12:43:22 +00:00
|
|
|
[ "$#" -gt 1 ] && return 1
|
2007-08-21 18:23:57 +00:00
|
|
|
|
|
|
|
case "$(get_magic_word "$1")" in
|
2017-05-03 06:57:29 +00:00
|
|
|
eb48|eb63) ;;
|
2007-08-21 18:23:57 +00:00
|
|
|
*)
|
2020-11-03 03:03:31 +00:00
|
|
|
v "Invalid image type"
|
2007-08-21 18:23:57 +00:00
|
|
|
return 1
|
|
|
|
;;
|
|
|
|
esac
|
2017-05-03 06:57:29 +00:00
|
|
|
|
|
|
|
export_bootdevice && export_partdevice diskdev 0 || {
|
2020-11-03 03:03:31 +00:00
|
|
|
v "Unable to determine upgrade device"
|
2017-05-03 06:57:29 +00:00
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
|
|
|
get_partitions "/dev/$diskdev" bootdisk
|
|
|
|
|
2020-11-03 03:41:44 +00:00
|
|
|
v "Extract boot sector from the image"
|
2020-11-03 03:39:59 +00:00
|
|
|
get_image_dd "$1" of=/tmp/image.bs count=63 bs=512b
|
2017-05-03 06:57:29 +00:00
|
|
|
|
|
|
|
get_partitions /tmp/image.bs image
|
|
|
|
|
|
|
|
#compare tables
|
|
|
|
diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
|
|
|
|
|
|
|
|
rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
|
|
|
|
|
|
|
|
if [ -n "$diff" ]; then
|
2020-11-03 03:03:31 +00:00
|
|
|
v "Partition layout has changed. Full image will be written."
|
2017-05-03 06:57:29 +00:00
|
|
|
ask_bool 0 "Abort" && exit 1
|
|
|
|
return 0
|
|
|
|
fi
|
2007-08-21 18:23:57 +00:00
|
|
|
}
|
|
|
|
|
2012-06-19 22:36:53 +00:00
|
|
|
platform_copy_config() {
|
2020-03-26 06:05:33 +00:00
|
|
|
local partdev parttype=ext4
|
2016-05-24 10:07:02 +00:00
|
|
|
|
2016-12-31 17:06:37 +00:00
|
|
|
if export_partdevice partdev 1; then
|
2020-03-26 06:05:33 +00:00
|
|
|
part_magic_fat "/dev/$partdev" && parttype=vfat
|
|
|
|
mount -t $parttype -o rw,noatime "/dev/$partdev" /mnt
|
2019-09-05 21:33:19 +00:00
|
|
|
cp -af "$UPGRADE_BACKUP" "/mnt/$BACKUP_FILE"
|
2015-03-24 10:08:12 +00:00
|
|
|
umount /mnt
|
|
|
|
fi
|
2012-06-19 22:36:53 +00:00
|
|
|
}
|
|
|
|
|
2020-01-14 17:45:44 +00:00
|
|
|
platform_do_bootloader_upgrade() {
|
2020-03-26 06:05:33 +00:00
|
|
|
local bootpart parttable=msdos
|
2020-01-14 17:45:44 +00:00
|
|
|
local diskdev="$1"
|
|
|
|
|
|
|
|
if export_partdevice bootpart 1; then
|
|
|
|
mkdir -p /tmp/boot
|
|
|
|
mount -o rw,noatime "/dev/$bootpart" /tmp/boot
|
|
|
|
echo "(hd0) /dev/$diskdev" > /tmp/device.map
|
2020-03-26 06:05:33 +00:00
|
|
|
part_magic_efi "/dev/$diskdev" && parttable=gpt
|
2020-01-14 17:45:44 +00:00
|
|
|
|
2020-11-03 03:03:31 +00:00
|
|
|
v "Upgrading bootloader on /dev/$diskdev..."
|
2020-01-14 17:45:44 +00:00
|
|
|
grub-bios-setup \
|
|
|
|
-m "/tmp/device.map" \
|
|
|
|
-d "/tmp/boot/boot/grub" \
|
2020-03-26 06:05:33 +00:00
|
|
|
-r "hd0,${parttable}1" \
|
2020-01-14 17:45:45 +00:00
|
|
|
"/dev/$diskdev" \
|
2020-11-02 13:04:24 +00:00
|
|
|
&& touch /tmp/boot/boot/grub/upgraded
|
2020-01-14 17:45:44 +00:00
|
|
|
|
x86: add support for Meraki MX100
This commit will add support for the Meraki MX100 in OpenWRT.
Specs:
* CPU: Intel Xeon E3-1200 Series 1.5GHz 2C/4T
* Memory: 4GB DDR3 1600 ECC
* Storage: 1GB USB NAND, 1TB SATA HDD
* Wireless: None
* Wired: 10x 1Gb RJ45, 2x 1Gb SFP
UART:
The UART header is named CONN11 and is found in the
center of the mainboard. The pinout from Pin 1 (marked
with a black triangle) to pin 4 is below:
Pin 1: VCC
Pin 2: TX
Pin 3: RX
Pin 4: GND
Note that VCC is not required for UART on this device.
Booting:
1. Flash/burn one of the images from this repo to a
flash drive.
2. Take the top off the MX100, and unplug the SATA
cable from the HDD.
3. Hook up UART to the MX100, plug in the USB drive,
and then power up the device.
4. At the BIOS prompt, quickly press F7 and then
scroll to the Save & Exit tab.
5. Scroll down to Boot Override, and select the
UEFI entry for your jumpdrive.
Note: UEFI booting will fail if the SATA cable for
the HDD is plugged in.
The issue is explained under the Flashing instructions.
Flashing:
1. Ensure the MX100 is powered down, and not plugged
into power.
2. Take the top off the MX100, and unplug the SATA
cable from the HDD.
3. Using the Mini USB female port found by the SATA
port on the motherboard,
flash one of the images to the system. Example:
`dd if=image of=/dev/sdb conv=fdatasync` where sdb
is the USB device for the MX100's NAND.
4. Unplug the Mini USB, hook up UART to the MX100,
and then power up the device.
5. At the BIOS prompt, quickly press F7 and then
scroll to the Boot tab.
6. Change the boot order and set UEFI: USB DISK 2.0
as first, and USB DISK 2.0 as second.
Disable the other boot options.
7. Go to Save & Exit, and then select Save Changes and
Reset
Note that OpenWRT will fail to boot in UEFI mode when
the SATA hard drive is plugged in. To fix this, boot
with the SATA disk unplugged and then run the following
command:
`sed -i "s|hd0,gpt1|hd1,gpt1|g" boot/grub/grub.cfg`
Once the above is ran, OpenWRT will boot when the HDD
is plugged into SATA. The reason this happens is the
UEFI implementation for the MX100 will always set
anything on SATA to HD0 instead of the onboard USB
storage, so we have to accomidate it since OpenWRT's
GRUB does not support detecting a boot disk via UUID.
Signed-off-by: Chris Blake <chrisrblake93@gmail.com>
2021-10-01 14:38:56 +00:00
|
|
|
case "$(board_name)" in
|
|
|
|
cisco-mx100-hw)
|
|
|
|
# If the MX100 is booted UEFI AND the SATA HDD exists, we need to change
|
|
|
|
# grub's root= to hd1 for it to boot correctly, otherwise we can keep it hd0.
|
|
|
|
if [ -d /sys/firmware/efi ] && [ "$(ls -a /dev/sd[a-z] | wc -w)" -gt 1 ] ; then
|
|
|
|
sed -i "s|hd0,${parttable}1|hd1,${parttable}1|g" /tmp/boot/boot/grub/grub.cfg
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2020-01-14 17:45:44 +00:00
|
|
|
umount /tmp/boot
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2012-06-19 22:36:53 +00:00
|
|
|
platform_do_upgrade() {
|
2017-01-25 07:13:11 +00:00
|
|
|
local diskdev partdev diff
|
2012-06-19 22:36:53 +00:00
|
|
|
|
2017-05-03 07:05:25 +00:00
|
|
|
export_bootdevice && export_partdevice diskdev 0 || {
|
2020-11-03 03:03:31 +00:00
|
|
|
v "Unable to determine upgrade device"
|
2017-05-03 07:05:25 +00:00
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
|
|
|
sync
|
|
|
|
|
2019-08-16 15:02:58 +00:00
|
|
|
if [ "$UPGRADE_OPT_SAVE_PARTITIONS" = "1" ]; then
|
2017-05-03 07:05:25 +00:00
|
|
|
get_partitions "/dev/$diskdev" bootdisk
|
|
|
|
|
2020-11-03 03:41:44 +00:00
|
|
|
v "Extract boot sector from the image"
|
2020-11-03 03:39:59 +00:00
|
|
|
get_image_dd "$1" of=/tmp/image.bs count=63 bs=512b
|
2017-05-03 07:05:25 +00:00
|
|
|
|
|
|
|
get_partitions /tmp/image.bs image
|
|
|
|
|
|
|
|
#compare tables
|
|
|
|
diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
|
|
|
|
else
|
|
|
|
diff=1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -n "$diff" ]; then
|
2020-11-03 03:39:59 +00:00
|
|
|
get_image_dd "$1" of="/dev/$diskdev" bs=4096 conv=fsync
|
2017-05-03 07:08:29 +00:00
|
|
|
|
|
|
|
# Separate removal and addtion is necessary; otherwise, partition 1
|
|
|
|
# will be missing if it overlaps with the old partition 2
|
|
|
|
partx -d - "/dev/$diskdev"
|
|
|
|
partx -a - "/dev/$diskdev"
|
|
|
|
|
2017-05-03 07:05:25 +00:00
|
|
|
return 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
#iterate over each partition from the image and write it to the boot disk
|
|
|
|
while read part start size; do
|
|
|
|
if export_partdevice partdev $part; then
|
2020-11-03 03:03:31 +00:00
|
|
|
v "Writing image to /dev/$partdev..."
|
2020-11-03 03:39:59 +00:00
|
|
|
get_image_dd "$1" of="/dev/$partdev" ibs=512 obs=1M skip="$start" count="$size" conv=fsync
|
2016-02-09 12:33:17 +00:00
|
|
|
else
|
2020-11-03 03:03:31 +00:00
|
|
|
v "Unable to find partition $part device, skipped."
|
2016-02-09 12:33:17 +00:00
|
|
|
fi
|
2017-05-03 07:05:25 +00:00
|
|
|
done < /tmp/partmap.image
|
2016-02-09 12:33:17 +00:00
|
|
|
|
2020-11-03 03:03:31 +00:00
|
|
|
v "Writing new UUID to /dev/$diskdev..."
|
2020-11-03 03:39:59 +00:00
|
|
|
get_image_dd "$1" of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync
|
2020-01-14 17:45:44 +00:00
|
|
|
|
|
|
|
platform_do_bootloader_upgrade "$diskdev"
|
2020-03-26 06:05:33 +00:00
|
|
|
local parttype=ext4
|
|
|
|
part_magic_efi "/dev/$diskdev" || return 0
|
|
|
|
|
|
|
|
if export_partdevice partdev 1; then
|
|
|
|
part_magic_fat "/dev/$partdev" && parttype=vfat
|
|
|
|
mount -t $parttype -o rw,noatime "/dev/$partdev" /mnt
|
|
|
|
set -- $(dd if="/dev/$diskdev" bs=1 skip=1168 count=16 2>/dev/null | hexdump -v -e '8/1 "%02x "" "2/1 "%02x""-"6/1 "%02x"')
|
|
|
|
sed -i "s/\(PARTUUID=\)[a-f0-9-]\+/\1$4$3$2$1-$6$5-$8$7-$9/ig" /mnt/boot/grub/grub.cfg
|
|
|
|
umount /mnt
|
|
|
|
fi
|
2007-08-21 18:23:57 +00:00
|
|
|
}
|