PID_FILE=/run/checkpwr.pid CHECKPWR=/etc/checkpwr BAT_PWR=/sys/class/gpio/bat_pwr/value test -x $CHECKPWR || exit 5 # Check for config file and read it case "$1" in start) if [ ! -f $PID_FILE ];then echo 1 > $BAT_PWR $CHECKPWR & echo $! | tee $PID_FILE else echo "checkpwr is already running..." fi ;; stop) # Stop execution of events killall tcu_main_ac tcu_hmi_ac 2>&1 > /dev/null sleep 1 sync echo "Cut bat power!!!" echo echo 0 > $BAT_PWR echo 0 > $BAT_PWR ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0
时间: 2024-02-11 11:22:51 浏览: 30
这段代码是一个 shell 脚本,根据命令行参数的不同执行不同的操作。让我为你解析一下:
- 首先,设置了一些变量,包括 `PID_FILE`、`CHECKPWR` 和 `BAT_PWR`。
- 然后,检查 `$CHECKPWR` 文件是否可执行,如果不可执行则退出脚本。
- 根据命令行参数的不同,进行不同的操作:
- 如果参数是 `start`,则执行以下操作:
- 检查 `$PID_FILE` 文件是否存在,如果不存在则执行以下操作:
- 将 `1` 写入 `$BAT_PWR` 文件。
- 后台运行 `$CHECKPWR` 脚本。
- 将 `$CHECKPWR` 的进程 ID 写入 `$PID_FILE` 文件。
- 如果 `$PID_FILE` 文件已经存在,则输出 "checkpwr is already running..."。
- 如果参数是 `stop`,则执行以下操作:
- 使用 `killall` 命令终止 `tcu_main_ac` 和 `tcu_hmi_ac` 进程。
- 等待1秒钟。
- 同步文件系统。
- 将 `0` 写入 `$BAT_PWR` 文件两次。
- 如果参数既不是 `start` 也不是 `stop`,则输出使用说明并退出脚本。
最后,脚本以退出码 0 结束。
该脚本的作用是启动和停止一个名为 `checkpwr` 的服务,并控制 `$BAT_PWR` 文件来切换电池电源。
相关问题
#!/bin/sh DC_DET=/sys/class/gpio/dc_det/value BAT_PWR=/sys/class/gpio/bat_pwr/value LCD_PWR=/sys/class/backlight/backlight/brightness pd_cnt_max=10 pd_cnt=0 while true;do res=`cat $DC_DET` if [ $res = "1" ];then # set backlight to lowest level echo 1 > $LCD_PWR let pd_cnt=$pd_cnt+1 if [ $pd_cnt -gt $pd_cnt_max ];then echo "Cut off battery power!" sync #while true;do # echo 0 > $BAT_PWR #done; poweroff exit 0 else let tmp=$pd_cnt_max-$pd_cnt echo "Power down count: $tmp" fi else # recover lcd backlight level if [ $pd_cnt -gt 0 ];then echo 8 > $LCD_PWR fi pd_cnt=0 fi sleep 1 done exit $?
这段代码是一个无限循环的 shell 脚本,用于检测电源状态并采取相应的操作。
首先,脚本定义了一些变量,包括 `DC_DET`、`BAT_PWR` 和 `LCD_PWR`。
然后,脚本进入一个无限循环。在每次循环中,它会读取 `$DC_DET` 文件的内容,并根据其值进行不同的操作:
- 如果 `$DC_DET` 文件的内容为 "1",表示电源连接正常,则执行以下操作:
- 将 LCD 的亮度设置为最低。
- 递增 `pd_cnt` 变量的值。
- 如果 `pd_cnt` 的值超过了 `pd_cnt_max` 的值,则执行以下操作:
- 同步文件系统。
- 执行 `poweroff` 命令来关机。
- 退出脚本。
- 否则,计算剩余的 `pd_cnt_max - pd_cnt` 并输出到屏幕上。
- 如果 `$DC_DET` 文件的内容不是 "1",表示电源未连接,则执行以下操作:
- 如果 `pd_cnt` 的值大于 0,则将 LCD 的亮度恢复为默认值 8。
- 将 `pd_cnt` 的值重置为 0。
最后,脚本会休眠 1 秒钟后再次进行下一次循环。
总之,该脚本用于监测电源状态,并在电源断开一定时间后执行关机操作。
rk3588 DTS文件中 &vbus5v0_typec_pwr_en{ status = "okay"; gpio = <&pca9555 PCA_IO1_4 GPIO_ACTIVE_HIGH>; //PCA_IO 14 };含义
这段代码是一个设备树节点的定义,其中包含一个名为`vbus5v0_typec_pwr_en`的节点。这个节点的作用是控制USB Type-C端口上的电源输出,它的状态被设置为"okay",表示该节点是可用的。同时,这个节点还包含了一个GPIO引脚的定义,它使用了PCA9555芯片的IO1_4引脚,并且被配置为高电平有效。这个GPIO引脚的状态可以通过软件控制,从而控制USB Type-C端口的电源输出状态。