一、编译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=0DTS_PMUIO2=0
DTS_VCCIO1=0
DTS_VCCIO3=0
DTS_VCCIO4=0
DTS_VCCIO5=0
DTS_VCCIO6=0
DTS_VCCIO7=0DTS_NAME=$1.dts.tmpCheckBckfileRet=0
checklistRst=0
GetVoltageFromDtsVal=0ShowChecklist()
{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 ]; thenecho "You chose Cancel."checklistRst=1fiVCCIO1=$(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 ]; thenecho "You chose Cancel."checklistRst=1fiVCCIO3=$(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 ]; thenecho "You chose Cancel."checklistRst=1fiVCCIO4=$(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 ]; thenecho "You chose Cancel."checklistRst=1fiVCCIO5=$(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 ]; thenecho "You chose Cancel."checklistRst=1fiVCCIO6=$(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 ]; thenecho "You chose Cancel."checklistRst=1fiVCCIO7=$(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 ]; thenecho "You chose Cancel."checklistRst=1fi
}DtsIoDomainVoltageVal=0
DtsIoDomainVoltage()
{DtsIoDomainVoltageVal=0flags=0if [ -f $DTS_NAME ];thenecho "found $DTS_NAME"fisupply=$(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" != "" ];thenDtsIoDomainVoltageVal=3300000elseDtsIoDomainVoltageVal=$(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=$DtsIoDomainVoltageValDtsIoDomainVoltage "vccio1-supply"DTS_VCCIO1=$DtsIoDomainVoltageValDtsIoDomainVoltage "vccio3-supply"DTS_VCCIO3=$DtsIoDomainVoltageValDtsIoDomainVoltage "vccio4-supply"DTS_VCCIO4=$DtsIoDomainVoltageValDtsIoDomainVoltage "vccio5-supply"DTS_VCCIO5=$DtsIoDomainVoltageValDtsIoDomainVoltage "vccio6-supply"DTS_VCCIO6=$DtsIoDomainVoltageValDtsIoDomainVoltage "vccio7-supply"DTS_VCCIO7=$DtsIoDomainVoltageVal
}CheckVoltageWithBackupfile()
{CheckBckfileRet=2val=$(cat $DTS_NAME.domain \| grep PMUIO2 \| cut -d ":" -f 2)if [ "$val" != "$DTS_PMUIO2" ];thenCheckBckfileRet=1echo "PMUIO2 Supply Power Voltage has changed!!! please reconfirm!!!"fival=$(cat $DTS_NAME.domain \| grep VCCIO1 \| cut -d ":" -f 2)if [ "$val" != "$DTS_VCCIO1" ];thenCheckBckfileRet=1echo "VCCIO1 Supply Power Voltage has changed!!! please reconfirm!!!"fival=$(cat $DTS_NAME.domain \| grep VCCIO3 \| cut -d ":" -f 2)if [ "$val" != "$DTS_VCCIO3" ];thenCheckBckfileRet=1echo "VCCIO3 Supply Power Voltage has changed!!! please reconfirm!!!"fival=$(cat $DTS_NAME.domain | grep VCCIO4 | cut -d ":" -f 2)if [ "$val" != "$DTS_VCCIO4" ];thenret=1echo "VCCIO4 Supply Power Voltage has changed!!! please reconfirm!!!"fival=$(cat $DTS_NAME.domain \| grep VCCIO5 \| cut -d ":" -f 2)if [ "$val" != "$DTS_VCCIO5" ];thenCheckBckfileRet=1echo "VCCIO5 Supply Power Voltage has changed!!! please reconfirm!!!"fival=$(cat $DTS_NAME.domain \| grep VCCIO6 \| cut -d ":" -f 2)if [ "$val" != "$DTS_VCCIO6" ];thenCheckBckfileRet=1echo "VCCIO6 Supply Power Voltage has changed!!! please reconfirm!!!"fival=$(cat $DTS_NAME.domain \| grep VCCIO7 \| cut -d ":" -f 2)if [ "$val" != "$DTS_VCCIO7" ];thenCheckBckfileRet=1echo "VCCIO7 Supply Power Voltage has changed!!! please reconfirm!!!"fi
}CheckVoltageWithEnter()
{checklistRst=0if [ $PMUIO2 -ne $DTS_PMUIO2 ];thenchecklistRst=1echo "PMUIO2 Supply Power Voltage has changed!!! please reconfirm!!!"fiif [ $VCCIO1 -ne $DTS_VCCIO1 ];thenchecklistRst=1echo "VCCIO1 Supply Power Voltage has changed!!! please reconfirm!!!"fiif [ $VCCIO3 -ne $DTS_VCCIO3 ];thenchecklistRst=1echo "VCCIO3 Supply Power Voltage has changed!!! please reconfirm!!!"fiif [ $VCCIO4 -ne $DTS_VCCIO4 ];thenchecklistRst=1echo "VCCIO4 Supply Power Voltage has changed!!! please reconfirm!!!"fiif [ $VCCIO5 -ne $DTS_VCCIO5 ];thenchecklistRst=1echo "VCCIO5 Supply Power Voltage has changed!!! please reconfirm!!!"fiif [ $VCCIO6 -ne $DTS_VCCIO6 ];thenchecklistRst=1echo "VCCIO6 Supply Power Voltage has changed!!! please reconfirm!!!"fiif [ $VCCIO7 -ne $DTS_VCCIO7 ];thenchecklistRst=1echo "VCCIO7 Supply Power Voltage has changed!!! please reconfirm!!!"fi
}IsRK356x=$(cat $DTS_NAME | grep sdhci@fe310000)
if [ "$IsRK356x" = "" ];thenecho "is not rk356x"exit 0
fiGetIoDomainVoltageFromDts
if [ -f $DTS_NAME.domain ];thenCheckVoltageWithBackupfile
fiif [ "$CheckBckfileRet" != "2" ];thenShowChecklistCheckVoltageWithEnterif [ $checklistRst -eq 0 ]; thenif [ -f $DTS_NAME.domain ];thenrm -rf $DTS_NAME.domainfiecho "PMUIO2 Supply Power Voltage1:$PMUIO2" >> $DTS_NAME.domainecho "VCCIO1 Supply Power Voltage1:$VCCIO1" >> $DTS_NAME.domainecho "VCCIO3 Supply Power Voltage1:$VCCIO3" >> $DTS_NAME.domainecho "VCCIO4 Supply Power Voltage1:$VCCIO4" >> $DTS_NAME.domainecho "VCCIO5 Supply Power Voltage1:$VCCIO5" >> $DTS_NAME.domainecho "VCCIO6 Supply Power Voltage1:$VCCIO6" >> $DTS_NAME.domainecho "VCCIO7 Supply Power Voltage1:$VCCIO7" >> $DTS_NAME.domainecho 0elseecho "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 hardwarefor 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.pdfdocs/Common/IO-DOMAIN/Rockchip_Developer_Guide_Linux_IO_DOMAIN_CN.pdf"exit 1fi
fi

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

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

  1. 详解Linux交互式shell脚本中创建对话框实例教程

    详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一 ...

  2. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  3. 创建交互式shell脚本对话框

    当你在终端环境下安装新的软件时,你可以经常看到信息对话框弹出,需要你的输入,比如:RHEL/CentOS自带的setup,对话框的类型有密码箱.检查表.菜单等等.他们可以引导你以一种直观的方式输入必要 ...

  4. 交互式SHELL脚本对话框(whiptail)

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  5. Linux系统shell脚本、python脚本编写

    GPU排队脚本 python脚本 GPU排队脚本 ---- GPU一旦空闲触发脚本执行程序 参考: GPU排队脚本(python脚本) cmd = 'bash run.sh' 该句设置要执行的pyth ...

  6. Linux的shell脚本函数教程

    Linux的shell脚本函数教程 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.shell中函数使用示例 一.shell介绍 二.shell函数的介绍 三.函数的定义 四.she ...

  7. linux经典脚本实例,Linux常用Shell脚本珍藏

    [实例简介] Linux常用Shell脚本珍藏 (2)编写任务定时器: C代码☆ 1. echo 00 1 *k */bin/sh /usr/bin/fileback">:/root/ ...

  8. Linux 常用Shell脚本,后端开发必备

    Linux 常用Shell脚本,后端开发必备 文章目录 Linux 常用Shell脚本,后端开发必备 1 用户猜数字 2 查看有多少远程的 IP 在连接本机 3 helloworld 4 打印 tom ...

  9. Linux下Shell脚本实战之监测磁盘空间

    Linux下Shell脚本实战之监测磁盘空间 一.脚本目的及要求 二.脚本内容 三.运行脚本 一.脚本目的及要求 (1) 监控/home下每各个用户目录的占用磁盘大小 (2) 监控/var/log下前 ...

最新文章

  1. 科大星云诗社动态20210320
  2. 客户端程序自动更新(升级)的方式
  3. 【Python】彩色图片转为灰度图(4行脚本搞定)
  4. Android文件下载——多文件多线程断点下载
  5. nero incd V4.3.23.3 序列号
  6. matlab二次求导函数,原来可以这样求导函数,再复杂的函数求导不再话下!
  7. 数据分析--卡方分析与方差分析
  8. 宁波大学2014年数学分析考研试题
  9. Beaglebone Black– 智能家居控制系统 LAS - 刷 WiFi 模块 ESP8266 Firmware 和 ESP8266 直接收发 GPIO 信号...
  10. 服务器挂起的原因以及需要如何应对?
  11. ff14服务器显示位置,ff14服务器
  12. 【华大测评】+串口DMA收发数据
  13. python格式和JSON格式转换
  14. 微信小程序之二级联动下拉列表
  15. cadence xbl封装转AD
  16. 【Kafka】Kafka为什么快?
  17. 【数学建模】十二(最后一篇):MATLAB CUMCM真题求解实例三:机理建模型
  18. MeeGo的中国救亡之路:Jolla与迪信通牵手合作
  19. android应用案例之Listview
  20. 线上CPU100%及应用OOM的排查和解决过程

热门文章

  1. ITIL 4 Foundation题目-3
  2. GDC翻译:Ghost Recon Wildlands 中的地形工具与技术
  3. wpf 实现实时毛玻璃(live blur)效果
  4. 地理教师也可以这样有趣
  5. lol现在哪个服务器有无限火力,LOL公布最新消息,无限火力模式再次登场,这次是全新的体验...
  6. 基因序列相似度(LCS)
  7. python有道字典_Ubuntu安装有道词典
  8. 猿创征文 | 国产数据库之PolarDB-X数据库详解安装和使用
  9. 《Linux命令行和Shell脚本开发圣经》:内容目录
  10. DX11可以完美兼容于DX10显卡