2021-10-26 linux 交互式shell脚本对话框----whiptail指令

一、编译Android kernel的时候弹出一个选择对话框,比较好奇,就认真分析了一下这个脚本对话框怎么来的。

       1、编译的时候会调用mkimg文件。

        2、mkimg文件里面会调用whiptail指令弹出选择对话框,用Tab键选择ok或者cancel。

#!/bin/sh
# SPDX-License-Identifier: (GPL-2.0+ OR MIT)
# Copyright (c) 2021 Rockchip Electronics Co., Ltd.

PMUIO2=0
VCCIO1=0
VCCIO3=0
VCCIO4=0
VCCIO5=0
VCCIO6=0
VCCIO7=0

DTS_PMUIO2=0
DTS_VCCIO1=0
DTS_VCCIO3=0
DTS_VCCIO4=0
DTS_VCCIO5=0
DTS_VCCIO6=0
DTS_VCCIO7=0

DTS_NAME=$1.dts.tmp

CheckBckfileRet=0
checklistRst=0
GetVoltageFromDtsVal=0

ShowChecklist()
{
	PMUIO2=$(whiptail --title "IO Domain Checklist" --menu --nocancel\
	"Get the corresponding value from the hardware schematic diagram" 15 60 2 \
	"1800000" "PMUIO2 Supply Power Voltage(uV)" \
	"3300000" "PMUIO2 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3)
	exitstatus=$?
	if [ $exitstatus != 0 ]; then
		echo "You chose Cancel."
		checklistRst=1
	fi

	VCCIO1=$(whiptail --title "IO Domain Checklist" --menu --nocancel\
	"Get the corresponding value from the hardware schematic diagram" 15 60 2 \
	"1800000" "VCCIO1 Supply Power Voltage(uV)" \
	"3300000" "VCCIO1 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3)
	exitstatus=$?
	if [ $exitstatus != 0 ]; then
		echo "You chose Cancel."
		checklistRst=1
	fi

	VCCIO3=$(whiptail --title "IO Domain Checklist" --menu --nocancel\
	"Get the corresponding value from the hardware schematic diagram" 15 60 2 \
	"1800000" "VCCIO3 Supply Power Voltage(uV)" \
	"3300000" "VCCIO3 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3)
	exitstatus=$?
	if [ $exitstatus != 0 ]; then
		echo "You chose Cancel."
		checklistRst=1
	fi

	VCCIO4=$(whiptail --title "IO Domain Checklist" --menu --nocancel\
	"Get the corresponding value from the hardware schematic diagram" 15 60 2 \
	"1800000" "VCCIO4 Supply Power Voltage(uV)" \
	"3300000" "VCCIO4 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3)
	exitstatus=$?
	if [ $exitstatus != 0 ]; then
		echo "You chose Cancel."
		checklistRst=1
	fi

	VCCIO5=$(whiptail --title "IO Domain Checklist" --menu --nocancel\
	"Get the corresponding value from the hardware schematic diagram" 15 60 2 \
	"1800000" "VCCIO5 Supply Power Voltage(uV)" \
	"3300000" "VCCIO5 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3)
	exitstatus=$?
	if [ $exitstatus != 0 ]; then
		echo "You chose Cancel."
		checklistRst=1
	fi

	VCCIO6=$(whiptail --title "IO Domain Checklist" --menu --nocancel\
	"Get the corresponding value from the hardware schematic diagram" 15 60 2 \
	"1800000" "VCCIO6 Supply Power Voltage(uV)" \
	"3300000" "VCCIO6 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3)
	exitstatus=$?
	if [ $exitstatus != 0 ]; then
		echo "You chose Cancel."
		checklistRst=1
	fi

	VCCIO7=$(whiptail --title "IO Domain Checklist" --menu --nocancel\
	"Get the corresponding value from the hardware schematic diagram" 15 60 2 \
	"1800000" "VCCIO7 Supply Power Voltage(uV)" \
	"3300000" "VCCIO7 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3)
	exitstatus=$?
	if [ $exitstatus != 0 ]; then
		echo "You chose Cancel."
		checklistRst=1
	fi
}

DtsIoDomainVoltageVal=0
DtsIoDomainVoltage()
{
	DtsIoDomainVoltageVal=0
	flags=0
	if [ -f $DTS_NAME ];then
		echo "found $DTS_NAME"
	fi

	supply=$(cat $DTS_NAME \
		| grep $1 \
		| cut -d "&" -f 2 \
		| cut -d ">" -f 1 \
		| tail -n1)

	ldo_str=$(cat $DTS_NAME  \
		| awk 'BEGIN {RS="\n\n+";ORS="\n\n"}/regulator-name/{print $0}' \
		| awk BEGIN{RS=EOF}'{gsub(/\n/," ");print $0}' \
		| grep $supply \
		| awk '{print $2}' \
		| awk -F 'SWITCH_REG' '{print $2}')

	if [ "$ldo_str" != "" ];then
		DtsIoDomainVoltageVal=3300000
	else
		DtsIoDomainVoltageVal=$(cat $DTS_NAME  \
			| awk 'BEGIN {RS="\n\n+";ORS="\n\n"}/regulator-name/{print $0}' \
			| awk BEGIN{RS=EOF}'{gsub(/\n/," ");print $0}' \
			|grep $supply \
			| awk -F 'regulator-max-microvolt' '{print $2}' \
			| cut -d "<" -f 2 \
			| cut -d ">" -f 1)
	fi
}

GetIoDomainVoltageFromDts()
{
	DtsIoDomainVoltage "pmuio2-supply"
	DTS_PMUIO2=$DtsIoDomainVoltageVal
	DtsIoDomainVoltage "vccio1-supply"
	DTS_VCCIO1=$DtsIoDomainVoltageVal
	DtsIoDomainVoltage "vccio3-supply"
	DTS_VCCIO3=$DtsIoDomainVoltageVal
	DtsIoDomainVoltage "vccio4-supply"
	DTS_VCCIO4=$DtsIoDomainVoltageVal
	DtsIoDomainVoltage "vccio5-supply"
	DTS_VCCIO5=$DtsIoDomainVoltageVal
	DtsIoDomainVoltage "vccio6-supply"
	DTS_VCCIO6=$DtsIoDomainVoltageVal
	DtsIoDomainVoltage "vccio7-supply"
	DTS_VCCIO7=$DtsIoDomainVoltageVal
}

CheckVoltageWithBackupfile()
{
	CheckBckfileRet=2
	val=$(cat $DTS_NAME.domain \
			| grep PMUIO2 \
			| cut -d ":" -f 2)
	if [ "$val" != "$DTS_PMUIO2" ];then
		CheckBckfileRet=1
		echo "PMUIO2 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	val=$(cat $DTS_NAME.domain \
			| grep VCCIO1 \
			| cut -d ":" -f 2)
	if [ "$val" != "$DTS_VCCIO1" ];then
		CheckBckfileRet=1
		echo "VCCIO1 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	val=$(cat $DTS_NAME.domain \
			| grep VCCIO3 \
			| cut -d ":" -f 2)
	if [ "$val" != "$DTS_VCCIO3" ];then
		CheckBckfileRet=1
		echo "VCCIO3 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	val=$(cat $DTS_NAME.domain | grep VCCIO4 | cut -d ":" -f 2)
	if [ "$val" != "$DTS_VCCIO4" ];then
		ret=1
		echo "VCCIO4 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	val=$(cat $DTS_NAME.domain \
			| grep VCCIO5 \
			| cut -d ":" -f 2)
	if [ "$val" != "$DTS_VCCIO5" ];then
		CheckBckfileRet=1
		echo "VCCIO5 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	val=$(cat $DTS_NAME.domain \
			| grep VCCIO6 \
			| cut -d ":" -f 2)
	if [ "$val" != "$DTS_VCCIO6" ];then
		CheckBckfileRet=1
		echo "VCCIO6 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	val=$(cat $DTS_NAME.domain \
			| grep VCCIO7 \
			| cut -d ":" -f 2)
	if [ "$val" != "$DTS_VCCIO7" ];then
		CheckBckfileRet=1
		echo "VCCIO7 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
}

CheckVoltageWithEnter()
{
	checklistRst=0
	if [ $PMUIO2 -ne $DTS_PMUIO2 ];then
		checklistRst=1
		echo "PMUIO2 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	if [ $VCCIO1 -ne $DTS_VCCIO1 ];then
		checklistRst=1
		echo "VCCIO1 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	if [ $VCCIO3 -ne $DTS_VCCIO3 ];then
		checklistRst=1
		echo "VCCIO3 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	if [ $VCCIO4 -ne $DTS_VCCIO4 ];then
		checklistRst=1
		echo "VCCIO4 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	if [ $VCCIO5 -ne $DTS_VCCIO5 ];then
		checklistRst=1
		echo "VCCIO5 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	if [ $VCCIO6 -ne $DTS_VCCIO6 ];then
		checklistRst=1
		echo "VCCIO6 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
	if [ $VCCIO7 -ne $DTS_VCCIO7 ];then
		checklistRst=1
		echo "VCCIO7 Supply Power Voltage has changed!!! please reconfirm!!!"
	fi
}

IsRK356x=$(cat $DTS_NAME | grep sdhci@fe310000)
if [ "$IsRK356x" = "" ];then
	echo "is not rk356x"
	exit 0
fi

GetIoDomainVoltageFromDts
if [ -f $DTS_NAME.domain ];then
	CheckVoltageWithBackupfile
fi

if [ "$CheckBckfileRet" != "2" ];then
	ShowChecklist
	CheckVoltageWithEnter
	if [ $checklistRst -eq 0 ]; then
		if [ -f $DTS_NAME.domain ];then
			rm -rf $DTS_NAME.domain
		fi

		echo "PMUIO2 Supply Power Voltage1:$PMUIO2" >> $DTS_NAME.domain
		echo "VCCIO1 Supply Power Voltage1:$VCCIO1" >> $DTS_NAME.domain
		echo "VCCIO3 Supply Power Voltage1:$VCCIO3" >> $DTS_NAME.domain
		echo "VCCIO4 Supply Power Voltage1:$VCCIO4" >> $DTS_NAME.domain
		echo "VCCIO5 Supply Power Voltage1:$VCCIO5" >> $DTS_NAME.domain
		echo "VCCIO6 Supply Power Voltage1:$VCCIO6" >> $DTS_NAME.domain
		echo "VCCIO7 Supply Power Voltage1:$VCCIO7" >> $DTS_NAME.domain
		echo 0
	else
		echo "io-domian  default as:
		    	&pmu_io_domains {
				status = "okay";
				pmuio1-supply = <&vcc3v3_pmu>;
				pmuio2-supply = <&vcc3v3_pmu>;
				vccio1-supply = <&vccio_acodec>;
				vccio3-supply = <&vccio_sd>;
				vccio4-supply = <&vcc_3v3>;
				vccio5-supply = <&vcc_3v3>;
				vccio6-supply = <&vcc_3v3>;
				vccio7-supply = <&vcc_3v3>;
			};
			TODO:
			Need to be modified according to the actual hardware
			for example rk3568-evb:
			&pmu_io_domains {
				status = "okay";
				pmuio1-supply = <&vcc3v3_pmu>;
				pmuio2-supply = <&vcc3v3_pmu>;
				vccio1-supply = <&vccio_acodec>;
				vccio3-supply = <&vccio_sd>;
				vccio4-supply = <&vcc_1v8>;
				vccio5-supply = <&vcc_3v3>;
				vccio6-supply = <&vcc_1v8>;
				vccio7-supply = <&vcc_3v3>;
			};

		io-domain docs:

		Android11 SDK:
		RKDocs/android/Rockchip_Developer_Guide_Android11_SDK_V1.1.2_CN.pdf or newer.

		RK356X Linux SDK:
		docs/RK356X/Rockchip_RK356X_Introduction_IO_Power_Domains_Configuration.pdf
		docs/Common/IO-DOMAIN/Rockchip_Developer_Guide_Linux_IO_DOMAIN_CN.pdf

		"

		exit 1
	fi
fi

二、关于脚本对话框,这个文章说的比较详细,这里就不细说了,可以参考下面的文章:交互式shell脚本对话框----whiptail指令 - 想要早睡的彼得潘 - 博客园

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值