blob: 9820724ff17062321a0d65d0af842fac5530b07e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# Image to use with u-boot as BIOS and OSTree deployment system
#inherit image_types
# Boot filesystem size in MiB
# OSTree updates may require some space on boot file system for
# boot scripts, kernel and initramfs images
#
BOOTFS_EXTRA_SIZE ?= "512"
export BOOTFS_EXTRA_SIZE
do_otaimg[depends] += "e2fsprogs-native:do_populate_sysroot \
parted-native:do_populate_sysroot \
virtual/kernel:do_deploy \
${INITRD_IMAGE}:do_rootfs \
${PN}:do_rootfs"
ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_BASENAME}-${MACHINE}.ext4"
INITRD_IMAGE ?= "core-image-minimal-initramfs"
INITRD ?= "${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE}-${MACHINE}.cpio.gz"
build_bootfs () {
KERNEL_FILE=${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}
KERNEL_SIZE=`du -Lbs ${KERNEL_FILE} | cut -f 1`
RAMDISK_FILE=${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE}-${MACHINE}.cpio.gz
RAMDISK_SIZE=`du -Lbs ${RAMDISK_FILE} | cut -f 1`
EXTRA_BYTES=$(expr $BOOTFS_EXTRA_SIZE \* 1024 \* 1024)
TOTAL_SIZE=$(expr ${KERNEL_SIZE} \+ ${RAMDISK_SIZE} \+ ${EXTRA_BYTES})
TOTAL_BLOCKS=$(expr 1 \+ $TOTAL_SIZE / 1024)
dd if=/dev/zero of=$1 bs=1024 count=${TOTAL_BLOCKS}
BOOTTMP=$(mktemp -d mkotaboot-XXX)
cp ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} ${BOOTTMP}
cp ${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE}-${MACHINE}.cpio.gz ${BOOTTMP}
mkfs.ext4 $1 -d ${BOOTTMP}
rm -rf $BOOTTMP
}
do_otaimg () {
BOOTIMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.otaboot.ext4
rm -f $BOOTIMG
build_bootfs $BOOTIMG
# ext4 image should be already here because of IMAGE_TYPEDEP_otaimg
ROOTIMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext4
BOOTFSBLOCKS=`du -bks ${BOOTIMG} | cut -f 1`
ROOTFSBLOCKS=`du -bks ${ROOTIMG} | cut -f 1`
TOTALSIZE=`expr $BOOTFSBLOCKS \+ $ROOTFSBLOCKS`
END1=`expr $BOOTFSBLOCKS \* 1024`
END2=`expr $END1 + 512`
END3=`expr \( $ROOTFSBLOCKS \* 1024 \) + $END1`
FULLIMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.otaimg
rm -rf ${FULLIMG}
dd if=/dev/zero of=${FULLIMG} bs=1024 seek=${TOTALSIZE} count=1
parted ${FULLIMG} mklabel msdos
parted ${FULLIMG} mkpart primary ext4 0 ${END1}B
parted ${FULLIMG} unit B mkpart primary ext4 ${END2}B ${END3}B
OFFSET=`expr $END2 / 512`
dd if=${BOOTIMG} of=${FULLIMG} conv=notrunc seek=1 bs=512
dd if=${ROOTIMG} of=${FULLIMG} conv=notrunc seek=$OFFSET bs=512
cd ${DEPLOY_DIR_IMAGE}
rm -f ${IMAGE_LINK_NAME}.otaimg
ln -s ${IMAGE_NAME}.otaimg ${IMAGE_LINK_NAME}.otaimg
}
addtask otaimg before do_build
IMAGE_TYPES += " otaimg"
IMAGE_TYPES_MASKED += "otaimg"
IMAGE_TYPEDEP_otaimg = "ext4"
|