Last active
June 16, 2018 06:13
-
-
Save ollieparanoid/6eaaba3d520cf938cee10c72eb31f0a8 to your computer and use it in GitHub Desktop.
Append MediaTek header to boot.img files for Fairphone 1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh -e | |
# shellcheck disable=SC2039,SC2155 | |
# Copyright 2018 Oliver Smith | |
# SPDX-License-Identifier: GPL-3.0-or-later | |
script="$(basename "$0")" | |
label="$1" | |
input="$2" | |
output="$3" | |
temp="" | |
# $1: argument count | |
check_arguments() { | |
if [ "$1" -ne 3 ]; then | |
echo "usage: $script LABEL INPUT OUTPUT" | |
exit 1 | |
fi | |
if ! [ -e "$input" ]; then | |
echo "File not found: $input" | |
exit 1 | |
fi | |
if [ -e "$output" ]; then | |
echo "Output file already exists: $output" | |
exit 1 | |
fi | |
} | |
write_identifier() { | |
printf '\x88\x16\x88\x58' >> "$temp" | |
} | |
# $1: new file size | |
# $2: padding character code (377 for 0xFF, 000 for 0x00) | |
write_padding() { | |
# Missing byte count | |
local old="$(stat -c%s "$temp")" | |
local count="$(($1 - old))" | |
# Write to file | |
# This uses printf to generate $count white spaces, then replaces them with | |
# the desired character. shellcheck disable=SC2059 | |
printf "%0${count}s" "" | tr " " "\\$2" >> "$temp" | |
} | |
write_size() { | |
# File size as hexadecimal number | |
local int="$(stat -c%s "$input")" | |
local hex="$(printf '%x' "$int")" | |
# Format string with reversed byte order | |
local split="$(echo "$hex" | sed 's/.\{2\}/& /g')" | |
local formatstring="" | |
for byte in $split; do | |
formatstring="\\x$byte$formatstring" | |
done | |
# shellcheck disable=SC2059 | |
printf "$formatstring" >> "$temp" | |
write_padding "8" "000" | |
} | |
write_label() { | |
printf "%s" "$label" >> "$temp" | |
write_padding "40" "000" | |
} | |
write_header() { | |
write_identifier | |
write_size | |
write_label | |
write_padding "512" "377" | |
} | |
# $1: argument count | |
main() { | |
check_arguments "$1" | |
temp="$(mktemp -t mtkheaderXXXXXX)" | |
write_header | |
cat "$temp" "$input" > "$output" | |
rm "$temp" | |
} | |
main "$#" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment