Skip to content

Instantly share code, notes, and snippets.

@tdm
Created February 9, 2020 21:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tdm/93328f9c43cef3a2735a854b56183f00 to your computer and use it in GitHub Desktop.
Save tdm/93328f9c43cef3a2735a854b56183f00 to your computer and use it in GitHub Desktop.
#!/bin/sh
if [ $# -ne 1 ]; then
echo "Usage: repackbootimg <name>" 1>&2
exit 1
fi
name="$1"
newname="new$1"
for f in "$name.img-zImage" "$name.img-base" "$name.img-cmdline" "$name.img-ramdisk_offset" "$name.img-dt"; do
if [ ! -f "$f" ]; then
echo "File $f does not exist" 1>&2
exit 1
fi
done
if [ -d "initrd" ]; then
(cd initrd; find . | cpio -H newc -R 0.0 -o | gzip > "../$newname.img-ramdisk.gz")
else
if [ ! -f "$name.img-ramdisk.gz" ]; then
echo "Cannot find ramdisk" 1>&2
exit 1
fi
echo "Directory initrd not found: not repacking ramdisk"
cp "$name.img-ramdisk.gz" "$newname.img-ramdisk.gz"
fi
if [ -f "$name.img-os_version" -a -f "$name.img-os_patch_level" ]; then
os_version=$(cat $name.img-os_version)
os_patch_level=$(cat $name.img-os_patch_level)
else
os_version=0
os_patch_level=0
fi
base="0x$(cat $name.img-base)"
koff="0x$(cat $name.img-kernel_offset)"
pgsz="$(cat $name.img-pagesize)"
cmd="$(cat $name.img-cmdline)"
rdimg="$newname.img-ramdisk.gz"
rdoff="0x$(cat $name.img-ramdisk_offset)"
# DT is optional
dtparam=""
if [ -f "$name.img-dt" ]; then
dtsz=$(stat -c "%s" "$name.img-dt")
if [ "$dtsz" -gt "$pgsz" ]; then
dtparam="--dt $name.img-dt"
fi
fi
mkbootimg \
--kernel "$name.img-zImage" \
--base "$base" \
--kernel_offset "$koff" \
--pagesize "$pgsz" \
--cmdline "$cmd" \
--ramdisk "$rdimg" \
--ramdisk_offset "$rdoff" \
$dtparam \
--os_version $os_version \
--os_patch_level $os_patch_level \
-o "$newname.img"
origsz=$(stat -c "%s" "$newname.img")
origmb=$((origsz / 1048576))
paddedsz=$((origmb * 1048576))
if [ "$origsz" -ne "$paddedsz" ]; then
paddedmb=$((origmb+1))
paddedsz=$((paddedmb * 1048576))
padbytes=$((paddedsz - origsz))
dd "if=/dev/zero" "bs=$padbytes" "count=1" 2>/dev/null >> "$newname.img"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment