mirror of
https://github.com/LuckfoxTECH/luckfox-pico.git
synced 2026-01-18 03:28:19 +01:00
4.6 KiB
Executable File
4.6 KiB
Executable File
#!/bin/bash
#
# SET ANSI COLORS {{{ START
C_RED=""
C_CYAN=""
C_BLUE=""
C_GREEN=""
C_WHITE=""
C_YELLOW=""
C_MAGENTA=""
C_NORMAL=""
# SET ANSI COLORS END }}}
set -e
cmd=`realpath $0`
cwd=`dirname $cmd`
CMD_VERSION=1.0.0
function msg_dbg()
{
if [ "$RK_DEBUG" != "1" ]; then
return
fi
echo -e "${C_CYAN}[$(basename $0):info] $*${C_NORMAL}" >&2
}
function msg_info()
{
echo -e "${C_GREEN}[$(basename $0):info] $1${C_NORMAL}" >&2
}
function msg_warn()
{
echo -e "${C_YELLOW}[$(basename $0):warn] $1${C_NORMAL}" >&2
}
function msg_error()
{
echo -e "${C_RED}[$(basename $0):error] $1${C_NORMAL}" >&2
}
function msg_help()
{
echo "command format:"
echo " `basename $cmd` -v -h --kernel --resource --its --dtb --output --arch"
echo " -v|--version (Optional) view this version."
echo " -h|--help (Optional) view this help message."
echo " --kernel (MUST) input kernel's image path."
echo " --resource (MUST) input resource.img path."
echo " --arch (MUST) kernel's arch (arm or arm64)."
echo " --its (MUST) input its file path."
echo " --dtb (MUST) input dtb file path."
echo " --output (MUST) output file path."
return
}
function chk_param()
{
local cnt
cnt=0
while [ $# -ne 0 ]
do
case $1 in
-v|--version)
msg_info "V$CMD_VERSION"
exit 0
;;
-h|--help)
msg_help
exit 0
;;
--arch)
PARAM_ARCH=$2
cnt=$(( cnt + 1 ))
;;
--output)
PARAM_OUTPUT_PATH=$2
cnt=$(( cnt + 1 ))
;;
--dtb)
PARAM_DTB_PATH=$2
cnt=$(( cnt + 1 ))
;;
--kernel)
PARAM_KERNEL_IMAGE=$2
cnt=$(( cnt + 1 ))
;;
--resource)
PARAM_RESOURCE_IMAGE=$2
cnt=$(( cnt + 1 ))
;;
--its)
PARAM_ITS=$2
cnt=$(( cnt + 1 ))
;;
*)
;;
esac
shift
done
if [ $cnt -ne 6 \
-o -z "$PARAM_ARCH" \
-o -z "$PARAM_OUTPUT_PATH" \
-o ! -f "$PARAM_ITS" \
-o ! -f "$PARAM_DTB_PATH" \
-o ! -f "$PARAM_RESOURCE_IMAGE" \
-o ! -f "$PARAM_KERNEL_IMAGE" ]; then
msg_error "Invalid parameter..."
if [ -z "$PARAM_OUTPUT_PATH" ];then
msg_error "Not config PARAM_OUTPUT_PATH"
fi
if [ -z "$PARAM_ARCH" ];then
msg_error "Not config PARAM_ARCH"
fi
if [ ! -f "$PARAM_ITS" ];then
msg_error "Not found PARAM_ITS file: $PARAM_ITS"
fi
if [ ! -f "$PARAM_DTB_PATH" ];then
msg_error "Not found PARAM_DTB_PATH file: $PARAM_DTB_PATH"
fi
if [ ! -f "$PARAM_RESOURCE_IMAGE" ];then
msg_error "Not found PARAM_RESOURCE_IMAGE file: $PARAM_RESOURCE_IMAGE"
fi
if [ ! -f "$PARAM_KERNEL_IMAGE" ];then
msg_error "Not found PARAM_KERNEL_IMAGE file: $PARAM_KERNEL_IMAGE"
fi
msg_help
exit -1
fi
}
check_mkimage()
{
MKIMAGE=${cwd}/mkimage
MKIMAGE=$(type -p ${MKIMAGE} || true)
if [ -z "${MKIMAGE}" ]; then
MKIMAGE=mkimage
MKIMAGE=$(type -p ${MKIMAGE} || true)
if [ -n "${MKIMAGE}" ]; then
msg_info "Found $MKIMAGE"
return
else
# Doesn't exist
msg_error '"mkimage" command not found - U-Boot images will not be built' >&2
exit 1;
fi
fi
}
################################################################################
# Start
################################################################################
dtc --version &>/dev/null
if [ "$?" -ne 0 ]; then
msg_error "No found dtc tool, please install it. (run \"sudo apt-get install device-tree-compile\")"
return
fi
PARAM_ITS=""
PARAM_ARCH=""
PARAM_DTB_PATH=""
PARAM_RESOURCE_IMAGE=""
PARAM_KERNEL_IMAGE=""
PARAM_OUTPUT_PATH=""
check_mkimage
chk_param $@
msg_info "PARAM_ITS = $PARAM_ITS"
msg_info "PARAM_ARCH = $PARAM_ARCH"
msg_info "PARAM_DTB_PATH = $PARAM_DTB_PATH"
msg_info "PARAM_OUTPUT_PATH = $PARAM_OUTPUT_PATH"
msg_info "PARAM_KERNEL_IMAGE = $PARAM_KERNEL_IMAGE"
msg_info "PARAM_RESOURCE_IMAGE = $PARAM_RESOURCE_IMAGE"
__workdir=$(dirname $PARAM_OUTPUT_PATH)/.pack_bootimg_workdir
mkdir -p $__workdir
cp -f $PARAM_ITS $__workdir/boot.its
cp -f $PARAM_DTB_PATH $__workdir/fdt
cp -f $PARAM_RESOURCE_IMAGE $__workdir/resource
cp -f $PARAM_KERNEL_IMAGE $__workdir/kernel
if [ "${PARAM_ARCH}" == "arm64" ]; then
sed -i -e 's/arch = ""/arch = "arm64"/g' -e 's/compression = ""/compression = "lz4"/' $__workdir/boot.its
else
sed -i -e 's/arch = ""/arch = "arm"/g' -e 's/compression = ""/compression = "none"/' $__workdir/boot.its
fi
__MKIMAGE_ARG="-E -p 0x800"
${MKIMAGE} ${__MKIMAGE_ARG} -f $__workdir/boot.its $PARAM_OUTPUT_PATH
mkdir -p $(dirname $PARAM_OUTPUT_PATH)
msg_info "Repack $PARAM_OUTPUT_PATH ok !!!"
if [ "$RK_DEBUG" != "1" ]; then
rm -rf $__workdir
fi
#
# SET ANSI COLORS {{{ START
C_RED=""
C_CYAN=""
C_BLUE=""
C_GREEN=""
C_WHITE=""
C_YELLOW=""
C_MAGENTA=""
C_NORMAL=""
# SET ANSI COLORS END }}}
set -e
cmd=`realpath $0`
cwd=`dirname $cmd`
CMD_VERSION=1.0.0
function msg_dbg()
{
if [ "$RK_DEBUG" != "1" ]; then
return
fi
echo -e "${C_CYAN}[$(basename $0):info] $*${C_NORMAL}" >&2
}
function msg_info()
{
echo -e "${C_GREEN}[$(basename $0):info] $1${C_NORMAL}" >&2
}
function msg_warn()
{
echo -e "${C_YELLOW}[$(basename $0):warn] $1${C_NORMAL}" >&2
}
function msg_error()
{
echo -e "${C_RED}[$(basename $0):error] $1${C_NORMAL}" >&2
}
function msg_help()
{
echo "command format:"
echo " `basename $cmd` -v -h --kernel --resource --its --dtb --output --arch"
echo " -v|--version (Optional) view this version."
echo " -h|--help (Optional) view this help message."
echo " --kernel (MUST) input kernel's image path."
echo " --resource (MUST) input resource.img path."
echo " --arch (MUST) kernel's arch (arm or arm64)."
echo " --its (MUST) input its file path."
echo " --dtb (MUST) input dtb file path."
echo " --output (MUST) output file path."
return
}
function chk_param()
{
local cnt
cnt=0
while [ $# -ne 0 ]
do
case $1 in
-v|--version)
msg_info "V$CMD_VERSION"
exit 0
;;
-h|--help)
msg_help
exit 0
;;
--arch)
PARAM_ARCH=$2
cnt=$(( cnt + 1 ))
;;
--output)
PARAM_OUTPUT_PATH=$2
cnt=$(( cnt + 1 ))
;;
--dtb)
PARAM_DTB_PATH=$2
cnt=$(( cnt + 1 ))
;;
--kernel)
PARAM_KERNEL_IMAGE=$2
cnt=$(( cnt + 1 ))
;;
--resource)
PARAM_RESOURCE_IMAGE=$2
cnt=$(( cnt + 1 ))
;;
--its)
PARAM_ITS=$2
cnt=$(( cnt + 1 ))
;;
*)
;;
esac
shift
done
if [ $cnt -ne 6 \
-o -z "$PARAM_ARCH" \
-o -z "$PARAM_OUTPUT_PATH" \
-o ! -f "$PARAM_ITS" \
-o ! -f "$PARAM_DTB_PATH" \
-o ! -f "$PARAM_RESOURCE_IMAGE" \
-o ! -f "$PARAM_KERNEL_IMAGE" ]; then
msg_error "Invalid parameter..."
if [ -z "$PARAM_OUTPUT_PATH" ];then
msg_error "Not config PARAM_OUTPUT_PATH"
fi
if [ -z "$PARAM_ARCH" ];then
msg_error "Not config PARAM_ARCH"
fi
if [ ! -f "$PARAM_ITS" ];then
msg_error "Not found PARAM_ITS file: $PARAM_ITS"
fi
if [ ! -f "$PARAM_DTB_PATH" ];then
msg_error "Not found PARAM_DTB_PATH file: $PARAM_DTB_PATH"
fi
if [ ! -f "$PARAM_RESOURCE_IMAGE" ];then
msg_error "Not found PARAM_RESOURCE_IMAGE file: $PARAM_RESOURCE_IMAGE"
fi
if [ ! -f "$PARAM_KERNEL_IMAGE" ];then
msg_error "Not found PARAM_KERNEL_IMAGE file: $PARAM_KERNEL_IMAGE"
fi
msg_help
exit -1
fi
}
check_mkimage()
{
MKIMAGE=${cwd}/mkimage
MKIMAGE=$(type -p ${MKIMAGE} || true)
if [ -z "${MKIMAGE}" ]; then
MKIMAGE=mkimage
MKIMAGE=$(type -p ${MKIMAGE} || true)
if [ -n "${MKIMAGE}" ]; then
msg_info "Found $MKIMAGE"
return
else
# Doesn't exist
msg_error '"mkimage" command not found - U-Boot images will not be built' >&2
exit 1;
fi
fi
}
################################################################################
# Start
################################################################################
dtc --version &>/dev/null
if [ "$?" -ne 0 ]; then
msg_error "No found dtc tool, please install it. (run \"sudo apt-get install device-tree-compile\")"
return
fi
PARAM_ITS=""
PARAM_ARCH=""
PARAM_DTB_PATH=""
PARAM_RESOURCE_IMAGE=""
PARAM_KERNEL_IMAGE=""
PARAM_OUTPUT_PATH=""
check_mkimage
chk_param $@
msg_info "PARAM_ITS = $PARAM_ITS"
msg_info "PARAM_ARCH = $PARAM_ARCH"
msg_info "PARAM_DTB_PATH = $PARAM_DTB_PATH"
msg_info "PARAM_OUTPUT_PATH = $PARAM_OUTPUT_PATH"
msg_info "PARAM_KERNEL_IMAGE = $PARAM_KERNEL_IMAGE"
msg_info "PARAM_RESOURCE_IMAGE = $PARAM_RESOURCE_IMAGE"
__workdir=$(dirname $PARAM_OUTPUT_PATH)/.pack_bootimg_workdir
mkdir -p $__workdir
cp -f $PARAM_ITS $__workdir/boot.its
cp -f $PARAM_DTB_PATH $__workdir/fdt
cp -f $PARAM_RESOURCE_IMAGE $__workdir/resource
cp -f $PARAM_KERNEL_IMAGE $__workdir/kernel
if [ "${PARAM_ARCH}" == "arm64" ]; then
sed -i -e 's/arch = ""/arch = "arm64"/g' -e 's/compression = ""/compression = "lz4"/' $__workdir/boot.its
else
sed -i -e 's/arch = ""/arch = "arm"/g' -e 's/compression = ""/compression = "none"/' $__workdir/boot.its
fi
__MKIMAGE_ARG="-E -p 0x800"
${MKIMAGE} ${__MKIMAGE_ARG} -f $__workdir/boot.its $PARAM_OUTPUT_PATH
mkdir -p $(dirname $PARAM_OUTPUT_PATH)
msg_info "Repack $PARAM_OUTPUT_PATH ok !!!"
if [ "$RK_DEBUG" != "1" ]; then
rm -rf $__workdir
fi