285 lines
7.0 KiB
Bash
285 lines
7.0 KiB
Bash
#!/bin/sh
|
|
# Useage: ./loadxm [chip_type] [ -r|-i|-a|-h|-osmem]
|
|
# -r : rmmod all modules
|
|
# -i : insmod all modules
|
|
# -a : remove modules first, then insert modules
|
|
# -h : help information
|
|
# -osmem : display os memory size
|
|
# default : rmmod all moules and then insmod them
|
|
# e.g: ./load chip -i
|
|
|
|
####################Variables Definition##########################
|
|
|
|
CHIP_TYPE=$1; # chip type
|
|
|
|
#DDR start:0x40000000, kernel start:0x40000000, OS(32M); MMZ start:0x42000000
|
|
mem_total=64 # 64M, total mem
|
|
mem_start=0x40000000 # phy mem start
|
|
os_mem_size=32 # 32M, os mem
|
|
mmz_start=0x42000000; # mmz start addr
|
|
mmz_size=32; # 32M, mmz size
|
|
mem_unit=MB # mem unit (MB or KB, default MB)
|
|
##################################################################
|
|
pre_mem_info()
|
|
{
|
|
if [[ "$CHIP_TYPE" == "xm7206v11a" || "$CHIP_TYPE" == "xm7206v11at" || "$CHIP_TYPE" == "xm7206v11" ]];then
|
|
mem_total=128 # total mem
|
|
mem_start=0x40000000 # phy mem start
|
|
os_mem_size=32 # os mem
|
|
mmz_start=0x42000000; # mmz start addr
|
|
mmz_size=96; # mmz size
|
|
elif [[ "$CHIP_TYPE" == "xm7206v12a" ]];then
|
|
mem_total=256 # total mem
|
|
mem_start=0x40000000 # phy mem start
|
|
os_mem_size=32 # os mem
|
|
mmz_start=0x42000000; # mmz start addr
|
|
mmz_size=224; # mmz size
|
|
else
|
|
mem_total=64 # total mem
|
|
mem_start=0x40000000 # phy mem start
|
|
os_mem_size=32 # os mem
|
|
mmz_start=0x42000000; # mmz start addr
|
|
mmz_size=32; # mmz size
|
|
fi
|
|
}
|
|
|
|
check_mem_info()
|
|
{
|
|
var=`cat /proc/cmdline`
|
|
temp=${var##*mem=}
|
|
bootargs_mem=${temp%%M*}
|
|
|
|
if [ $os_mem_size -lt $bootargs_mem ]; then
|
|
echo "bootargs_mem: $bootargs_mem, os_mem_size: $os_mem_size"
|
|
echo "the mem in bootargs conflicts with the osmem in the load script, please check these two parameters."
|
|
exit 0;
|
|
fi
|
|
}
|
|
|
|
check_mem_info_KB()
|
|
{
|
|
var=`cat /proc/cmdline`
|
|
temp=${var##*mem=}
|
|
bootargs_mem=${temp%%K*}
|
|
|
|
if [ $os_mem_size -lt $bootargs_mem ]; then
|
|
echo "bootargs_mem: $bootargs_mem, os_mem_size: $os_mem_size"
|
|
echo "the mem in bootargs conflicts with the osmem in the load script, please check these two parameters."
|
|
exit 0;
|
|
fi
|
|
}
|
|
|
|
report_error()
|
|
{
|
|
echo "******* Error: There's something wrong, please check! *****"
|
|
exit 1
|
|
}
|
|
|
|
insert_audio()
|
|
{
|
|
insmod xm_acomm.ko
|
|
insmod xm_aio.ko
|
|
insmod xm_ao.ko
|
|
insmod xm_ai.ko
|
|
insmod xm_aenc.ko
|
|
insmod xm_adec.ko
|
|
}
|
|
|
|
remove_audio()
|
|
{
|
|
rmmod xm_adec
|
|
rmmod xm_aenc
|
|
rmmod xm_ai
|
|
rmmod xm_ao
|
|
rmmod xm_aio
|
|
rmmod xm_acomm
|
|
}
|
|
|
|
insert_ko()
|
|
{
|
|
insmod xm_osal.ko mmz_allocator=xmedia mmz=anonymous,0,$mmz_start,$mmz_size || report_error
|
|
insmod xm_common.ko
|
|
insmod xm_pm.ko
|
|
insmod xm_vgs.ko
|
|
insmod xm_tde.ko
|
|
insmod xm_region.ko
|
|
insmod xm_isp.ko
|
|
insmod xm_vpss.ko
|
|
insmod xm_npu.ko
|
|
insmod xm_vi.ko
|
|
insmod xm_chnl.ko
|
|
insmod xm_vedu.ko
|
|
insmod xm_rc.ko
|
|
insmod xm_jpege.ko
|
|
insmod xm_h265e.ko
|
|
insmod xm_h264e.ko
|
|
insmod xm_venc.ko
|
|
insmod xm_vo.ko
|
|
insmod xm_fb.ko fb_vram="gfbg:vram0_size:3600"
|
|
insmod xm_cipher_drv.ko
|
|
insmod xm_ive.ko
|
|
insert_audio
|
|
|
|
## ive node数量为节省内存默认为64(取值范围8-512),数量可配例如:insmod xm_ive.ko max_node_num=128
|
|
}
|
|
|
|
remove_ko()
|
|
{
|
|
remove_audio
|
|
rmmod xm_cipher_drv
|
|
rmmod xm_ive
|
|
rmmod xm_fb
|
|
rmmod xm_vo
|
|
rmmod xm_venc
|
|
rmmod xm_h265e
|
|
rmmod xm_h264e
|
|
rmmod xm_jpege
|
|
rmmod xm_rc
|
|
rmmod xm_vedu
|
|
rmmod xm_chnl
|
|
rmmod xm_vi
|
|
rmmod xm_npu
|
|
rmmod xm_vpss
|
|
rmmod xm_isp
|
|
rmmod xm_region
|
|
rmmod xm_tde
|
|
rmmod xm_vgs
|
|
rmmod xm_pm
|
|
rmmod xm_common
|
|
rmmod xm_osal
|
|
}
|
|
|
|
load_usage()
|
|
{
|
|
echo "Usage: ./load [chip_type] [-option]"
|
|
echo "chip_type:"
|
|
echo " xm7206v10 xm7206v10b xm7206v11a xm7206v12a xm7206v11 xm7206v11at"
|
|
echo "options:"
|
|
echo " -i insert modules"
|
|
echo " -r remove modules"
|
|
echo " -a remove modules first, then insert modules"
|
|
echo " -h help information"
|
|
echo -e "for example: ./load chip -i\n"
|
|
}
|
|
|
|
calc_mmz_info()
|
|
{
|
|
mmz_start=`echo "$mem_start $os_mem_size" |
|
|
awk 'BEGIN { temp = 0; }
|
|
{
|
|
temp = $1/1024/1024 + $2;
|
|
}
|
|
END { printf("0x%x00000\n", temp); }'`
|
|
|
|
mmz_size=`echo "$mem_total $os_mem_size" |
|
|
awk 'BEGIN { temp = 0; }
|
|
{
|
|
temp = $1 - $2;
|
|
}
|
|
END { printf("%dMB\n", temp); }'`
|
|
echo "mem_total: ${mem_total}MB, os_mem_size: ${os_mem_size}MB, mmz_start: $mmz_start, mmz_size: $mmz_size"
|
|
}
|
|
|
|
calc_mmz_info_KB()
|
|
{
|
|
mmz_start=`echo "$mem_start $(echo "$os_mem_size * 1024" | bc)" |
|
|
awk 'BEGIN { temp = 0; }
|
|
{
|
|
temp = $1 + $2;
|
|
}
|
|
END { printf("0x%x\n", temp); }'`
|
|
|
|
mmz_size=`echo "$mem_total $os_mem_size" |
|
|
awk 'BEGIN { temp = 0; }
|
|
{
|
|
temp = $1 - $2;
|
|
}
|
|
END { printf("%dKB\n", temp); }'`
|
|
echo "mem_total: ${mem_total}KB, os_mem_size: ${os_mem_size}KB, mmz_start: $mmz_start, mmz_size: $mmz_size"
|
|
}
|
|
|
|
######################parse arg###################################
|
|
b_arg_insmod=0
|
|
b_arg_remove=0
|
|
b_arg_os_mem=0
|
|
|
|
pre_mem_info;
|
|
|
|
for arg in $@
|
|
do
|
|
|
|
if [ $b_arg_os_mem -eq 1 ] ; then
|
|
b_arg_os_mem=0;
|
|
os_mem_size=$arg;
|
|
|
|
if [ -z $os_mem_size ]; then
|
|
echo "[error] os_mem_size is null"
|
|
exit;
|
|
fi
|
|
fi
|
|
|
|
case $arg in
|
|
"-i")
|
|
b_arg_insmod=1;
|
|
;;
|
|
"-r")
|
|
b_arg_remove=1;
|
|
;;
|
|
"-a")
|
|
b_arg_insmod=1;
|
|
b_arg_remove=1;
|
|
;;
|
|
"-h")
|
|
load_usage;
|
|
;;
|
|
"-osmem")
|
|
b_arg_os_mem=1;
|
|
;;
|
|
esac
|
|
done
|
|
#######################parse arg end########################
|
|
|
|
if [ $# -lt 2 ]; then
|
|
load_usage;
|
|
exit;
|
|
fi
|
|
|
|
echo "CHIP_TYPE:$CHIP_TYPE"
|
|
if [[ "$CHIP_TYPE" != "DUMMY" \
|
|
&& "$CHIP_TYPE" != "xm7206v10" && "$CHIP_TYPE" != "xm7206v10b" && "$CHIP_TYPE" != "xm7206v11a" && "$CHIP_TYPE" != "xm7206v12a" \
|
|
&& "$CHIP_TYPE" != "xm7206v11" && "$CHIP_TYPE" != "xm7206v11at" \
|
|
]];then
|
|
echo "[err] chip[$CHIP_TYPE] not support"
|
|
load_usage;
|
|
exit;
|
|
fi
|
|
|
|
if [ $os_mem_size -ge $mem_total ] ; then
|
|
echo "[err] os_mem[$os_mem_size], over total_mem[$mem_total]"
|
|
exit;
|
|
fi
|
|
|
|
|
|
if [ "KB" == "$mem_unit" ]; then
|
|
calc_mmz_info_KB;
|
|
else
|
|
calc_mmz_info;
|
|
fi
|
|
|
|
#######################Action###############################
|
|
|
|
if [ "KB" == "$mem_unit" ]; then
|
|
check_mem_info_KB;
|
|
else
|
|
check_mem_info;
|
|
fi
|
|
|
|
if [ $b_arg_remove -eq 1 ]; then
|
|
remove_ko;
|
|
fi
|
|
|
|
if [ $b_arg_insmod -eq 1 ]; then
|
|
insert_ko;
|
|
fi
|
|
|