luckfox-pico-sdk/sysdrv/tools/pc/toolkits/update_dtb_bootargs.sh
2023-08-08 20:36:47 +08:00

165 lines
3.8 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
#
# SET ANSI COLORS {{{ START
C_RED=""
C_CYAN=""
C_BLUE=""
C_GREEN=""
C_WHITE=""
C_YELLOW=""
C_MAGENTA=""
C_NORMAL=""
# SET ANSI COLORS END }}}
set -e
cmd=`realpath $0`
cwd=`dirname $cmd`
CMD_VERSION=1.0.0
function msg_dbg()
{
if [ "$RK_DEBUG" != "1" ]; then
return
fi
echo -e "${C_CYAN}[$(basename $0):info] $*${C_NORMAL}" >&2
}
function msg_info()
{
echo -e "${C_GREEN}[$(basename $0):info] $1${C_NORMAL}" >&2
}
function msg_warn()
{
echo -e "${C_YELLOW}[$(basename $0):warn] $1${C_NORMAL}" >&2
}
function msg_error()
{
echo -e "${C_RED}[$(basename $0):error] $1${C_NORMAL}" >&2
}
function msg_help()
{
echo "command format:"
echo " `basename $cmd` -v -h --cmdline --output --dtb"
echo " -v|--version (Optional) view this version."
echo " -h|--help (Optional) view this help message."
echo " --dtb (MUST) input dtb file path."
echo " --cmdline (MUST) input strings which update into kernel's cmdline."
echo " --output (MUST) output file path."
return
}
function chk_param()
{
local cnt
cnt=0
while [ $# -ne 0 ]
do
case $1 in
-v|--version)
msg_info "V$CMD_VERSION"
exit 0
;;
-h|--help)
msg_help
exit 0
;;
--cmdline)
PARAM_CMDLINE=$2
cnt=$(( cnt + 1 ))
while [ -n "$3" ]
do
case $3 in
--*)
break
;;
*)
PARAM_CMDLINE="$PARAM_CMDLINE $3"
;;
esac
shift
done
;;
--output)
PARAM_OUTPUT_PATH=$2
cnt=$(( cnt + 1 ))
;;
--dtb)
PARAM_DTB_PATH=$2
cnt=$(( cnt + 1 ))
;;
*)
;;
esac
shift
done
if [ $cnt -ne 3 \
-o ! -f "$PARAM_DTB_PATH" \
-o -z "$PARAM_OUTPUT_PATH" ]; then
msg_error "Invalid parameter..."
if [ ! -f "$PARAM_DTB_PATH" ];then
msg_error "Not found file: $PARAM_DTB_PATH"
fi
msg_help
exit -1
fi
if [ -z "$PARAM_CMDLINE" ];then
msg_warn "parameter --cmdline is NULL, nothing to be done"
exit 0
fi
}
################################################################################
# Start
################################################################################
dtc --version &>/dev/null
if [ "$?" -ne 0 ]; then
msg_error "No found dtc tool, please install it. (run \"sudo apt-get install device-tree-compile\")"
return
fi
PARAM_DTB_PATH=""
PARAM_CMDLINE=""
PARAM_OUTPUT_PATH=""
chk_param $@
msg_info "PARAM_DTB_PATH = $PARAM_DTB_PATH"
msg_info "PARAM_CMDLINE = $PARAM_CMDLINE"
msg_info "PARAM_OUTPUT_PATH = $PARAM_OUTPUT_PATH"
__workdir=$(dirname $PARAM_OUTPUT_PATH)/.update_dtb_workdir
rm -rf $__workdir
mkdir -p $__workdir
cp -f $PARAM_DTB_PATH $__workdir/fdt
dump_kernel_dtb_file=${__workdir}/fdt.dump.dts
dtc -I dtb -O dts -o ${dump_kernel_dtb_file} $__workdir/fdt 2>/dev/null
if cat $dump_kernel_dtb_file |grep "bootargs = " \
| grep -w -e 'rootfstype=erofs' -e 'root=/dev/rd0' &>/dev/null;then
msg_info "Ignore rootfstype=erofs or root=/dev/rd0"
else
sed -i -e 's/\(bootargs = "\)\(.*\)\(root=[0-9a-zA-Z\/:_]\+[^ ]\)\(.*\)"/\1\2\4"/g' \
-e 's/\(bootargs = "\)\(.*\)\(rootfstype=[0-9a-zA-Z]\+[^ ]\)\(.*\)"/\1\2\4"/g' \
$dump_kernel_dtb_file
fi
sed -i -e 's/\(bootargs = "\)\(.*\)\(ubi.mtd==[0-9]\+[^ ]\)\(.*\)"/\1\2\4"/g' \
-e 's/\(bootargs = "\)\(.*\)\(ubi.block=0,rootfs \)\(.*\)"/\1\2\4"/g' \
-e 's/\(bootargs = "\)\(.*\)\(mtdparts=[0-9a-zA-Z:@,(_)]\+[^ ]\)\(.*\)"/\1\2\4"/g' \
-e 's/\(bootargs = "\)\(.*\)\(blkdevparts=[0-9a-zA-Z:@,(_)]\+[^ ]\)\(.*\)"/\1\2\4"/g' \
-e 's/\(bootargs = "\)\(.*\)\(rk_dma_heap_cma=[0-9a-zA-Z]\+[^ ]\)\(.*\)"/\1\2\4"/g' $dump_kernel_dtb_file
sed_cmd="sed -i -e 's/\(bootargs = \"\)\(.*\)\"/\1\2 ${PARAM_CMDLINE////\\/}\"/g' $dump_kernel_dtb_file"
msg_dbg $sed_cmd
eval $sed_cmd
dtc -I dts -O dtb -o ${PARAM_OUTPUT_PATH} $dump_kernel_dtb_file 2>/dev/null
if [ "$RK_DEBUG" != "1" ]; then
rm -rf $__workdir
fi