366 lines
10 KiB
Bash
366 lines
10 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
|
|||
|
|
set -e
|
|||
|
|
|
|||
|
|
MKIMG_TGT_OUT=$PRJ_TOP_DIR/out/$_top_img_out_dir_
|
|||
|
|
export QM_ALL_IMAGES=$MKIMG_TGT_OUT/qmimages
|
|||
|
|
export MKIMG_PATH_ROOT=$MKIMG_TGT_OUT/mkimg_part
|
|||
|
|
MKIMG_PATH_IMGOUT=$MKIMG_PATH_ROOT/_imgout_
|
|||
|
|
MKIMG_PATH_CURR=""
|
|||
|
|
|
|||
|
|
#default fs type
|
|||
|
|
QM_SYS_DEF_FS_TYPE=${CONFIG_QM_SYS_PARTI_DEFAULT_FS_TYPE}
|
|||
|
|
|
|||
|
|
function finish_build(){
|
|||
|
|
echo "Running ${FUNCNAME[1]} succeeded"
|
|||
|
|
cd $PRJ_TOP_DIR
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function build_genMkimgdir(){
|
|||
|
|
echo " build_genMkimgdir"
|
|||
|
|
echo "BoardConfig CONFIG_QM_SYS_PARTI_NAME_LIST:${CONFIG_QM_SYS_PARTI_NAME_LIST}"
|
|||
|
|
echo "BoardConfig CONFIG_QM_SYS_PARTI_INFOFILE:${CONFIG_QM_SYS_PARTI_INFOFILE}"
|
|||
|
|
if [ -n "${CONFIG_QM_SYS_PARTI_NAME_LIST}" ]; then
|
|||
|
|
if [ -d "$MKIMG_TGT_OUT" ]; then
|
|||
|
|
rm -rf $MKIMG_PATH_ROOT
|
|||
|
|
mkdir -p $MKIMG_PATH_ROOT
|
|||
|
|
mkdir -p $QM_ALL_IMAGES
|
|||
|
|
mkdir -p $MKIMG_PATH_IMGOUT
|
|||
|
|
pushd $MKIMG_PATH_ROOT
|
|||
|
|
for partition in ${CONFIG_QM_SYS_PARTI_NAME_LIST}; do
|
|||
|
|
mkdir -p "${MKIMG_PATH_ROOT}/${partition}"
|
|||
|
|
#echo "mkdir: ${partition}"
|
|||
|
|
done
|
|||
|
|
cp -rf ${_top_board_conf_dir_}/${CONFIG_QM_SYS_PARTI_INFOFILE} ${MKIMG_PATH_IMGOUT}/${CONFIG_QM_SYS_PARTI_INFOFILE}
|
|||
|
|
popd
|
|||
|
|
else
|
|||
|
|
echo -e "Failed: MKIMG_TGT_OUT:$MKIMG_TGT_OUT is not exist"
|
|||
|
|
exit -1
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo -e "Failed: CONFIG_QM_SYS_PARTI_NAME_LIST:${CONFIG_QM_SYS_PARTI_NAME_LIST} is empty, please check"
|
|||
|
|
exit -1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
finish_build
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
function make_strip() {
|
|||
|
|
local dir_path="$1"
|
|||
|
|
if [ -d "$dir_path" ]; then
|
|||
|
|
#find "$dir_path" -type f -exec ${_sdk_cross_compile}strip -v --strip-debug {} \;
|
|||
|
|
find "$dir_path" -type f -not -name "*.ko" -exec ${_sdk_cross_compile}strip {} \;
|
|||
|
|
else
|
|||
|
|
return 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function build_backup_xos4dbg()
|
|||
|
|
{
|
|||
|
|
echo "build_backup_xos4dbg"
|
|||
|
|
|
|||
|
|
# 检查目录是否存在
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT" ]; then
|
|||
|
|
|
|||
|
|
# mkdir backup_xos4dbg
|
|||
|
|
mkdir -p $QM_ALL_IMAGES/backup_xos4dbg/
|
|||
|
|
|
|||
|
|
# add more backup copy files here
|
|||
|
|
# backup system
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/system" ]; then
|
|||
|
|
echo "backup unstrip $MKIMG_PATH_ROOT/system"
|
|||
|
|
cp -arf $MKIMG_PATH_ROOT/system "$QM_ALL_IMAGES/backup_xos4dbg/"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# backup rootfs
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs" ]; then
|
|||
|
|
echo "backup unstrip $MKIMG_PATH_ROOT/rootfs"
|
|||
|
|
cp -arf $MKIMG_PATH_ROOT/rootfs "$QM_ALL_IMAGES/backup_xos4dbg/"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# backup data
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/data" ]; then
|
|||
|
|
echo "backup unstrip $MKIMG_PATH_ROOT/data"
|
|||
|
|
cp -arf $MKIMG_PATH_ROOT/data "$QM_ALL_IMAGES/backup_xos4dbg/"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# backup qua
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/qua" ]; then
|
|||
|
|
echo "backup unstrip $MKIMG_PATH_ROOT/qua"
|
|||
|
|
cp -arf $MKIMG_PATH_ROOT/qua "$QM_ALL_IMAGES/backup_xos4dbg/"
|
|||
|
|
fi
|
|||
|
|
# pack backup_xos4dbg.tar.gz
|
|||
|
|
if [ -d "$QM_ALL_IMAGES/backup_xos4dbg" ]; then
|
|||
|
|
pushd $QM_ALL_IMAGES
|
|||
|
|
echo "tar -czf backup_xos4dbg.tar.gz"
|
|||
|
|
tar -czf backup_xos4dbg.tar.gz backup_xos4dbg
|
|||
|
|
rm -rf backup_xos4dbg
|
|||
|
|
popd
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "build_backup_xos4dbg end"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function build_strip_all()
|
|||
|
|
{
|
|||
|
|
echo "build_strip_all"
|
|||
|
|
# 检查目录是否存在
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT" ]; then
|
|||
|
|
# product-esl
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/system/qua/lib" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/system/qua/lib"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/system/qua/lib/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/system/qua/lib/quamm" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/system/qua/lib/quamm"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/system/qua/lib/quamm/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/system/app" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/system/app"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/system/app/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs/bin" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/rootfs/bin"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/rootfs/bin/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs/sbin" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/rootfs/sbin"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/rootfs/sbin/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs/lib" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/rootfs/lib"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/rootfs/lib/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs/usr/lib" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/rootfs/usr/lib"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/rootfs/usr/lib/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs/usr/lib/quamm" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/rootfs/usr/lib/quamm"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/rootfs/usr/lib/quamm
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs/vendor/qua/lib" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/rootfs/vendor/qua/lib"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/rootfs/vendor/qua/lib
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs/vendor/qua/lib/quamm" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/rootfs/vendor/qua/lib/quamm"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/rootfs/vendor/qua/lib/quamm
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs/system/qua/lib" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/rootfs/system/qua/lib"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/rootfs/system/qua/lib/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs/system/qua/lib/quamm" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/rootfs/system/qua/lib/quamm"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/rootfs/system/qua/lib/quamm/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/rootfs/system/app" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/rootfs/system/app"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/rootfs/system/app/
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# other product-aicamera/kidc/ipc...
|
|||
|
|
if [ -f "$MKIMG_PATH_ROOT/data/qxosui" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/data/qxosui"
|
|||
|
|
${_sdk_cross_compile}strip $MKIMG_PATH_ROOT/data/qxosui
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/qua/lib" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/qua/lib"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/qua/lib/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/qua/lib/quamm" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/qua/lib/quamm"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/qua/lib/quamm/
|
|||
|
|
fi
|
|||
|
|
if [ -d "$MKIMG_PATH_ROOT/system/qua/wifi/host" ]; then
|
|||
|
|
echo "strip $MKIMG_PATH_ROOT/system/qua/wifi/host"
|
|||
|
|
make_strip $MKIMG_PATH_ROOT/system/qua/wifi/host/
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
|
|||
|
|
fi
|
|||
|
|
echo "build_strip_all end"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
build_genMkimgdir
|
|||
|
|
|
|||
|
|
|
|||
|
|
if [ $MKIMG_PATH_ROOT ]
|
|||
|
|
then
|
|||
|
|
QM_PARAMETER=${CONFIG_QM_SYS_PARTI_INFOFILE}
|
|||
|
|
else
|
|||
|
|
echo -e "CONFIG_QM_SYS_PARTI_INFOFILE:${CONFIG_QM_SYS_PARTI_INFOFILE} is not exist"
|
|||
|
|
exit -1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
PARAMETER=$MKIMG_PATH_ROOT/$QM_PARAMETER
|
|||
|
|
echo "MKIMG_PATH_IMGOUT:$MKIMG_PATH_IMGOUT"
|
|||
|
|
|
|||
|
|
|
|||
|
|
if which fakeroot; then
|
|||
|
|
FAKEROOT_TOOL="`which fakeroot`"
|
|||
|
|
else
|
|||
|
|
echo -e "Install fakeroot First"
|
|||
|
|
echo -e " sudo apt-get install fakeroot"
|
|||
|
|
exit -1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
QUA_FAKEROOT_SCRIPT=$MKIMG_PATH_IMGOUT/parti.fs
|
|||
|
|
MKIMAGE=$XOS_SCRIPT_DIR/mk-image.sh
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo ""
|
|||
|
|
#copy files to each partition
|
|||
|
|
echo "QM: copy images before mkimg, call ${_top_board_conf_dir_}/pre_mkimg_copy_files.sh"
|
|||
|
|
if [ -n "${CONFIG_QM_SYS_PARTI_NAME_LIST}" ]; then
|
|||
|
|
if [ -f "${_top_board_conf_dir_}/post_mkimg_copy_files.sh" ]; then
|
|||
|
|
source ${_top_board_conf_dir_}/pre_mkimg_copy_files.sh
|
|||
|
|
else
|
|||
|
|
echo -e "warning: ${_top_board_conf_dir_}/pre_mkimg_copy_files.sh is not exist"
|
|||
|
|
exit -1
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo -e "warning: ${CONFIG_QM_SYS_PARTI_NAME_LIST} is empty"
|
|||
|
|
exit -1
|
|||
|
|
fi
|
|||
|
|
#end of copy files
|
|||
|
|
|
|||
|
|
#backup xos for debug(unstrip lib/app)
|
|||
|
|
build_backup_xos4dbg
|
|||
|
|
|
|||
|
|
#do strip all so/bin/ko (except mpp ko)
|
|||
|
|
build_strip_all
|
|||
|
|
|
|||
|
|
# SIZE list for each every image
|
|||
|
|
# create or clean code-size.txt
|
|||
|
|
echo "code-size:${QM_ALL_IMAGES}/code-size.txt"
|
|||
|
|
> ${QM_ALL_IMAGES}/code-size.txt
|
|||
|
|
CODE_SIZE_MB=$(du -sh "$MKIMG_TGT_OUT/image/bsp/kernel/zImage" | awk '{print $1}')
|
|||
|
|
echo "kernel: ${CODE_SIZE_MB} Mbyte" >> ${QM_ALL_IMAGES}/code-size.txt
|
|||
|
|
do_code_size() {
|
|||
|
|
pushd $MKIMG_PATH_ROOT
|
|||
|
|
|
|||
|
|
# 获取目标目录的大小(以 1K 块为单位)
|
|||
|
|
CODE_SIZE_KB=$(du -s ${QM_PARTI_NAME} | cut -f1)
|
|||
|
|
|
|||
|
|
# 将目录大小转换为 MB 并向上取整
|
|||
|
|
CODE_SIZE_MB=$(( (CODE_SIZE_KB + 1023) / 1024 ))
|
|||
|
|
|
|||
|
|
# 计算 20% 的元数据空间,并向上取整
|
|||
|
|
METADATA_SIZE_MB=$(( (CODE_SIZE_MB + 9) / 10 ))
|
|||
|
|
|
|||
|
|
# 确保元数据空间最小为 10MB
|
|||
|
|
if [ $METADATA_SIZE_MB -lt 10 ]; then
|
|||
|
|
METADATA_SIZE_MB=$((METADATA_SIZE_MB + 10))
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 设置扩展文件系统的大小(增加 10% 的空间用于文件系统元数据)
|
|||
|
|
EXT4_SIZE_MB=$(( CODE_SIZE_MB + METADATA_SIZE_MB ))
|
|||
|
|
|
|||
|
|
# 比较 EXT4_SIZE_MB 和 QM_PARTI_SIZE,取较小值
|
|||
|
|
if [ $EXT4_SIZE_MB -gt $QM_PARTI_SIZE ]; then
|
|||
|
|
EXT4_SIZE_MB=$QM_PARTI_SIZE
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "EXT4_SIZE_MB=$EXT4_SIZE_MB"
|
|||
|
|
echo "METADATA_SIZE_MB=$METADATA_SIZE_MB"
|
|||
|
|
|
|||
|
|
# write partition name and code size into code-size.txt
|
|||
|
|
echo "${QM_PARTI_NAME}: ${CODE_SIZE_MB} Mbyte" >> ${QM_ALL_IMAGES}/code-size.txt
|
|||
|
|
popd
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo ""
|
|||
|
|
do_mkimg() {
|
|||
|
|
echo "Creating image for partition: $QM_PARTI_NAME"
|
|||
|
|
echo "File system type: $QM_PARTI_FSTYPE"
|
|||
|
|
echo "Partition size: $QM_PARTI_SIZE"
|
|||
|
|
echo "Partition auto: $QM_PARTI_AUTO"
|
|||
|
|
echo "code size: $EXT4_SIZE_MB Mbyte"
|
|||
|
|
|
|||
|
|
MKIMG_PATH_CURR=${MKIMG_PATH_ROOT}/${QM_PARTI_NAME}
|
|||
|
|
echo "mkimg path: $MKIMG_PATH_CURR!"
|
|||
|
|
if [ $MKIMG_PATH_CURR ]
|
|||
|
|
then
|
|||
|
|
if [ -d "$MKIMG_PATH_CURR" ]
|
|||
|
|
then
|
|||
|
|
echo "#!/bin/sh" > $QUA_FAKEROOT_SCRIPT
|
|||
|
|
echo "set -e" >> $QUA_FAKEROOT_SCRIPT
|
|||
|
|
|
|||
|
|
echo "$MKIMAGE $MKIMG_PATH_CURR $MKIMG_PATH_IMGOUT/$QM_PARTI_NAME.$QM_PARTI_FSTYPE $QM_PARTI_FSTYPE $QM_PARTI_SIZE $QM_PARTI_NAME" >> $QUA_FAKEROOT_SCRIPT
|
|||
|
|
chmod a+x $QUA_FAKEROOT_SCRIPT
|
|||
|
|
|
|||
|
|
$FAKEROOT_TOOL -- $QUA_FAKEROOT_SCRIPT
|
|||
|
|
rm -f $QUA_FAKEROOT_SCRIPT
|
|||
|
|
if which img2simg; then
|
|||
|
|
IMG2SIMG_TOOL="`which img2simg`"
|
|||
|
|
else
|
|||
|
|
echo -e "Install img2simg First"
|
|||
|
|
echo -e " sudo apt-get install img2simg"
|
|||
|
|
exit -1
|
|||
|
|
fi
|
|||
|
|
$IMG2SIMG_TOOL $MKIMG_PATH_IMGOUT/$QM_PARTI_NAME.$QM_PARTI_FSTYPE $MKIMG_PATH_IMGOUT/$QM_PARTI_NAME.img
|
|||
|
|
else
|
|||
|
|
echo "warning: $MKIMG_PATH_CURR not found!"
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
QM_PARTI_NAME=""
|
|||
|
|
QM_PARTI_FSTYPE=""
|
|||
|
|
QM_PARTI_SIZE=""
|
|||
|
|
QM_PARTI_AUTO=""
|
|||
|
|
EXT4_SIZE_MB=""
|
|||
|
|
while IFS=',' read -r name fs size
|
|||
|
|
do
|
|||
|
|
[[ "$line" == \#* ]] && continue
|
|||
|
|
|
|||
|
|
if [[ "$name" == "::" ]]; then
|
|||
|
|
break
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
QM_PARTI_NAME="$name"
|
|||
|
|
QM_PARTI_FSTYPE="$fs"
|
|||
|
|
if [[ "$size" == *"+"* ]]; then
|
|||
|
|
QM_PARTI_SIZE="${size%+*}"
|
|||
|
|
QM_PARTI_AUTO="1"
|
|||
|
|
else
|
|||
|
|
QM_PARTI_SIZE="$size"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "QM_PARTI_NAME=$QM_PARTI_NAME"
|
|||
|
|
echo "QM_PARTI_FSTYPE=$QM_PARTI_FSTYPE"
|
|||
|
|
echo "QM_PARTI_SIZE=$QM_PARTI_SIZE"
|
|||
|
|
echo "QM_PARTI_AUTO=$QM_PARTI_AUTO"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
if [[ "$QM_PARTI_FSTYPE" != "raw" ]]; then
|
|||
|
|
do_code_size
|
|||
|
|
do_mkimg
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
done < $MKIMG_PATH_IMGOUT/${CONFIG_QM_SYS_PARTI_INFOFILE}
|
|||
|
|
|
|||
|
|
echo -e "\e[36m Image: image in $QM_ALL_IMAGES is ready \e[0m"
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo ""
|
|||
|
|
#copy files to $QM_ALL_IMAGES
|
|||
|
|
echo "QM: call ${_top_board_conf_dir_}/post_mkimg_copy_files.sh to copy binary files"
|
|||
|
|
if [ -f "${_top_board_conf_dir_}/post_mkimg_copy_files.sh" ]; then
|
|||
|
|
source ${_top_board_conf_dir_}/post_mkimg_copy_files.sh
|
|||
|
|
else
|
|||
|
|
echo -e "warning: ${_top_board_conf_dir_}/post_mkimg_copy_files.sh is not exist"
|
|||
|
|
exit -1
|
|||
|
|
fi
|
|||
|
|
#end of copy files
|
|||
|
|
|
|||
|
|
echo "mv images to qmimages end"
|