159 lines
3.3 KiB
Bash
Executable File
159 lines
3.3 KiB
Bash
Executable File
#!/bin/bash -e
|
|
|
|
message() {
|
|
echo -e "\e[36m$@\e[0m"
|
|
}
|
|
|
|
fatal() {
|
|
echo -e "\e[31m$@\e[0m"
|
|
exit 1
|
|
}
|
|
|
|
# Get partition size limit, 0 means unlimited or not exists.
|
|
partition_size_kb() {
|
|
PART_SIZE="$(rk_partition_size "$1")"
|
|
echo $(( ${PART_SIZE:-0} / 2))
|
|
}
|
|
|
|
link_image() {
|
|
SRC="$1"
|
|
DST="$2"
|
|
message "Linking $DST from $SRC..."
|
|
ln -rsf "$SRC" "$DST"
|
|
}
|
|
|
|
pack_extra_partitions() {
|
|
for idx in $(seq 1 "$(rk_extra_part_num)"); do
|
|
# Skip built-in partitions
|
|
if rk_extra_part_builtin $idx; then
|
|
continue
|
|
fi
|
|
|
|
PART_NAME="$(rk_extra_part_name $idx)"
|
|
FS_TYPE="$(rk_extra_part_fstype $idx)"
|
|
SIZE="$(rk_extra_part_size $idx)"
|
|
FAKEROOT_SCRIPT="$(rk_extra_part_fakeroot_script $idx)"
|
|
OUTDIR="$(rk_extra_part_outdir $idx)"
|
|
DST="$(rk_extra_part_img $idx)"
|
|
|
|
if [ -z "$(rk_extra_part_src $idx)" ]; then
|
|
echo "Ignoring $PART_NAME for no sources"
|
|
continue
|
|
fi
|
|
|
|
rk_extra_part_prepare $idx
|
|
|
|
if [ "$SIZE" = max ]; then
|
|
SIZE="$(partition_size_kb "$PART_NAME")K"
|
|
if [ "$SIZE" = 0K ]; then
|
|
fatal "Unable to detect max size of $PART_NAME"
|
|
fi
|
|
|
|
echo "Using maxium size: $SIZE"
|
|
fi
|
|
|
|
sed -i '/mk-image.sh/d' "$FAKEROOT_SCRIPT"
|
|
echo "\"$SCRIPTS_DIR/mk-image.sh\" \
|
|
\"$OUTDIR\" \"$DST\" \"$FS_TYPE\" \
|
|
\"$SIZE\" \"$PART_NAME\"" >> "$FAKEROOT_SCRIPT"
|
|
|
|
message "Packing $DST from $FAKEROOT_SCRIPT"
|
|
cd "$OUTDIR"
|
|
fakeroot -- "$FAKEROOT_SCRIPT"
|
|
message "Done packing $DST"
|
|
done
|
|
}
|
|
|
|
build_firmware()
|
|
{
|
|
if ! which fakeroot &>/dev/null; then
|
|
echo "fakeroot not found! (sudo apt-get install fakeroot)"
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$RK_FIRMWARE_DIR" "$RK_SECURITY_FIRMWARE_DIR"
|
|
if [ "$RK_SECURITY" ]; then
|
|
FIRMWARE_DIR="$RK_SECURITY_FIRMWARE_DIR"
|
|
else
|
|
FIRMWARE_DIR="$RK_FIRMWARE_DIR"
|
|
fi
|
|
|
|
rm -rf "$RK_ROCKDEV_DIR"
|
|
ln -rsf "$FIRMWARE_DIR" "$RK_ROCKDEV_DIR"
|
|
|
|
"$SCRIPTS_DIR/check-grow-align.sh"
|
|
link_image "$CHIP_DIR/$RK_PARAMETER" "$RK_FIRMWARE_DIR/parameter.txt"
|
|
|
|
if [ "$RK_MISC_IMG" ]; then
|
|
link_image "$RK_IMAGE_DIR/$RK_MISC_IMG" \
|
|
"$RK_FIRMWARE_DIR/misc.img"
|
|
fi
|
|
|
|
pack_extra_partitions
|
|
|
|
if [ "$RK_SECURITY" ]; then
|
|
# Link non-security images
|
|
for f in $(ls "$RK_FIRMWARE_DIR/"); do
|
|
if [ -r "$FIRMWARE_DIR/$f" ]; then
|
|
continue
|
|
fi
|
|
|
|
link_image "$RK_FIRMWARE_DIR/$f" "$FIRMWARE_DIR/$f"
|
|
done
|
|
fi
|
|
|
|
echo "Packed files:"
|
|
for f in "$FIRMWARE_DIR"/*; do
|
|
NAME=$(basename "$f")
|
|
|
|
echo -n "$NAME"
|
|
if [ -L "$f" ]; then
|
|
echo -n "($(readlink -f "$f"))"
|
|
fi
|
|
|
|
FILE_SIZE=$(ls -lLh $f | xargs | cut -d' ' -f 5)
|
|
echo ": $FILE_SIZE"
|
|
|
|
echo "$NAME" | grep -q ".img$" || continue
|
|
|
|
# Assert the image's size smaller then the limit
|
|
PART_SIZE_KB="$(partition_size_kb "${NAME%.img}")"
|
|
[ ! "$PART_SIZE_KB" -eq 0 ] || continue
|
|
|
|
FILE_SIZE_KB="$(( $(stat -Lc "%s" "$f") / 1024 ))"
|
|
if [ "$PART_SIZE_KB" -lt "$FILE_SIZE_KB" ]; then
|
|
fatal "error: $NAME's size exceed parameter's limit!"
|
|
fi
|
|
done
|
|
|
|
message "Images in $FIRMWARE_DIR are ready!"
|
|
|
|
finish_build
|
|
}
|
|
|
|
# Hooks
|
|
|
|
usage_hook()
|
|
{
|
|
echo -e "firmware \tpack and check firmwares"
|
|
}
|
|
|
|
clean_hook()
|
|
{
|
|
rm -rf "$RK_FIRMWARE_DIR" "$RK_SECURITY_FIRMWARE_DIR" "$RK_ROCKDEV_DIR"
|
|
}
|
|
|
|
POST_BUILD_CMDS="firmware"
|
|
post_build_hook()
|
|
{
|
|
echo "=========================================="
|
|
echo " Start packing firmwares"
|
|
echo "=========================================="
|
|
|
|
build_firmware
|
|
}
|
|
|
|
source "${BUILD_HELPER:-$(dirname "$(realpath "$0")")/../build-hooks/build-helper}"
|
|
|
|
post_build_hook $@
|