linuxOS_AP05/device/rockchip/common/post-build.sh
2025-06-02 13:59:07 +08:00

230 lines
5.5 KiB
Bash
Executable File

#!/bin/bash -e
echo "Executing $(basename "$0")..."
SCRIPT_PATH=$(realpath "$BASH_SOURCE")
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
TOP_DIR="$SCRIPT_DIR/../../.."
echo "Top of tree: $TOP_DIR"
source "$TOP_DIR/device/rockchip/.BoardConfig.mk"
TARGET_DIR=$(realpath "$1")
shift
FSTAB="$TARGET_DIR/etc/fstab"
OS_RELEASE="$TARGET_DIR/etc/os-release"
# The repo tool might not work when path is too long.
INFO_DIR=$(realpath --relative-base="$TOP_DIR" "$TARGET_DIR/info")
REBOOT_WRAPPER=busybox-reboot
RK_LEGACY_PARTITIONS=" \
${RK_OEM_FS_TYPE:+oem:/oem:$RK_OEM_FS_TYPE}
${RK_USERDATA_FS_TYPE:+userdata:/userdata:$RK_USERDATA_FS_TYPE}
"
# <dev>:<mount point>:<fs type>:<mount flags>:<source dir>:<image size(M|K|auto)>:[options]
# for example:
# RK_EXTRA_PARTITIONS="oem:/oem:ext2:defaults:oem_normal:256M:fixed
# userdata:/userdata:vfat:errors=remount-ro:userdata_empty:auto"
RK_EXTRA_PARTITIONS="${RK_EXTRA_PARTITIONS:-$RK_LEGACY_PARTITIONS}"
function fixup_root()
{
echo "Fixing up rootfs type: $1"
FS_TYPE=$1
sed -i "s#\([[:space:]]/[[:space:]]\+\)\w\+#\1${FS_TYPE}#" "$FSTAB"
}
function fixup_part()
{
echo "Fixing up partition: ${@//:/ }"
SRC="$1"
MOUNT="$2"
FS_TYPE="$3"
MOUNT_OPTS="$4"
PASS="$5"
# Remove old entries with same mountpoint
sed -i "/[[:space:]]${MOUNT//\//\\\/}[[:space:]]/d" "$FSTAB"
if [ "$SRC" != tmpfs ]; then
# Remove old entries with same source
sed -i "/^${SRC//\//\\\/}[[:space:]]/d" "$FSTAB"
fi
# Append new entry
echo -e "$SRC\t$MOUNT\t$FS_TYPE\t$MOUNT_OPTS\t0 $PASS" >> "$FSTAB"
mkdir -p "$TARGET_DIR/$MOUNT"
}
function fixup_basic_part()
{
echo "Fixing up basic partition: $@"
FS_TYPE="$1"
MOUNT="$2"
MOUNT_OPTS="${3:-defaults}"
fixup_part "$FS_TYPE" "$MOUNT" "$FS_TYPE" "$MOUNT_OPTS" 0
}
function partition_arg() {
PART="$1"
I="$2"
DEFAULT="$3"
ARG=$(echo $PART | cut -d':' -f"$I")
echo ${ARG:-$DEFAULT}
}
function fixup_device_part()
{
echo "Fixing up device partition: ${@//:/ }"
DEV="$(partition_arg "$*" 1)"
# Dev is either <name> or /dev/.../<name> or <UUID|LABEL|PARTLABEL>=xxx
[ "$DEV" ] || return 0
echo $DEV | grep -qE "^/|=" || DEV="LABEL=$DEV"
MOUNT="$(partition_arg "$*" 2 "/${DEV##*[/=]}")"
FS_TYPE="$(partition_arg "$*" 3 ext2)"
MOUNT_OPTS="$(partition_arg "$*" 4 defaults)"
fixup_part "$DEV" "$MOUNT" "$FS_TYPE" "$MOUNT_OPTS" 2
}
function fixup_fstab()
{
[ -f "$FSTAB" ] || return 0
echo "Fixing up /etc/fstab..."
cd "$TARGET_DIR"
case "$RK_ROOTFS_TYPE" in
ext[234])
fixup_root "$RK_ROOTFS_TYPE"
;;
*)
fixup_root auto
;;
esac
fixup_basic_part proc /proc
fixup_basic_part devtmpfs /dev
fixup_basic_part devpts /dev/pts mode=0620,ptmxmode=0666,gid=5
fixup_basic_part tmpfs /dev/shm nosuid,nodev,noexec
fixup_basic_part sysfs /sys
fixup_basic_part configfs /sys/kernel/config
fixup_basic_part debugfs /sys/kernel/debug
fixup_basic_part pstore /sys/fs/pstore
if echo "$TARGET_DIR" | grep -qE "_recovery/target/*$"; then
fixup_device_part /dev/sda1:/mnt/udisk:auto:defaults::
fixup_device_part /dev/mmcblk1p1:/mnt/sdcard:auto:defaults::
fi
for part in ${RK_EXTRA_PARTITIONS//@/ }; do
fixup_device_part $part
done
}
function fixup_os_release()
{
KEY=$1
shift
sed -i "/^$KEY=/d" "$OS_RELEASE"
echo "$KEY=\"$@\"" >> "$OS_RELEASE"
}
function kernel_version(){
VERSION_KEYS="VERSION PATCHLEVEL"
VERSION=""
for k in $VERSION_KEYS; do
v=$(grep "^$k = " $1/Makefile | cut -d' ' -f3)
VERSION=${VERSION:+$VERSION.}$v
done
echo ${VERSION:-unknown}
}
function add_build_info()
{
[ -f "$OS_RELEASE" ] || touch "$OS_RELEASE"
echo "Adding information to /etc/os-release..."
cd "$TOP_DIR"
KVER=$(kernel_version kernel/)
fixup_os_release BUILD_INFO "$(whoami)@$(hostname) $(date)${@:+ - $@}"
fixup_os_release KERNEL "$KVER - ${RK_KERNEL_DEFCONFIG:-unkown}"
mkdir -p "$INFO_DIR"
cp device/rockchip/.BoardConfig.mk "$INFO_DIR/BoardConfig.xml"
cp kernel/.config "$INFO_DIR/config-$KVER"
cp kernel/System.map "$INFO_DIR/System.map-$KVER"
EXTRA_FILES=" \
/etc/os-release /etc/fstab /var/log \
/tmp/usbdevice.log /tmp/bootanim.log \
/tmp/resize-all.log /tmp/mount-all.log \
/proc/version /proc/cmdline /proc/kallsyms /proc/interrupts /proc/cpuinfo \
/proc/softirqs /proc/device-tree /proc/diskstats /proc/iomem \
/proc/meminfo /proc/partitions /proc/slabinfo \
/proc/rk_dmabuf /proc/rkcif-mipi-lvds /proc/rkisp0-vir0 \
/sys/kernel/debug/wakeup_sources /sys/kernel/debug/clk/clk_summary \
/sys/kernel/debug/gpio /sys/kernel/debug/pinctrl/ \
/sys/kernel/debug/dma_buf /sys/kernel/debug/dri \
"
ln -sf $EXTRA_FILES "$INFO_DIR/"
}
function fixup_reboot()
{
echo "Fixup busybox reboot commands..."
cd "$TARGET_DIR"
[ $(readlink sbin/reboot) = busybox ] || return 0
install -D -m 0755 "$SCRIPT_DIR/data/$REBOOT_WRAPPER" sbin/$REBOOT_WRAPPER
for cmd in halt reboot poweroff shutdown; do
ln -sf $REBOOT_WRAPPER sbin/$cmd
done
}
function add_dirs_and_links()
{
echo "Adding dirs and links..."
cd "$TARGET_DIR"
rm -rf mnt/* udisk sdcard data
mkdir -p mnt/sdcard mnt/udisk
ln -sf udisk mnt/usb_storage
ln -sf sdcard mnt/external_sd
ln -sf mnt/udisk udisk
ln -sf mnt/sdcard sdcard
ln -sf userdata data
}
add_build_info $@
fixup_fstab
fixup_reboot
add_dirs_and_links
exit 0