luckfox-pico-sdk/project/make_meta/build_meta.sh
luckfox-eng29 8f34c2760d project:build.sh: Added fastboot support; custom modifications to U-Boot and kernel implemented using patches.
project:cfg:BoardConfig_IPC: Added fastboot BoardConfig file and firmware post-scripts, distinguishing between
the BoardConfigs for Luckfox Pico Pro and Luckfox Pico Max. project:app: Added fastboot_client and rk_smart_door
for quick boot applications; updated rkipc app to adapt to the latest media library. media:samples: Added more
usage examples. media:rockit: Fixed bugs; removed support for retrieving data frames from VPSS. media:isp:
Updated rkaiq library and related tools to support connection to RKISP_Tuner. sysdrv:Makefile: Added support for
compiling drv_ko on Luckfox Pico Ultra W using Ubuntu; added support for custom root filesystem.
sysdrv:tools:board: Updated Buildroot optional mirror sources, updated some software versions, and stored device
tree files and configuration files that undergo multiple modifications for U-Boot and kernel separately.
sysdrv:source:mcu: Used RISC-V MCU SDK with RT-Thread system, mainly for initializing camera AE during quick
boot. sysdrv:source:uboot: Added support for fastboot; added high baud rate DDR bin for serial firmware upgrades.
sysdrv:source:kernel: Upgraded to version 5.10.160; increased NPU frequency for RV1106G3; added support for
fastboot.

Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
2024-10-14 09:47:04 +08:00

325 lines
8.8 KiB
Bash
Executable File

#!/bin/bash
set -e
cwd=$(dirname $(readlink -f $0))
cd ${cwd}
CMD_VERSION="2.0.0"
function msg_info() {
echo -e "[$(basename $0):info] $1"
}
function msg_warn() {
echo -e "[$(basename $0):warn] $1"
}
function msg_error() {
echo -e "[$(basename $0):error] $1"
}
function msg_help() {
echo "command format:"
echo " $(basename $cwd)"
echo " -v|--version (Optional) view this version."
echo " -h|--help (Optional) view this help message."
echo " -c|--clean (Optional) clean."
echo " -e|--export (Optional) export include files."
echo " --main_sensor_iq (Optional) input main camera sensor's iq bin file."
echo " --second_sensor_iq (Optional) input secondary camera sensor's iq bin file."
echo " --cam_iqfile (Optional) input camera sensor IQ file."
echo " --meta_param (Optional) input meta parameters."
echo " --output (Optional) config output dir for meta.img"
echo " --rootfs_dir (Optional) the dir of make_meta tool install"
echo " --media_dir (Optional) the dir of meta header files install"
echo " --pc_tools_dir (Optional) the dir of make_meta_host tool install"
echo " --tiny_meta (Optional) the flag of using tiny meta"
exit 0
}
function export_header_files() {
if [ -n "$1" ]; then
mkdir -p "${1}/include"
cp -f ${cwd}/include/*.h $1/include
else
msg_error "use format: ./build_meta.sh --export --media_dir ./dir_for_meta_head"
fi
exit 0
}
function __chk_param() {
for item in $BUILD_META_PARAMS; do
if [ "$item" = "$1" ]; then
echo ""
return
fi
done
echo "$1"
}
function chk_param() {
BUILD_META_PARAMS="-v --version -h --help -c --clean --main_sensor_iq --second_sensor_iq -e --export --cam_iqfile --meta_param --output --rootfs_dir --media_dir --pc_tools_dir --boot_medium --tiny_meta"
local cnt
cnt=0
while [ $# -ne 0 ]; do
case $1 in
-e | --export)
msg_info "export include files"
BUILD_META_EXPORT_HEADER=YES
;;
-v | --version)
msg_info "V$CMD_VERSION"
exit 0
;;
-h | --help)
msg_help
;;
-c | --clean)
make -C ${cwd}/sensor_ae_awb_table clean
make -C ${cwd}/sensor_init clean
make -C ${cwd}/make_meta clean
make -C ${cwd}/zlib clean
make -C ${cwd}/mtd_updateEngeen clean
rm -rf ${cwd}/meta.img
exit 0
;;
--second_sensor_iq)
SECONDARY_SENSOR_IQ_BIN="$2"
;;
--main_sensor_iq)
SENSOR_IQ_BIN="$2"
;;
--cam_iqfile)
shift
for item in $@; do
ret=$(__chk_param $item)
if [ "$ret"x = "x" ]; then
break
else
rk_camera_sensor_iqfiles="$rk_camera_sensor_iqfiles $ret"
fi
done
;;
--meta_param)
shift
for item in $@; do
if [ "${item%=*}" = "--meta_part_size" ]; then
META_PART_SIZE=${item#*=}
fi
ret=$(__chk_param $item)
if [ "$ret"x = "x" ]; then
break
else
rk_meta_param="$rk_meta_param $ret"
fi
done
local tmp
tmp=${rk_meta_param##*--cmdline=}
CMDLINE=${tmp##*--cmdline}
CMDLINE=${CMDLINE%% --*}
tmp=${rk_meta_param##*--cmdline}
tmp=${tmp#*--}
rk_meta_param=${rk_meta_param%%--cmdline*}
rk_meta_param="${rk_meta_param} --$tmp"
echo "rk_meta_param=${rk_meta_param} --cmdline $CMDLINE"
;;
--output)
rk_project_output_image=$2
;;
--rootfs_dir)
rk_project_package_rootfs_dir=$2
;;
--media_dir)
rk_project_path_media=$2
;;
--pc_tools_dir)
rk_project_path_pc_tools=$2
;;
--boot_medium)
rk_boot_medium=$2
;;
--tiny_meta)
rk_tiny_meta=$2
;;
*) ;;
esac
shift
done
if [ "$BUILD_META_EXPORT_HEADER"x = "YES"x ]; then
export_header_files $rk_project_path_media
fi
if [ -f "$SENSOR_IQ_BIN" ]; then
rk_camera_sensor_iqfiles="$SENSOR_IQ_BIN"
fi
if [ -f "$SECONDARY_SENSOR_IQ_BIN" ]; then
if [ -z "$rk_camera_sensor_iqfiles" ]; then
msg_error "not found main sensor iqbin"
msg_info " add --main_sensor_iq"
exit 1
else
rk_camera_sensor_iqfiles="$rk_camera_sensor_iqfiles $SECONDARY_SENSOR_IQ_BIN"
fi
fi
if [ -z "$rk_camera_sensor_iqfiles" -a ! "$rk_tiny_meta" = "y" ]; then
msg_warn "invalid parameter"
msg_help
fi
}
chk_param $@
build_target_image=meta.img
build_target_bin="${cwd}/make_meta/make_meta"
SENSOR_AE_AWB_TABLE="${cwd}/sensor_ae_awb_table/ae_awb_table.bin"
SENSOR_INIT_BIN="${cwd}/sensor_init/init_sensor.bin"
if [ ! "$rk_tiny_meta" = "y" ]; then
__META_CAMERA_NUMBERS=0
for item in $rk_camera_sensor_iqfiles; do
__META_CAMERA_NUMBERS=$((__META_CAMERA_NUMBERS + 1))
case $__META_CAMERA_NUMBERS in
1)
if [ -f "$rk_project_path_media/isp_iqfiles/${item}" ]; then
SENSOR_IQ_BIN="$rk_project_path_media/isp_iqfiles/${item}"
fi
;;
2)
if [ -f "$rk_project_path_media/isp_iqfiles/${item}" ]; then
SECONDARY_SENSOR_IQ_BIN="$rk_project_path_media/isp_iqfiles/${item}"
fi
;;
*)
msg_error "Not Support camera numbers!!!"
exit 1
;;
esac
done
if [ -z "$META_PART_SIZE" ]; then
if [ $__META_CAMERA_NUMBERS -eq 2 ]; then
rk_meta_param="$rk_meta_param --meta_part_size=0xb0000"
fi
if [ $__META_CAMERA_NUMBERS -eq 1 ]; then
rk_meta_param="$rk_meta_param --meta_part_size=0x60000"
fi
fi
if [ $__META_CAMERA_NUMBERS -eq 2 ]; then
SECONDARY_SENSOR_INIT_BIN="${cwd}/sensor_init/init_secondary_sensor.bin"
else
SECONDARY_SENSOR_INIT_BIN=""
fi
msg_info "========================================"
msg_info "rk_camera_param=$rk_camera_param"
msg_info "rk_camera_sensor_iqfiles=${rk_camera_sensor_iqfiles}"
msg_info "rk_meta_param=$rk_meta_param"
msg_info "rk_project_output_image=$rk_project_output_image"
msg_info "rk_project_package_rootfs_dir=$rk_project_package_rootfs_dir"
msg_info "rk_project_path_media=$rk_project_path_media"
msg_info "rk_project_path_pc_tools=$rk_project_path_pc_tools"
msg_info "rk_boot_medium=$rk_boot_medium"
msg_info "rk_tiny_meta=$rk_tiny_meta"
msg_info "SENSOR_IQ_BIN=$SENSOR_IQ_BIN"
msg_info "SECONDARY_SENSOR_IQ_BIN=$SECONDARY_SENSOR_IQ_BIN"
msg_info "========================================"
if [ -n "${rk_camera_param}" ]; then
META_APP_PARAMETER=${rk_camera_param}
elif [ -n "${rk_meta_param}" ]; then
META_APP_PARAMETER=${rk_meta_param}
else
META_APP_PARAMETER=""
fi
support_sensors="os02k10 sc301iot sc501ai sc230ai sc200ai sc3338 sc4336 gc2093 gc3003 sc231hai sc2336p"
for item in $support_sensors; do
if [ -n "${SENSOR_IQ_BIN}" ]; then
if basename $SENSOR_IQ_BIN | grep -i "$item"; then
export SENSOR_TARGET=$item
fi
fi
if [ -n "${SECONDARY_SENSOR_IQ_BIN}" ]; then
if basename $SECONDARY_SENSOR_IQ_BIN | grep "$item"; then
export SECONDARY_SENSOR_TARGET=$item
META_APP_PARAMETER="$META_APP_PARAMETER --secondary_sensor_init=${SECONDARY_SENSOR_INIT_BIN}"
fi
fi
done
if [ -z "${SENSOR_TARGET}" ]; then
msg_error "Not found main camera sensor config, please add [support_sensors] in $(basename $0)"
exit 1
fi
if [ -n "${SECONDARY_SENSOR_IQ_BIN}" ]; then
if [ -z "${SECONDARY_SENSOR_TARGET}" ]; then
msg_error "Not found secondary camera sensor config, please add [support_sensors] in $(basename $0)"
exit 1
fi
fi
# get secondary camera sensor iq size
if [ -f "${SECONDARY_SENSOR_IQ_BIN}" ]; then
SECONDARY_SENSOR_IQ_BIN_SIZE=$(wc -c ${SECONDARY_SENSOR_IQ_BIN} | awk '{print $1}')
META_APP_PARAMETER="$META_APP_PARAMETER --secondary_sensor_iq_bin=${SECONDARY_SENSOR_IQ_BIN}"
fi
fi # if [ ! "$rk_tiny_meta" = "y" ];
make -C ${cwd}/sensor_ae_awb_table
make -C ${cwd}/sensor_init main_sensor=$SENSOR_TARGET secondary_sensor=$SECONDARY_SENSOR_TARGET
make -C ${cwd}/zlib
make -C ${cwd}/mtd_updateEngeen
#if [ "$rk_boot_medium" = "spi_nand" ]; then
# RK_META_IS_NAND_FLASH="YES"
#fi
make -C ${cwd}/make_meta IS_NAND_FLASH=$RK_META_IS_NAND_FLASH
if [ -d "${rk_project_path_pc_tools}" ]; then
cp -f ${cwd}/make_meta/make_meta_host ${rk_project_path_pc_tools}/
fi
if [ "$rk_tiny_meta" = "y" ]; then
${cwd}/make_meta/make_meta_host --create \
--meta_path=${cwd}/${build_target_image} \
--cmdline="${CMDLINE}"
else
META_APP_PARAMETER="--create \
--meta_path=${cwd}/${build_target_image} \
--sensor_init=${SENSOR_INIT_BIN} \
--sensor_iq_bin=${SENSOR_IQ_BIN} \
--ae_awb_tab=${SENSOR_AE_AWB_TABLE} \
$META_APP_PARAMETER"
echo "command: ${cwd}/make_meta/make_meta_host $META_APP_PARAMETER"
${cwd}/make_meta/make_meta_host ${META_APP_PARAMETER} --cmdline="${CMDLINE}"
fi
if [ -f "${cwd}/${build_target_image}" ]; then
echo "Generate Camera meta data: ${build_target_image} "
if [ -n "${rk_project_output_image}" ]; then
mkdir -p "${rk_project_output_image}"
cp -f ${cwd}/${build_target_image} ${rk_project_output_image}/
fi
if [ -n "${rk_project_package_rootfs_dir}" ]; then
mkdir -p "${rk_project_package_rootfs_dir}/bin"
cp -f ${build_target_bin} ${rk_project_package_rootfs_dir}/bin/
fi
exit 0
else
msg_error "build meta data failed"
exit 1
fi