Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 29 additions & 7 deletions scripts/libs/core_tools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@

[ -n "$(find --help 2>&1 | grep -o size)" ] && find_para=' -size +2000' #find命令兼容

#根据环境权衡决定是否把裸二进制存于$BINDIR(rom)——省RAM,前提是rom装得下
#$1=裸二进制字节数。仅当$TMPDIR在内存(tmpfs)时裸存才省RAM;
#再按$BINDIR文件系统估算裸二进制落盘体积(透明压缩fs约2:1),需留有余量($raw_margin,默认8M)
store_raw_worth_it(){
case "$(df -T "$TMPDIR" 2>/dev/null | awk 'END{print $2}')" in tmpfs|ramfs) ;; *) return 1 ;; esac
rom_free=$(df -k "$BINDIR" 2>/dev/null | awk 'END{print $4}') #KB
[ -z "$rom_free" ] && return 1
case "$(df -T "$BINDIR" 2>/dev/null | awk 'END{print $2}')" in
squashfs|ubifs|overlay|overlayfs) est=$(( ${1:-0}/1024/2 )) ;; #透明压缩,约2:1
*) est=$(( ${1:-0}/1024 )) ;; #无压缩,全量
esac
[ $(( rom_free - est )) -gt "${raw_margin:-8192}" ] && return 0 || return 1
}

core_unzip() { #$1:需要解压的文件 $2:目标文件名
if echo "$1" |grep -q 'tar.gz$' ;then
[ "$BINDIR" = "$TMPDIR" ] && rm -rf "$TMPDIR"/CrashCore #小闪存模式防止空间不足
Expand All @@ -14,6 +28,8 @@ core_unzip() { #$1:需要解压的文件 $2:目标文件名
rm -rf "$TMPDIR"/core_tmp
elif echo "$1" |grep -q '.gz$' ;then
gunzip -c "$1" > "$TMPDIR"/"$2"
elif echo "$1" |grep -q '.raw$' ;then
ln -sf "$1" "$TMPDIR"/"$2"
elif echo "$1" |grep -q '.upx$' ;then
ln -sf "$1" "$TMPDIR"/"$2"
else
Expand Down Expand Up @@ -45,16 +61,20 @@ core_check(){
rm -rf "$1" "$TMPDIR"/core_new
return 2
else
rm -f "$BINDIR"/CrashCore.tar.gz "$BINDIR"/CrashCore.gz "$BINDIR"/CrashCore.upx
if [ -z "$zip_type" ];then
rm -f "$BINDIR"/CrashCore.tar.gz "$BINDIR"/CrashCore.gz "$BINDIR"/CrashCore.upx "$BINDIR"/CrashCore.raw
if [ "$zip_type" = 'upx' ];then
mv -f "$1" "$BINDIR/CrashCore.upx"
rm -f "$TMPDIR"/core_new
ln -sf "$BINDIR/CrashCore.upx" "$TMPDIR/CrashCore"
elif store_raw_worth_it "$(wc -c < "$TMPDIR/core_new")" ;then
rm -f "$1"
mv -f "$TMPDIR/core_new" "$BINDIR/CrashCore.raw"
ln -sf "$BINDIR/CrashCore.raw" "$TMPDIR/CrashCore"
elif [ -z "$zip_type" ];then
gzip -c "$TMPDIR/core_new" > "$BINDIR/CrashCore.gz"
mv -f "$TMPDIR/core_new" "$TMPDIR/CrashCore"
else
mv -f "$1" "$BINDIR/CrashCore.$zip_type"
fi
if [ "$zip_type" = 'upx' ];then
rm -f "$1" "$TMPDIR"/core_new
ln -sf "$TMPDIR/CrashCore.upx" "$TMPDIR/CrashCore"
else
mv -f "$TMPDIR/core_new" "$TMPDIR/CrashCore"
fi
core_v="$v"
Expand All @@ -70,6 +90,8 @@ core_webget(){
. "$CRASHDIR"/libs/check_target.sh
if [ -z "$custcorelink" ];then
[ -z "$zip_type" ] && zip_type='tar.gz'
#若环境适合裸存(见store_raw_worth_it,按典型核心~45M估算),避免下载upx,改取tar.gz的裸二进制
[ "$zip_type" = 'upx' ] && store_raw_worth_it 47185920 && zip_type='tar.gz'
get_bin "$TMPDIR/Coretmp.$zip_type" "bin/$crashcore/${target}-linux-${cpucore}.$zip_type"
else
case "$custcorelink" in
Expand Down