| Index: src/platform/installer/chromeos-common.sh
|
| diff --git a/src/platform/installer/chromeos-common.sh b/src/platform/installer/chromeos-common.sh
|
| index 83fb0348efc51c36d77db5c28e93c77c4ba2a01b..4cec35973f07b4dcc4530b92b7a1865acc19ced1 100644
|
| --- a/src/platform/installer/chromeos-common.sh
|
| +++ b/src/platform/installer/chromeos-common.sh
|
| @@ -24,17 +24,17 @@ ESP_GUID='28732ac1-1ff8-d211-ba4b-00a0c93ec93b'
|
| # Args: FILENAME
|
| # Return: whole number of sectors needed to fully contain FILENAME
|
| numsectors() {
|
| - case $1 in
|
| - /dev/*[0-9])
|
| - dnum=${1##*/}
|
| - dev=${dnum%%[0-9]*}
|
| - cat /sys/block/$dev/$dnum/size
|
| - ;;
|
| - /dev/*)
|
| + if [ -b "${1}" ]; then
|
| dev=${1##*/}
|
| - cat /sys/block/$dev/size
|
| - ;;
|
| - *)
|
| + if [ -e /sys/block/$dev/size ]; then
|
| + cat /sys/block/$dev/size
|
| + else
|
| + part=${1##*/}
|
| + block=$(get_block_dev_from_partition_dev "${1}")
|
| + block=${block##*/}
|
| + cat /sys/block/$block/$part/size
|
| + fi
|
| + else
|
| local bytes=$(stat -c%s "$1")
|
| local sectors=$(( $bytes / 512 ))
|
| local rem=$(( $bytes % 512 ))
|
| @@ -42,8 +42,7 @@ numsectors() {
|
| sectors=$(( $sectors + 1 ))
|
| fi
|
| echo $sectors
|
| - ;;
|
| - esac
|
| + fi
|
| }
|
|
|
| # Round a number of 512-byte sectors up to an integral number of 4096-byte
|
| @@ -330,3 +329,85 @@ partsize() {
|
| echo ${X#* }
|
| }
|
|
|
| +# Extract the whole disk block device from the partition device.
|
| +# This works for /dev/sda3 (-> /dev/sda) as well as /dev/mmcblk0p2
|
| +# (-> /dev/mmcblk0).
|
| +get_block_dev_from_partition_dev() {
|
| + local partition=$1
|
| + if ! (expr match "$partition" ".*[0-9]$" >/dev/null) ; then
|
| + echo "Invalid partition name: $partition" >&2
|
| + exit 1
|
| + fi
|
| + # Remove the last digit.
|
| + local block=$(echo "$partition" | sed -e 's/\(.*\)[0-9]$/\1/')
|
| + # If needed, strip the trailing 'p'.
|
| + if (expr match "$block" ".*[0-9]p$" >/dev/null); then
|
| + echo "${block%p}"
|
| + else
|
| + echo "$block"
|
| + fi
|
| +}
|
| +
|
| +# Extract the partition number from the partition device.
|
| +# This works for /dev/sda3 (-> 3) as well as /dev/mmcblk0p2 (-> 2).
|
| +get_partition_number() {
|
| + local partition=$1
|
| + if ! (expr match "$partition" ".*[0-9]$" >/dev/null) ; then
|
| + echo "Invalid partition name: $partition" >&2
|
| + exit 1
|
| + fi
|
| + # Extract the last digit.
|
| + echo "$partition" | sed -e 's/^.*\([0-9]\)$/\1/'
|
| +}
|
| +
|
| +# Construct a partition device name from a whole disk block device and a
|
| +# partition number.
|
| +# This works for [/dev/sda, 3] (-> /dev/sda3) as well as [/dev/mmcblk0, 2]
|
| +# (-> /dev/mmcblk0p2).
|
| +make_partition_dev() {
|
| + local block=$1
|
| + local num=$2
|
| + # If the disk block device ends with a number, we add a 'p' before the
|
| + # partition number.
|
| + if (expr match "$block" ".*[0-9]$" >/dev/null) ; then
|
| + echo "${block}p${num}"
|
| + else
|
| + echo "${block}${num}"
|
| + fi
|
| +}
|
| +
|
| +# Construct a PMBR for the arm platform, Uboot will load PMBR and "autoscr" it.
|
| +# Arguments List:
|
| +# $1 : Kernel Partition Offset.
|
| +# $2 : Kernel Partition Size ( in Sectors ).
|
| +# $3 : DEVICE
|
| +# Return file path of the generated PMBR.
|
| +
|
| +make_arm_mbr() {
|
| + # Create the U-Boot script to copy the kernel into memory and boot it.
|
| + local KERNEL_OFFSET=$(printf "0x%08x" ${1})
|
| + local KERNEL_SECS_HEX=$(printf "0x%08x" ${2})
|
| + local DEVICE=${3}
|
| +
|
| + BOOTARGS="root=/dev/mmcblk${DEVICE}p3"
|
| + BOOTARGS="${BOOTARGS} init=/sbin/init"
|
| + BOOTARGS="${BOOTARGS} console=ttySAC2,115200"
|
| + BOOTARGS="${BOOTARGS} mem=1024M"
|
| + BOOTARGS="${BOOTARGS} rootwait"
|
| +
|
| + MBR_SCRIPT="/var/tmp/mbr_script"
|
| + echo -e "echo\necho ---- ChromeOS Boot ----\necho\n" \
|
| + "setenv bootargs ${BOOTARGS}\n" \
|
| + "mmc read ${DEVICE} C0008000 $KERNEL_OFFSET $KERNEL_SECS_HEX\n" \
|
| + "bootm C0008000" > ${MBR_SCRIPT}
|
| + MKIMAGE="/usr/bin/mkimage"
|
| + if [ -x "$MKIMAGE" ]; then
|
| + MBR_SCRIPT_UIMG="${MBR_SCRIPT}.uimg"
|
| + "$MKIMAGE" -A "arm" -O linux -T script -a 0 -e 0 -n "COS boot" \
|
| + -d ${MBR_SCRIPT} ${MBR_SCRIPT_UIMG} >&2
|
| + else
|
| + echo "Error: u-boot mkimage not found or not executable." >&2
|
| + exit 1
|
| + fi
|
| + echo ${MBR_SCRIPT_UIMG}
|
| +}
|
|
|