11 KiB
Executable File
11 KiB
Executable File
#!/bin/bash
set -e
# for debug
DEBUG_LOG_FILE='&2'
DEBUG_LOG_LEVEL=0
# ANSI COLORS
COLOR_CRE=""
COLOR_NORMAL=""
COLOR_RED=""
COLOR_GREEN=""
COLOR_YELLOW=""
COLOR_BLUE=""
COLOR_MAGENTA=""
COLOR_CYAN=""
COLOR_WHITE=""
# Shell command
TAR=tar
CP=/bin/cp
RM=/bin/rm
GREP=grep
SED=sed
MKDIR=mkdir
CHMOD=chmod
MV=mv
CD=cd
LN=ln
MAKE=make
MKNOD=mknod
PUSHD=pushd
POPD=popd
RMDIR=rmdir
DEPMOD=/sbin/depmod
RMDIR=rmdir
MKIMG=mkimage
PATCH=patch
DIFF=diff
TOUCH=touch
CAT=cat
e_blank='[ ][ ]*'
e_year='20[0-9][0-9]'
e_month='([1-9]|0[1-9]|1[0-2])'
e_day='([1-9]|0[1-9]|[12][0-9]|3[0-1])'
e_time='([01][0-9]|2[0-3]):[0-5][0-9]'
e_employid='[a-zA-Z][a-zA-Z]*[0-9]{4,}'
#$1: string
#$2: color
echo_info()
{
[ -n "$2" ] && eval echo -n \"\${${2}}\";
echo "${1}${COLOR_NORMAL}"
}
echo_err()
{
echo "${COLOR_RED} ERR: ${1}${COLOR_NORMAL}" >&2
}
echo_warn()
{
echo "${COLOR_YELLOW}WARN: ${1}${COLOR_NORMAL}" >&2
}
# $1:
echo_log()
{
echo "$1"
}
#$1: string
#$2: level
echo_debug()
{
local level=$2
[ -z "$level" ] && { level=0; }
[ $level -lt $DEBUG_LOG_LEVEL ] && return 0;
echo "$COLOR_WHITE$1$COLOR_NORMAL" > $DEBUG_LOG_FILE
}
# $1: command
# $2: LR/CR steps
run_command_progress()
{
local n=0
local steps=$2
local progress_bar=""
local counter=0
local files=0
echo_info "run_command_progress: '$1'"
[ -z "$steps" ] && { steps=1; }
[ -n "$3" ] && [ -d "$3" ] && { steps=$(find $3 | wc -l); steps=$(expr $steps / 50); }
eval $1 | while read line
do
#((n++))
#((files++))
((++n))
((++files))
if [ $n -ge $steps ] ;
then
#((counter++))
((++counter))
if [ $counter -le 50 ] ;
then
progress_bar="$progress_bar#";
printf " --------------------------------------------------|\r[%03d]$progress_bar\r" $steps
else
printf "[%03d#$progress_bar|\r" $(expr $files / 50)
fi
n=0
fi
done
echo ""
}
# $1: command
# $2: total
# $3: command to calc totals
run_command_progress_float()
{
local readonly rcp_range=50
local rcp_lines=0
local rcp_nextpos=1
local rcp_total=0
local progress_bar=""
local rcp_prog=0
local rcp_tmp=0
local prog_bar_base=""
local rcp_percent=0
echo_info "run_command_progress_float: '$1'"
if [ -n "$3" ] ;
then
echo -n "Initializing progress bar ..."
rcp_total=$(eval $3);
echo -n "\r"
[ -z "$rcp_total" ] && rcp_total=1
else
[ -n "$2" ] && rcp_total=$2
fi
[ -z "$rcp_total" ] && rcp_total=1
[ $rcp_total -le 0 ] && rcp_total=1
prog_bar_base="[ ]"
while [ $rcp_tmp -lt $rcp_range ]
do
prog_bar_base="$prog_bar_base-"
#((rcp_tmp++))
((++rcp_tmp))
done
prog_bar_base="${prog_bar_base}|"
printf "\r$prog_bar_base\r"
set +e
eval $1 | while read line
do
#((rcp_lines++))
((++rcp_lines))
if [ $rcp_lines -ge $rcp_nextpos ]
then
rcp_percent=$(expr \( $rcp_lines \* 101 - 1 \) / $rcp_total )
rcp_prog=$(expr \( $rcp_lines \* \( $rcp_range + 1 \) - 1 \) / $rcp_total )
[ $rcp_prog -gt $rcp_range ] && rcp_prog=$rcp_range
rcp_nextpos=$(expr \( \( $rcp_percent + 1 \) \* $rcp_total \) / 100)
[ $rcp_nextpos -gt $rcp_total ] && rcp_nextpos=$rcp_total
rcp_tmp=0
progress_bar=""
while [ $rcp_tmp -lt $rcp_prog ]
do
progress_bar="$progress_bar#"
((rcp_tmp++))
done
printf "\r$prog_bar_base\r[%3d%%]$progress_bar\r" $rcp_percent
fi
done
set -e
echo ""
}
#$1: path
abs_path()
{
pushd "$1" >/dev/null
[ $? -ne 0 ] && return 1;
pwd
popd >/dev/null
}
#$1: $cfg_moddir is multi
prepare_unpacking_cleanup()
{
$CAT >> $HCM_SH_SDKINSTALL << EOF
echo_info "unpacking $cfg_moddir"
mkdir -pv $module_basedir
run_command_progress_float "tar -xvzf $(sub_dir $dir_postbuild_srctarball $HCM_DESTDIR)/$module_dirname.tgz -C $module_basedir/" 0 \
"tar -tzf $(sub_dir $dir_postbuild_srctarball $HCM_DESTDIR)/$module_dirname.tgz | wc -l"
EOF
if [ -z "$1" ] ;
then
$CAT >> $HCM_SH_SDKCLEANUP << EOF
echo_info "cleanup $cfg_moddir"
run_command_progress_float "rm $cfg_moddir -frv" 0 "find $cfg_moddir | wc -l"
EOF
else
$CAT >> $HCM_SH_SDKCLEANUP << EOF
echo_info "cleanup $cfg_moddir"
pushd $module_basedir
run_command_progress_float "rm $cfg_moddir -frv" 0 "find $cfg_moddir | wc -l"
popd
EOF
fi
}
# $1: prefix
# $2..$n: dirs list
make_dirs()
{
local make_dirs_count=2
local make_dirs_dir=""
[ -z "$1" ] && { echo_err "make_dirs mast have a prefix dir!"; return 1; }
$MKDIR $1 -p
while true
do
eval make_dirs_dir=\${$make_dirs_count}
[ -z "$make_dirs_dir" ] && break;
$MKDIR $1/$make_dirs_dir -p
#((make_dirs_count++))
((++make_dirs_count))
done
}
check_dir_empty()
{
[ -z "$1" ] && return 0;
! [ -d "$1" ] && return 0;
[ -z "$(find $1/ -maxdepth 1 -mindepth 1)" ] && return 0;
return 1
}
# $1 - $2
# $3: frefix for '/', like "\\\\/"
sub_dir()
{
local subdir=""
local dir_a=$(dirname $1/stub)
local dir_b=$(dirname $2/stub)
while [ "$dir_a" != "$dir_b" ] && [ "$dir_a" != "." ] && [ "$dir_a" != "/" ]
do
if [ -z "$subdir" ] ; then
subdir=$(basename $dir_a)
else
subdir=$(basename $dir_a)$3/$subdir
fi
dir_a=$(dirname $dir_a)
done
[ -z "$subdir" ] && subdir=.
dirname $subdir/stub
}
# $1: base dir
# $2: dest dir
# $3: frefix for '/', like "\\\\/"
base_offset_dir()
{
local ofstdir=$(sub_dir $2 $1)
local bodofst=""
while [ "$ofstdir" != "." ] && [ "$ofstdir" != "/" ]
do
if [ -z "$bodofst" ] ; then
bodofst=..
else
bodofst=..$3/$bodofst
fi
ofstdir=$(dirname $ofstdir)
done
dirname $bodofst/stub
}
#$1: dir
set_drv_kbuild()
{
local cc_file=Makefile
local mbdir=""
for mbdir in $1 $1/*
do
if [ -f "$mbdir/$cc_file" ] ;
then
local kbuild_dir_adj="$(base_offset_dir $HCM_DESTDIR $mbdir "\\\\")\\/$(echo "$HCM_SDKDIR_KBUILD" | \
sed -n "s/\//\\\\\\\\\//gp")"
$SED -i "s/^KERNEL_MAKE[ \t]*:=.*/KERNEL_MAKE := -C $kbuild_dir_adj/" $mbdir/$cc_file
fi
done
}
#$1: name
#$2: level
write_rootfs_level()
{
local rlevel_config=$HCM_DESTDIR/$HCM_SDKDIR_RESOURCE/rlevel.config
$TOUCH $rlevel_config
[ -n "$(grep "^\[[0-9A-Za-z][0-9A-Za-z\-]*\] $1$" < $rlevel_config)" ] && { \
echo_warn "$rlevel_config already have item '$1'"
return 0;
}
echo "[$2] $1" >> $rlevel_config
}
#$1:
remove_all_cvsdir()
{
! [ -d "$1" ] && { echo_warn "'$1' not found when remove 'CVS' directories."; return ; }
echo_info "Remove: 'CVS' directories in $1"
find $1 -type d -name "CVS" | xargs rm -fr
}
#$1: strip command
#$2: file list
strip_elf()
{
for file in $2
do
[ -z "$(file $file | grep "ELF .* executable, .*, not stripped")" ] && continue
echo_info "$1 $file"
$1 $file
done
}
#$1: strip command
#$2: file list
strip_lib()
{
for file in $2
do
[ -z "$(file $file | grep "ELF .* shared object, .*, not stripped")" ] && continue
echo_info "strip not really done: $file"
done
}
# $1: rootfs base
# $2: modules list
install_extern_kmod()
{
local iek_installed_modules=""
local iek_dest_module=""
local iek_depend_info=""
local iek_install_base=""
pushd $1 >/dev/null
iek_install_base=$PWD
popd >/dev/null
for iek_extmod in $(find $2)
do
iek_dest_module=/$HCM_INROOTFS_EXTKMOD/$(basename $iek_extmod)
[ -f "$HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE/$iek_dest_module" ] && \
{ echo_warn "Extern module $iek_extmod conflict: $iek_dest_module"; sleep 1; }
iek_installed_modules="$iek_installed_modules $iek_dest_module"
$CP -uf $iek_extmod $HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE/$iek_dest_module
done
pushd $HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE >/dev/null
echo_info "Generating modules dependency ..."
$DEPMOD -ae -b ./ -r -F $HCM_DESTDIR/$HCM_SDKDIR_KBUILD/System.map $HCM_KERNEL_RELEASE
for iek_extmod in $iek_installed_modules
do
iek_depend_info=$(grep "^$iek_extmod:" < $HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE/$HCM_INROOTFS_DEPKMOD/modules.dep | sed "s/\://")
for iek_extmod in $iek_depend_info
do
$CP -uf --parents .$iek_extmod $iek_install_base/
[ "x$cfg_install_strip" == "xyes" ] && $HCM_CROSS_COMPILE-strip $iek_install_base$ikm_kmod -g -S -d
done
done
popd >/dev/null
}
# $1: dest rootfs based
# $2: module list
function install_kernel_module()
{
local ikm_kmod_resdir=$HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE
local ikm_install_basedir=""
local ikm_kmod=""
pushd $1 >/dev/null
ikm_install_basedir=$PWD
popd >/dev/null
pushd $ikm_kmod_resdir >/dev/null
$DEPMOD -ae -b ./ -r -F $HCM_DESTDIR/$HCM_SDKDIR_KBUILD/System.map $HCM_KERNEL_RELEASE
while read ikm_kmod
do
ikm_depend_info=$(grep "^$ikm_kmod:" < $HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE/$HCM_INROOTFS_DEPKMOD/modules.dep | sed "s/\://")
for ikm_kmod in $ikm_depend_info
do
$CP -uf --parents .$ikm_kmod $ikm_install_basedir
[ "x$cfg_install_strip" == "xyes" ] && $HCM_CROSS_COMPILE-strip $ikm_install_basedir$ikm_kmod -g -S -d
done
done << EOF
$(pushd $HCM_INROOTFS_KERNMOD >/dev/null; \
eval find "$2" -type f -printf \"/$HCM_INROOTFS_KERNMOD/%p\\\n\"; \
popd >/dev/null)
EOF
popd >/dev/null
}
function string_to_varname()
{
echo "$1" | sed 's/[^a-zA-Z0-9_]/_/g'
}
function patchset_get_param()
{
echo "$1" | cut -d')' -f1 | sed 's/[\(\|]/ /g'
}
function patchset_get_name()
{
echo "$file" | cut -d')' -f2
}
# $1: tgz package
function run_command_progress_tar()
{
local tar_file=$1
local dir_name=${tar_file%.*}
dir_name=${dir_name#*/}
total_size=$(gzip -l $tar_file | tail -n 1 | awk '{print $2}')
block_size=$(expr $total_size / 51200 + 1)
tar --blocking-factor=$block_size --checkpoint=1 --checkpoint-action=exec='printf "%3d%% of %32s unpacked\r" $TAR_CHECKPOINT $TAR_ARCHIVE' -xzf package/${dir_name}.tgz
printf "%3d%% of %32s unpacked\n" 100 "package/${dir_name}.tgz"
}
SDK_CHIP=ss524v100
SMP_TYPE=smp_linux
set -e
# for debug
DEBUG_LOG_FILE='&2'
DEBUG_LOG_LEVEL=0
# ANSI COLORS
COLOR_CRE=""
COLOR_NORMAL=""
COLOR_RED=""
COLOR_GREEN=""
COLOR_YELLOW=""
COLOR_BLUE=""
COLOR_MAGENTA=""
COLOR_CYAN=""
COLOR_WHITE=""
# Shell command
TAR=tar
CP=/bin/cp
RM=/bin/rm
GREP=grep
SED=sed
MKDIR=mkdir
CHMOD=chmod
MV=mv
CD=cd
LN=ln
MAKE=make
MKNOD=mknod
PUSHD=pushd
POPD=popd
RMDIR=rmdir
DEPMOD=/sbin/depmod
RMDIR=rmdir
MKIMG=mkimage
PATCH=patch
DIFF=diff
TOUCH=touch
CAT=cat
e_blank='[ ][ ]*'
e_year='20[0-9][0-9]'
e_month='([1-9]|0[1-9]|1[0-2])'
e_day='([1-9]|0[1-9]|[12][0-9]|3[0-1])'
e_time='([01][0-9]|2[0-3]):[0-5][0-9]'
e_employid='[a-zA-Z][a-zA-Z]*[0-9]{4,}'
#$1: string
#$2: color
echo_info()
{
[ -n "$2" ] && eval echo -n \"\${${2}}\";
echo "${1}${COLOR_NORMAL}"
}
echo_err()
{
echo "${COLOR_RED} ERR: ${1}${COLOR_NORMAL}" >&2
}
echo_warn()
{
echo "${COLOR_YELLOW}WARN: ${1}${COLOR_NORMAL}" >&2
}
# $1:
echo_log()
{
echo "$1"
}
#$1: string
#$2: level
echo_debug()
{
local level=$2
[ -z "$level" ] && { level=0; }
[ $level -lt $DEBUG_LOG_LEVEL ] && return 0;
echo "$COLOR_WHITE$1$COLOR_NORMAL" > $DEBUG_LOG_FILE
}
# $1: command
# $2: LR/CR steps
run_command_progress()
{
local n=0
local steps=$2
local progress_bar=""
local counter=0
local files=0
echo_info "run_command_progress: '$1'"
[ -z "$steps" ] && { steps=1; }
[ -n "$3" ] && [ -d "$3" ] && { steps=$(find $3 | wc -l); steps=$(expr $steps / 50); }
eval $1 | while read line
do
#((n++))
#((files++))
((++n))
((++files))
if [ $n -ge $steps ] ;
then
#((counter++))
((++counter))
if [ $counter -le 50 ] ;
then
progress_bar="$progress_bar#";
printf " --------------------------------------------------|\r[%03d]$progress_bar\r" $steps
else
printf "[%03d#$progress_bar|\r" $(expr $files / 50)
fi
n=0
fi
done
echo ""
}
# $1: command
# $2: total
# $3: command to calc totals
run_command_progress_float()
{
local readonly rcp_range=50
local rcp_lines=0
local rcp_nextpos=1
local rcp_total=0
local progress_bar=""
local rcp_prog=0
local rcp_tmp=0
local prog_bar_base=""
local rcp_percent=0
echo_info "run_command_progress_float: '$1'"
if [ -n "$3" ] ;
then
echo -n "Initializing progress bar ..."
rcp_total=$(eval $3);
echo -n "\r"
[ -z "$rcp_total" ] && rcp_total=1
else
[ -n "$2" ] && rcp_total=$2
fi
[ -z "$rcp_total" ] && rcp_total=1
[ $rcp_total -le 0 ] && rcp_total=1
prog_bar_base="[ ]"
while [ $rcp_tmp -lt $rcp_range ]
do
prog_bar_base="$prog_bar_base-"
#((rcp_tmp++))
((++rcp_tmp))
done
prog_bar_base="${prog_bar_base}|"
printf "\r$prog_bar_base\r"
set +e
eval $1 | while read line
do
#((rcp_lines++))
((++rcp_lines))
if [ $rcp_lines -ge $rcp_nextpos ]
then
rcp_percent=$(expr \( $rcp_lines \* 101 - 1 \) / $rcp_total )
rcp_prog=$(expr \( $rcp_lines \* \( $rcp_range + 1 \) - 1 \) / $rcp_total )
[ $rcp_prog -gt $rcp_range ] && rcp_prog=$rcp_range
rcp_nextpos=$(expr \( \( $rcp_percent + 1 \) \* $rcp_total \) / 100)
[ $rcp_nextpos -gt $rcp_total ] && rcp_nextpos=$rcp_total
rcp_tmp=0
progress_bar=""
while [ $rcp_tmp -lt $rcp_prog ]
do
progress_bar="$progress_bar#"
((rcp_tmp++))
done
printf "\r$prog_bar_base\r[%3d%%]$progress_bar\r" $rcp_percent
fi
done
set -e
echo ""
}
#$1: path
abs_path()
{
pushd "$1" >/dev/null
[ $? -ne 0 ] && return 1;
pwd
popd >/dev/null
}
#$1: $cfg_moddir is multi
prepare_unpacking_cleanup()
{
$CAT >> $HCM_SH_SDKINSTALL << EOF
echo_info "unpacking $cfg_moddir"
mkdir -pv $module_basedir
run_command_progress_float "tar -xvzf $(sub_dir $dir_postbuild_srctarball $HCM_DESTDIR)/$module_dirname.tgz -C $module_basedir/" 0 \
"tar -tzf $(sub_dir $dir_postbuild_srctarball $HCM_DESTDIR)/$module_dirname.tgz | wc -l"
EOF
if [ -z "$1" ] ;
then
$CAT >> $HCM_SH_SDKCLEANUP << EOF
echo_info "cleanup $cfg_moddir"
run_command_progress_float "rm $cfg_moddir -frv" 0 "find $cfg_moddir | wc -l"
EOF
else
$CAT >> $HCM_SH_SDKCLEANUP << EOF
echo_info "cleanup $cfg_moddir"
pushd $module_basedir
run_command_progress_float "rm $cfg_moddir -frv" 0 "find $cfg_moddir | wc -l"
popd
EOF
fi
}
# $1: prefix
# $2..$n: dirs list
make_dirs()
{
local make_dirs_count=2
local make_dirs_dir=""
[ -z "$1" ] && { echo_err "make_dirs mast have a prefix dir!"; return 1; }
$MKDIR $1 -p
while true
do
eval make_dirs_dir=\${$make_dirs_count}
[ -z "$make_dirs_dir" ] && break;
$MKDIR $1/$make_dirs_dir -p
#((make_dirs_count++))
((++make_dirs_count))
done
}
check_dir_empty()
{
[ -z "$1" ] && return 0;
! [ -d "$1" ] && return 0;
[ -z "$(find $1/ -maxdepth 1 -mindepth 1)" ] && return 0;
return 1
}
# $1 - $2
# $3: frefix for '/', like "\\\\/"
sub_dir()
{
local subdir=""
local dir_a=$(dirname $1/stub)
local dir_b=$(dirname $2/stub)
while [ "$dir_a" != "$dir_b" ] && [ "$dir_a" != "." ] && [ "$dir_a" != "/" ]
do
if [ -z "$subdir" ] ; then
subdir=$(basename $dir_a)
else
subdir=$(basename $dir_a)$3/$subdir
fi
dir_a=$(dirname $dir_a)
done
[ -z "$subdir" ] && subdir=.
dirname $subdir/stub
}
# $1: base dir
# $2: dest dir
# $3: frefix for '/', like "\\\\/"
base_offset_dir()
{
local ofstdir=$(sub_dir $2 $1)
local bodofst=""
while [ "$ofstdir" != "." ] && [ "$ofstdir" != "/" ]
do
if [ -z "$bodofst" ] ; then
bodofst=..
else
bodofst=..$3/$bodofst
fi
ofstdir=$(dirname $ofstdir)
done
dirname $bodofst/stub
}
#$1: dir
set_drv_kbuild()
{
local cc_file=Makefile
local mbdir=""
for mbdir in $1 $1/*
do
if [ -f "$mbdir/$cc_file" ] ;
then
local kbuild_dir_adj="$(base_offset_dir $HCM_DESTDIR $mbdir "\\\\")\\/$(echo "$HCM_SDKDIR_KBUILD" | \
sed -n "s/\//\\\\\\\\\//gp")"
$SED -i "s/^KERNEL_MAKE[ \t]*:=.*/KERNEL_MAKE := -C $kbuild_dir_adj/" $mbdir/$cc_file
fi
done
}
#$1: name
#$2: level
write_rootfs_level()
{
local rlevel_config=$HCM_DESTDIR/$HCM_SDKDIR_RESOURCE/rlevel.config
$TOUCH $rlevel_config
[ -n "$(grep "^\[[0-9A-Za-z][0-9A-Za-z\-]*\] $1$" < $rlevel_config)" ] && { \
echo_warn "$rlevel_config already have item '$1'"
return 0;
}
echo "[$2] $1" >> $rlevel_config
}
#$1:
remove_all_cvsdir()
{
! [ -d "$1" ] && { echo_warn "'$1' not found when remove 'CVS' directories."; return ; }
echo_info "Remove: 'CVS' directories in $1"
find $1 -type d -name "CVS" | xargs rm -fr
}
#$1: strip command
#$2: file list
strip_elf()
{
for file in $2
do
[ -z "$(file $file | grep "ELF .* executable, .*, not stripped")" ] && continue
echo_info "$1 $file"
$1 $file
done
}
#$1: strip command
#$2: file list
strip_lib()
{
for file in $2
do
[ -z "$(file $file | grep "ELF .* shared object, .*, not stripped")" ] && continue
echo_info "strip not really done: $file"
done
}
# $1: rootfs base
# $2: modules list
install_extern_kmod()
{
local iek_installed_modules=""
local iek_dest_module=""
local iek_depend_info=""
local iek_install_base=""
pushd $1 >/dev/null
iek_install_base=$PWD
popd >/dev/null
for iek_extmod in $(find $2)
do
iek_dest_module=/$HCM_INROOTFS_EXTKMOD/$(basename $iek_extmod)
[ -f "$HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE/$iek_dest_module" ] && \
{ echo_warn "Extern module $iek_extmod conflict: $iek_dest_module"; sleep 1; }
iek_installed_modules="$iek_installed_modules $iek_dest_module"
$CP -uf $iek_extmod $HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE/$iek_dest_module
done
pushd $HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE >/dev/null
echo_info "Generating modules dependency ..."
$DEPMOD -ae -b ./ -r -F $HCM_DESTDIR/$HCM_SDKDIR_KBUILD/System.map $HCM_KERNEL_RELEASE
for iek_extmod in $iek_installed_modules
do
iek_depend_info=$(grep "^$iek_extmod:" < $HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE/$HCM_INROOTFS_DEPKMOD/modules.dep | sed "s/\://")
for iek_extmod in $iek_depend_info
do
$CP -uf --parents .$iek_extmod $iek_install_base/
[ "x$cfg_install_strip" == "xyes" ] && $HCM_CROSS_COMPILE-strip $iek_install_base$ikm_kmod -g -S -d
done
done
popd >/dev/null
}
# $1: dest rootfs based
# $2: module list
function install_kernel_module()
{
local ikm_kmod_resdir=$HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE
local ikm_install_basedir=""
local ikm_kmod=""
pushd $1 >/dev/null
ikm_install_basedir=$PWD
popd >/dev/null
pushd $ikm_kmod_resdir >/dev/null
$DEPMOD -ae -b ./ -r -F $HCM_DESTDIR/$HCM_SDKDIR_KBUILD/System.map $HCM_KERNEL_RELEASE
while read ikm_kmod
do
ikm_depend_info=$(grep "^$ikm_kmod:" < $HCM_DESTDIR/$HCM_KERNEL_INSTALL_RESOURCE/$HCM_INROOTFS_DEPKMOD/modules.dep | sed "s/\://")
for ikm_kmod in $ikm_depend_info
do
$CP -uf --parents .$ikm_kmod $ikm_install_basedir
[ "x$cfg_install_strip" == "xyes" ] && $HCM_CROSS_COMPILE-strip $ikm_install_basedir$ikm_kmod -g -S -d
done
done << EOF
$(pushd $HCM_INROOTFS_KERNMOD >/dev/null; \
eval find "$2" -type f -printf \"/$HCM_INROOTFS_KERNMOD/%p\\\n\"; \
popd >/dev/null)
EOF
popd >/dev/null
}
function string_to_varname()
{
echo "$1" | sed 's/[^a-zA-Z0-9_]/_/g'
}
function patchset_get_param()
{
echo "$1" | cut -d')' -f1 | sed 's/[\(\|]/ /g'
}
function patchset_get_name()
{
echo "$file" | cut -d')' -f2
}
# $1: tgz package
function run_command_progress_tar()
{
local tar_file=$1
local dir_name=${tar_file%.*}
dir_name=${dir_name#*/}
total_size=$(gzip -l $tar_file | tail -n 1 | awk '{print $2}')
block_size=$(expr $total_size / 51200 + 1)
tar --blocking-factor=$block_size --checkpoint=1 --checkpoint-action=exec='printf "%3d%% of %32s unpacked\r" $TAR_CHECKPOINT $TAR_ARCHIVE' -xzf package/${dir_name}.tgz
printf "%3d%% of %32s unpacked\n" 100 "package/${dir_name}.tgz"
}
SDK_CHIP=ss524v100
SMP_TYPE=smp_linux