| OLD | NEW |
| 1 #!/bin/bash | 1 #!/bin/bash |
| 2 # | 2 # |
| 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
| 6 # | 6 # |
| 7 # Script which ensures that a given image has an up-to-date | 7 # Script which ensures that a given image has an up-to-date |
| 8 # kernel partition, rootfs integrity hashes, and legacy bootloader configs. | 8 # kernel partition, rootfs integrity hashes, and legacy bootloader configs. |
| 9 | 9 |
| 10 # Load common constants. This should be the first executable line. | 10 # Load common constants. This should be the first executable line. |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 fi | 192 fi |
| 193 | 193 |
| 194 # START_KERN_A is set by the first call to install the gpt. | 194 # START_KERN_A is set by the first call to install the gpt. |
| 195 local koffset="$(partoffset ${image} 2)" | 195 local koffset="$(partoffset ${image} 2)" |
| 196 sudo dd if="${FLAGS_output_dir}/vmlinuz.image" of="${image}" \ | 196 sudo dd if="${FLAGS_output_dir}/vmlinuz.image" of="${image}" \ |
| 197 conv=notrunc bs=512 seek=${koffset} | 197 conv=notrunc bs=512 seek=${koffset} |
| 198 | 198 |
| 199 # Update the bootloaders. For legacy/efi x86, the EFI system partition | 199 # Update the bootloaders. For legacy/efi x86, the EFI system partition |
| 200 # will be updated and for arm, the mbr will be updated (for u-boot). | 200 # will be updated and for arm, the mbr will be updated (for u-boot). |
| 201 local kernel_part= | 201 local kernel_part= |
| 202 local bootloader_to= | |
| 203 local bootloader_to_flags= | |
| 204 local usb_disk="${FLAGS_usb_disk}" | 202 local usb_disk="${FLAGS_usb_disk}" |
| 205 | 203 |
| 204 # We should update the esp in place in the image. |
| 205 local bootloader_to="${image}" |
| 206 local esp_offset="$(partoffset ${image} 12)" |
| 207 esp_offset=$((esp_offset * 512)) # sectors to bytes |
| 208 local esp_size="$(partsize ${image} 12)" |
| 209 esp_size=$((esp_size * 512)) # sectors to bytes |
| 210 local bootloader_to_flags="--to_offset=${esp_offset} --to_size=${esp_size}" |
| 211 |
| 206 if [[ "${FLAGS_arch}" = "x86" ]]; then | 212 if [[ "${FLAGS_arch}" = "x86" ]]; then |
| 207 # x86 should update the esp in place in the image. | |
| 208 bootloader_to="${image}" | |
| 209 local esp_offset="$(partoffset ${image} 12)" | |
| 210 esp_offset=$((esp_offset * 512)) # sectors to bytes | |
| 211 local esp_size="$(partsize ${image} 12)" | |
| 212 esp_size=$((esp_size * 512)) # sectors to bytes | |
| 213 bootloader_to_flags="--to_offset=${esp_offset} --to_size=${esp_size}" | |
| 214 # Use the kernel partition to acquire configuration flags. | 213 # Use the kernel partition to acquire configuration flags. |
| 215 kernel_part="--kernel_partition='${FLAGS_output_dir}/vmlinuz.image'" | 214 kernel_part="--kernel_partition='${FLAGS_output_dir}/vmlinuz.image'" |
| 216 # Install syslinux on the EFI System Partition. | 215 # Install syslinux on the EFI System Partition. |
| 217 kernel_part="${kernel_part} --install_syslinux" | 216 kernel_part="${kernel_part} --install_syslinux" |
| 218 elif [[ "${FLAGS_arch}" = "arm" ]]; then | 217 elif [[ "${FLAGS_arch}" = "arm" ]]; then |
| 219 # TODO(wad) mmcblk1p3 is hardcoded for arm for now! | 218 # TODO(wad) mmcblk1p3 is hardcoded for arm for now! |
| 220 usb_disk="/dev/mmcblk1p3" | 219 usb_disk="/dev/mmcblk1p3" |
| 221 # ARM doesn't support using the kernel image for kernel cmdline flags yet. | 220 # ARM doesn't support using the kernel image for kernel cmdline flags yet. |
| 222 kernel_part="--kernel_cmdline=\"${FLAGS_arm_extra_bootargs}\" " | 221 kernel_part="--kernel_cmdline=\"${FLAGS_arm_extra_bootargs}\" " |
| 223 # TODO(wad) Integrate dmtable extraction into the arm build | 222 # TODO(wad) Integrate dmtable extraction into the arm build |
| 224 # E.g. $(cat ${FLAGS_output_dir}/boot.config | tr -s '\n' ' ')" | 223 # E.g. $(cat ${FLAGS_output_dir}/boot.config | tr -s '\n' ' ')" |
| 225 local kpart_offset="--kernel_partition_offset=${koffset}" | 224 local kpart_offset="--kernel_partition_offset=${koffset}" |
| 226 local kpart_size="--kernel_partition_sectors=" | 225 local kpart_size="--kernel_partition_sectors=" |
| 227 kpart_size="${kpart_size}$(partsize ${image} 2)" | 226 kpart_size="${kpart_size}$(partsize ${image} 2)" |
| 228 kernel_part="${kernel_part} ${kpart_size} ${kpart_offset}" | 227 kernel_part="${kernel_part} ${kpart_size} ${kpart_offset}" |
| 229 info "Using addition bootloader arguments: ${kernel_part}" | 228 info "Using addition bootloader arguments: ${kernel_part}" |
| 230 bootloader_to="${FLAGS_output_dir}/arm.mbr" | |
| 231 fi | 229 fi |
| 232 | 230 |
| 233 # Update partition 12 / legacy bootloaders and arm. | 231 # Update partition 12 |
| 234 ${SCRIPTS_DIR}/update_bootloaders.sh \ | 232 ${SCRIPTS_DIR}/update_bootloaders.sh \ |
| 235 --arch=${FLAGS_arch} \ | 233 --arch=${FLAGS_arch} \ |
| 236 --to="${bootloader_to}" \ | 234 --to="${bootloader_to}" \ |
| 237 --from="${FLAGS_rootfs_mountpoint}"/boot \ | 235 --from="${FLAGS_rootfs_mountpoint}"/boot \ |
| 238 --vmlinuz="${FLAGS_rootfs_mountpoint}"/boot/vmlinuz \ | 236 --vmlinuz="${FLAGS_rootfs_mountpoint}"/boot/vmlinuz \ |
| 239 --usb_disk="${usb_disk}" \ | 237 --usb_disk="${usb_disk}" \ |
| 240 ${bootloader_to_flags} \ | 238 ${bootloader_to_flags} \ |
| 241 $kernel_part | 239 $kernel_part |
| 242 | 240 |
| 243 if [[ "${FLAGS_arch}" == "arm" ]]; then | |
| 244 sudo dd bs=1 conv=notrunc if="${bootloader_to}" of="${image}" | |
| 245 sudo rm "${bootloader_to}" | |
| 246 fi | |
| 247 | |
| 248 trap - EXIT | 241 trap - EXIT |
| 249 ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${FLAGS_rootfs_mountpoint}" \ | 242 ${SCRIPTS_DIR}/mount_gpt_image.sh -u -r "${FLAGS_rootfs_mountpoint}" \ |
| 250 -s "${FLAGS_statefulfs_mountpoint}" | 243 -s "${FLAGS_statefulfs_mountpoint}" |
| 251 } | 244 } |
| 252 | 245 |
| 253 # Create the directories if they don't exist. | 246 # Create the directories if they don't exist. |
| 254 mkdir -p ${FLAGS_rootfs_mountpoint} | 247 mkdir -p ${FLAGS_rootfs_mountpoint} |
| 255 mkdir -p ${FLAGS_statefulfs_mountpoint} | 248 mkdir -p ${FLAGS_statefulfs_mountpoint} |
| 256 mkdir -p ${FLAGS_espfs_mountpoint} | 249 mkdir -p ${FLAGS_espfs_mountpoint} |
| 257 | 250 |
| 258 make_image_bootable ${IMAGE} | 251 make_image_bootable ${IMAGE} |
| 259 | 252 |
| 260 if [ ${FLAGS_cleanup_dirs} -eq ${FLAGS_TRUE} ]; then | 253 if [ ${FLAGS_cleanup_dirs} -eq ${FLAGS_TRUE} ]; then |
| 261 rmdir ${FLAGS_rootfs_mountpoint} | 254 rmdir ${FLAGS_rootfs_mountpoint} |
| 262 rmdir ${FLAGS_statefulfs_mountpoint} | 255 rmdir ${FLAGS_statefulfs_mountpoint} |
| 263 rmdir ${FLAGS_espfs_mountpoint} | 256 rmdir ${FLAGS_espfs_mountpoint} |
| 264 fi | 257 fi |
| OLD | NEW |