From 110615446eaca5ca1d1efe50e0c18751cc8224be Mon Sep 17 00:00:00 2001 From: Denis Romanov Date: Tue, 29 Jun 2010 04:23:53 +0400 Subject: [PATCH] Added empty ext3 filesystem initialization for OEM partner partition. BUG=http://crosbug.com/3828 TEST=When mounted, /dev/sd8 (OEM partition) has a valid empty filesystem on it. Review URL: http://codereview.chromium.org/2867030 --- build_gpt.sh | 9 +++++++++ build_image | 45 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/build_gpt.sh b/build_gpt.sh index c333118bda..daef59e321 100755 --- a/build_gpt.sh +++ b/build_gpt.sh @@ -97,6 +97,12 @@ if [ ! -s ${STATEFUL_IMG} ]; then exit 1 fi +OEM_IMG="${IMAGEDIR}/partner_partition.image" +if [[ ! -s ${OEM_IMG} ]]; then + error "Can't find ${OEM_IMG}" + exit 1 +fi + ESP_IMG="${IMAGEDIR}/esp.image" if [ ! -s ${ESP_IMG} ]; then error "Can't find ${ESP_IMG}" @@ -142,6 +148,9 @@ echo "Copying stateful partition..." $sudo dd if=${STATEFUL_IMG} of=${OUTDEV} conv=notrunc bs=512 \ seek=${START_STATEFUL} +echo "Copying OEM partition..." +$sudo dd if=${OEM_IMG} of=${OUTDEV} conv=notrunc bs=512 seek=${START_OEM} + echo "Copying kernel..." $sudo dd if=${KERNEL_IMG} of=${OUTDEV} conv=notrunc bs=512 seek=${START_KERN_A} diff --git a/build_image b/build_image index 7303e9d4a9..983aa707fc 100755 --- a/build_image +++ b/build_image @@ -111,11 +111,15 @@ ROOT_FS_DIR="${OUTPUT_DIR}/rootfs" STATEFUL_FS_IMG="${OUTPUT_DIR}/stateful_partition.image" STATEFUL_FS_DIR="${OUTPUT_DIR}/stateful_partition" +OEM_FS_IMG="${OUTPUT_DIR}/partner_partition.image" +OEM_FS_DIR="${OUTPUT_DIR}/partner_partition" + ESP_FS_IMG=${OUTPUT_DIR}/esp.image ESP_FS_DIR=${OUTPUT_DIR}/esp LOOP_DEV= STATEFUL_LOOP_DEV= +OEM_LOOP_DEV= ESP_LOOP_DEV= # ${DEV_IMAGE_ROOT} specifies the location of where developer packages will @@ -187,6 +191,11 @@ cleanup_stateful_fs_loop() { sudo umount -d "${STATEFUL_FS_DIR}" } +cleanup_oem_fs_loop() { + sudo umount -d "${OEM_FS_DIR}" +} + + cleanup_esp_loop() { sudo umount -d "${ESP_FS_DIR}" } @@ -199,6 +208,10 @@ cleanup() { cleanup_stateful_fs_loop fi + if [[ -n "${OEM_LOOP_DEV}" ]]; then + cleanup_oem_fs_loop + fi + if [[ -n "${LOOP_DEV}" ]]; then cleanup_rootfs_loop fi @@ -363,14 +376,32 @@ create_base_image() { STATEFUL_SIZE_BYTES=$((1024 * 1024 * ${FLAGS_statefulfs_size})) dd if=/dev/zero of="${STATEFUL_FS_IMG}" bs=1 count=1 \ seek=$((STATEFUL_SIZE_BYTES - 1)) + + # Tune and mount the stateful partition. + UUID=$(uuidgen) + DISK_LABEL="C-STATE" sudo losetup "${STATEFUL_LOOP_DEV}" "${STATEFUL_FS_IMG}" sudo mkfs.ext3 "${STATEFUL_LOOP_DEV}" - sudo tune2fs -L "C-STATE" -U "${UUID}" -c 0 -i 0 \ - "${STATEFUL_LOOP_DEV}" - - # Mount the stateful partition. + sudo tune2fs -L "${DISK_LABEL}" -U "${UUID}" -c 0 -i 0 "${STATEFUL_LOOP_DEV}" sudo mount "${STATEFUL_LOOP_DEV}" "${STATEFUL_FS_DIR}" + # Create OEM partner partition. + OEM_LOOP_DEV=$(sudo losetup -f) + if [ -z "${OEM_LOOP_DEV}" ] ; then + echo "No free loop device. Free up a loop device or reboot. exiting. " + exit 1 + fi + OEM_SIZE_BYTES=$((1024 * 1024 * 16)) + dd if=/dev/zero of="${OEM_FS_IMG}" bs=1 count=1 seek=$((OEM_SIZE_BYTES - 1)) + + # Tune and mount OEM partner partition. + UUID=$(uuidgen) + DISK_LABEL="C-OEM" + sudo losetup "${OEM_LOOP_DEV}" "${OEM_FS_IMG}" + sudo mkfs.ext3 "${OEM_LOOP_DEV}" + sudo tune2fs -L "${DISK_LABEL}" -U "${UUID}" -c 0 -i 0 "${OEM_LOOP_DEV}" + sudo mount "${OEM_LOOP_DEV}" "${OEM_FS_DIR}" + # Turn root file system into bootable image. if [[ "${ARCH}" = "x86" ]]; then # Setup extlinux configuration. @@ -535,6 +566,7 @@ EOF mkdir -p "${OUTPUT_DIR}" mkdir -p "${ROOT_FS_DIR}" mkdir -p "${STATEFUL_FS_DIR}" +mkdir -p "${OEM_FS_DIR}" mkdir -p "${ESP_FS_DIR}" # Preserve old images by copying them forward for --preserve. @@ -571,8 +603,9 @@ fi # Clean up temporary files. rm -f "${ROOT_FS_IMG}" "${STATEFUL_FS_IMG}" "${OUTPUT_DIR}/vmlinuz.image" \ "${ESP_FS_IMG}" "${OUTPUT_DIR}/data4_sign8.keyblock" \ - "${OUTPUT_DIR}/key_alg4.vbpubk" "${OUTPUT_DIR}/key_alg8.vbpubk" -rmdir "${ROOT_FS_DIR}" "${STATEFUL_FS_DIR}" "${ESP_FS_DIR}" + "${OUTPUT_DIR}/key_alg4.vbpubk" "${OUTPUT_DIR}/key_alg8.vbpubk" \ + "${OEM_FS_IMG}" +rmdir "${ROOT_FS_DIR}" "${STATEFUL_FS_DIR}" "${OEM_FS_DIR}" "${ESP_FS_DIR}" echo "Done. Image created in ${OUTPUT_DIR}" echo "Chromium OS image created as ${PRISTINE_IMAGE_NAME}"