Index: src/platform/installer/chromeos-common.sh |
diff --git a/src/platform/installer/chromeos-common.sh b/src/platform/installer/chromeos-common.sh |
index 0baf440bf1f83704fcf54c8465aec2d75442fbf6..83fb0348efc51c36d77db5c28e93c77c4ba2a01b 100644 |
--- a/src/platform/installer/chromeos-common.sh |
+++ b/src/platform/installer/chromeos-common.sh |
@@ -28,11 +28,11 @@ numsectors() { |
/dev/*[0-9]) |
dnum=${1##*/} |
dev=${dnum%%[0-9]*} |
- cat /sys/block/$dev/$dnum/size |
+ cat /sys/block/$dev/$dnum/size |
;; |
/dev/*) |
dev=${1##*/} |
- cat /sys/block/$dev/size |
+ cat /sys/block/$dev/size |
;; |
*) |
local bytes=$(stat -c%s "$1") |
@@ -43,7 +43,7 @@ numsectors() { |
fi |
echo $sectors |
;; |
- esac |
+ esac |
} |
# Round a number of 512-byte sectors up to an integral number of 4096-byte |
@@ -95,7 +95,7 @@ fi |
# components. If the target is a block device or the FORCE_FULL arg is "true" |
# we'll do a full install. Otherwise, it'll be just enough to boot. |
# Invoke as: command (not subshell) |
-# Args: TARGET ROOTFS_IMG KERNEL_IMG STATEFUL_IMG PMBRCODE FORCE_FULL |
+# Args: TARGET ROOTFS_IMG KERNEL_IMG STATEFUL_IMG PMBRCODE ESP_IMG FORCE_FULL |
# Return: nothing |
# Side effects: Sets these global variables describing the GPT partitions |
# (all untis are 512-byte sectors): |
@@ -103,19 +103,22 @@ fi |
# NUM_ROOTFS_SECTORS |
# NUM_STATEFUL_SECTORS |
# NUM_RESERVED_SECTORS |
+# NUM_ESP_SECTORS |
# START_KERN_A |
# START_STATEFUL |
# START_ROOTFS_A |
# START_KERN_B |
# START_ROOTFS_B |
# START_RESERVED |
+# START_ESP |
install_gpt() { |
local outdev=$1 |
local rootfs_img=$2 |
local kernel_img=$3 |
local stateful_img=$4 |
local pmbrcode=$5 |
- local force_full="${6:-}" |
+ local esp_img=$6 |
+ local force_full="${7:-}" |
# The gpt tool requires a fixed-size target to work on, so we may have to |
# create a file of the appropriate size. Let's figure out what that size is |
@@ -149,6 +152,7 @@ install_gpt() { |
local max_kern_sectors=32768 # 16M |
local max_rootfs_sectors=2097152 # 1G |
local max_reserved_sectors=131072 # 64M |
+ local max_esp_sectors=32768 # 16M |
local min_stateful_sectors=262144 # 128M, expands to fill available space |
local num_pmbr_sectors=1 |
@@ -171,12 +175,14 @@ install_gpt() { |
# Full install, use max sizes and create both A & B images. |
NUM_KERN_SECTORS=$max_kern_sectors |
NUM_ROOTFS_SECTORS=$max_rootfs_sectors |
+ NUM_ESP_SECTORS=$max_esp_sectors |
NUM_RESERVED_SECTORS=$max_reserved_sectors |
# Where do things go? |
START_KERN_A=$start_useful |
START_KERN_B=$(($START_KERN_A + $NUM_KERN_SECTORS)) |
- START_RESERVED=$(($START_KERN_B + $NUM_KERN_SECTORS)) |
+ START_ESP=$(($START_KERN_B + $NUM_KERN_SECTORS)) |
+ START_RESERVED=$(($START_ESP + $NUM_ESP_SECTORS)) |
START_STATEFUL=$(($START_RESERVED + $NUM_RESERVED_SECTORS)) |
local total_sectors=$(numsectors $outdev) |
@@ -196,10 +202,12 @@ install_gpt() { |
NUM_KERN_SECTORS=$(roundup $(numsectors $kernel_img)) |
NUM_ROOTFS_SECTORS=$(roundup $(numsectors $rootfs_img)) |
NUM_STATEFUL_SECTORS=$(roundup $(numsectors $stateful_img)) |
+ NUM_ESP_SECTORS=$(roundup $(numsectors $esp_img)) |
NUM_RESERVED_SECTORS=0 |
START_KERN_A=$start_useful |
- START_STATEFUL=$(($START_KERN_A + $NUM_KERN_SECTORS)) |
+ START_ESP=$(($START_KERN_A + $NUM_KERN_SECTORS)) |
+ START_STATEFUL=$(($START_ESP + $NUM_ESP_SECTORS)) |
START_ROOTFS_A=$(($START_STATEFUL + $NUM_STATEFUL_SECTORS)) |
START_KERN_B="" |
START_ROOTFS_B="" |
@@ -226,38 +234,44 @@ install_gpt() { |
count=$num_header_sectors |
$sudo dd if=/dev/zero of=${outdev} conv=notrunc bs=512 \ |
seek=${start_gpt_footer} count=$num_footer_sectors |
- |
+ |
# Create the new GPT partitions. The order determines the partition number. |
# Note that the partition label is in the GPT only. The filesystem label is |
# what's used to populate /dev/disk/by-label/, and this is not that. |
$sudo $GPT create ${outdev} |
- |
+ |
$sudo $GPT add -b ${START_STATEFUL} -s ${NUM_STATEFUL_SECTORS} \ |
-t ${STATEFUL_GUID} ${outdev} |
$sudo $GPT label -i 1 -l "STATE" ${outdev} |
- |
+ |
$sudo $GPT add -b ${START_KERN_A} -s ${NUM_KERN_SECTORS} \ |
-t ${KERN_GUID} ${outdev} |
$sudo $GPT label -i 2 -l "KERN-A" ${outdev} |
- |
+ |
$sudo $GPT add -b ${START_ROOTFS_A} -s ${NUM_ROOTFS_SECTORS} \ |
-t ${ROOTFS_GUID} ${outdev} |
$sudo $GPT label -i 3 -l "ROOT-A" ${outdev} |
- |
+ |
# add the rest of the partitions for a full install |
if [ -n "$START_KERN_B" ]; then |
$sudo $GPT add -b ${START_KERN_B} -s ${NUM_KERN_SECTORS} \ |
-t ${KERN_GUID} ${outdev} |
$sudo $GPT label -i 4 -l "KERN-B" ${outdev} |
- |
+ |
$sudo $GPT add -b ${START_ROOTFS_B} -s ${NUM_ROOTFS_SECTORS} \ |
-t ${ROOTFS_GUID} ${outdev} |
$sudo $GPT label -i 5 -l "ROOT-B" ${outdev} |
fi |
+ # add the ESP partition |
+ $sudo $GPT add -b ${START_ESP} -s ${NUM_ESP_SECTORS} \ |
+ -t ${ESP_GUID} ${outdev} |
+ # FIXME: no label because I've lost count of the partition number |
+ # I'll fix this when I've modified gpt to accept a label arg to 'add'. |
+ |
# Create the PMBR and instruct it to boot ROOT-A |
$sudo $GPT boot -i 3 -b ${pmbrcode} ${outdev} |
- |
+ |
# Display what we've got |
$sudo $GPT -r show -l ${outdev} |