Skip to content

Commit

Permalink
image-types_uboot: Package a self contained netboot image
Browse files Browse the repository at this point in the history
Create a cpio containing the base read-only image, and create a
single combined initramfs image consisting of the image-rofs
and the existing initramfs.

There has been a desire to have a self contained netboot image present
for developer testing and experimentation.   The init script already
supports having the rofs layer sourced from a file packaged into the
initramfs, and will use it if found.

While this image will not fit in the current flash layout in
the initrd space, it will load over the network.  This method
leaves the squashfs compressed in RAM, decompreses is invoked as
needed at runtime, trading boot time and memory space for runtime
decompress on demand.  This will also give similar file access
overheads and performance to reading the data from flash.

Because the rofs is already compressed with xz compression,
don't try to compress this cpio (the cpio packaging adds about 40
bytes of ascii before and after, plus some alignment padding).
Because the kernel requires uncompressed cpios to appear on a
4-byte boundary with 0 byte fill between archives, place this
cpio first in the combined image.

Signed-off-by: Milton Miller <miltonm@us.ibm.com>
  • Loading branch information
mdmillerii committed Jun 16, 2016
1 parent fc10043 commit 5e538fe
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions meta-phosphor/classes/obmc-phosphor-image_types_uboot.bbclass
Expand Up @@ -51,6 +51,8 @@ do_generate_flash() {
uinitrd="${initrd}.u-boot"
rootfs="${IMAGE_LINK_NAME}.${IMAGE_BASETYPE}"
rwfs="rwfs.${OVERLAY_BASETYPE}"
rofsimg=rofs.${IMAGE_BASETYPE}.cpio
netimg=initramfs-netboot.cpio

if [ ! -f $ddir/$kernel ]; then
bbfatal "Kernel file ${ddir}/${kernel} does not exist"
Expand Down Expand Up @@ -94,4 +96,12 @@ do_generate_flash() {

tar -h -cvf ${ddir}/${MACHINE}-${DATETIME}.all.tar -C ${ddir} image-bmc
tar -h -cvf ${ddir}/${MACHINE}-${DATETIME}.tar -C ${ddir} image-u-boot image-kernel image-initramfs image-rofs image-rwfs

# Package the root image (rofs layer) with the initramfs for net booting.
# Uses the symlink above to get the desired name in the cpio
( cd $ddir && echo image-rofs | cpio -oHnewc -L > ${rofsimg} )
# Prepend the rofs cpio -- being uncompressed it must be 4-byte aligned
cat ${ddir}/${rofsimg} ${ddir}/${initrd} > ${ddir}/${netimg}
oe_mkimage "${netimg}" "${INITRD_CTYPE}"

}

0 comments on commit 5e538fe

Please sign in to comment.