fix(boot): M21 开机 logo 亮度 — S11 画前压到 <=20 + 新增 S22brightness 按用户设置恢复
冷启动 logo 很亮:stock S11 是画完 logo 之后才写死 60,画图那一刻用的是面板上电默认高亮; 而 S11 早于 S21mount_ubifs,那时 /usr/data 未挂载、读不到 settings.conf,只能写死一个值。 - S11jpeg_display_shell:以基线(249220f2)为底,把背光压制挪到画 logo 之前(jpeg_display 函数体内、先于 cmd_jpeg_display),值 20(只降不升:S22 已写更暗则不覆盖);删除画完后 写死 60 的那行;/dev/fb0 等待、mtd5 主题判定、后台 jpeg_display & 语义不变; 主题判定 `==` 改 `=`(POSIX test,语义不变,便于宿主验证)。 - S22brightness(新):S21mount_ubifs 之后运行,读 /usr/data/meow/settings.conf 的 display.brightness,按 display.brightness_min 与 sysfs max_brightness clamp 后写入; 读不到/解析失败不改背光(保持 S11 低值)、无 sleep/重试、任何运行期失败 exit 0;幂等。 - scripts/build/fw_content.conf:登记两条(S11 覆盖基线同名文件、S22 新增),md5 实算, 说明列写清 S11 < S21mount_ubifs < S22 的顺序依赖。 - scripts/build/README.md:补「覆盖基线已有文件」语义(无条件 cp -f,不校验基线 md5、 也不跳过已存在文件;唯一基线校验仍是 hiby_player)。 固件需整包刷机才生效,未刷机、未写设备。
This commit is contained in:
1 parent
316d9d42c7
commit
0ab23161b6
4 files changed
+221
No files matched your search
Executable
+89
@@ -0,0 +1,89 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# S11jpeg_display_shell — 开机 logo 显示(stock 基线 + MeowOS M21 改动)
|
||||
#
|
||||
# stock 基线(md5 249220f2489f63a4c946c55d8d981ca9)的问题:
|
||||
# 背光是 `cmd_jpeg_display` **画完 logo 之后**才写死的 60。也就是说画图那一刻用的是
|
||||
# **面板上电默认值**(很亮 —— 用户报「冷启动开机 logo 挺亮」),60 只是画完后的补救。
|
||||
# 本脚本又跑在 S21mount_ubifs 之前:那时 /usr/data 还没挂载,读不到
|
||||
# /usr/data/meow/settings.conf,所以这里**只能**写一个和用户设置无关的安全低值。
|
||||
#
|
||||
# M21 改动:
|
||||
# 1) 背光压制挪到画 logo **之前**,值 BOOT_BL_MAX=20(≈max_brightness 101 的 1/5);
|
||||
# 2) 删除画完后写死 60 的那行 —— 用户亮度改由 S22brightness(/usr/data 挂载后)就位;
|
||||
# 3) 压制动作「只降不升」:当前值已 ≤20(例如 S22 已按用户设置写成 1)则不再抬高,
|
||||
# 避免本脚本的 20 反过来把用户更暗的设置顶回去;
|
||||
# 4) /dev/fb0 等待、mtd5 主题判定、后台 `jpeg_display &` 语义与 stock 一致。
|
||||
#
|
||||
# 时序(三层写入者):
|
||||
# 面板上电默认(亮)→ S11 压到 ≤20(画 logo 前)→ S21mount_ubifs → S22brightness(用户值)
|
||||
# → S90/S70 拉起 launcher/watchdog 后按 display.brightness 继续维持。
|
||||
#
|
||||
# 注:rcS 用 `$i start` fork 执行本脚本,`jpeg_display &` 后父进程立即返回。所以压制写入必须
|
||||
# 在 jpeg_display() **函数体内**(子进程自己的时序),不能挪到 case 分支顶层 —— 那是父进程,
|
||||
# 会和子进程抢时序。
|
||||
|
||||
BL_BRIGHTNESS="/sys/class/backlight/backlight_pwm0/brightness"
|
||||
# 上电默认很亮的压制上限(绝对档位 0..max_brightness,不是百分比)。
|
||||
# 这是「安全低值」,不是用户值;用户值(display.brightness,可能更暗如 1)由 S22brightness 写入。
|
||||
BOOT_BL_MAX=20
|
||||
|
||||
# 只降不升地把背光压到 <= $1:读不到当前值就照写;当前已更低则不动。
|
||||
bl_cap()
|
||||
{
|
||||
cap="$1"
|
||||
cur=$(cat "$BL_BRIGHTNESS" 2>/dev/null)
|
||||
case "$cur" in
|
||||
''|*[!0-9]*) ;; # 读不到 / 非数字 → 照写压制值
|
||||
*) [ "$cur" -le "$cap" ] && return 0 ;; # 已经更暗(如 S22 已写用户值)→ 不动
|
||||
esac
|
||||
echo "$cap" > "$BL_BRIGHTNESS" 2>/dev/null
|
||||
return 0
|
||||
}
|
||||
|
||||
jpeg_display()
|
||||
{
|
||||
echo "Starting display... "
|
||||
|
||||
# M21:尽早压制面板上电默认的高亮(仍在函数体内、早于画图)
|
||||
bl_cap "$BOOT_BL_MAX"
|
||||
|
||||
while true
|
||||
do
|
||||
if [ -e "/dev/fb0" ]; then
|
||||
break
|
||||
fi
|
||||
sleep 0.02
|
||||
done
|
||||
|
||||
echo "Wait display... "
|
||||
|
||||
# M21:画 logo 前再压一次(只降不升)。若等待 fb0 期间有别的写入把亮度抬高,
|
||||
# logo 仍以低亮度出现;反之若 S22brightness 已写了更暗的用户值,这里不会覆盖它。
|
||||
bl_cap "$BOOT_BL_MAX"
|
||||
|
||||
theme=$(nanddump -q -s 0x20000 -l 7 /dev/mtd5 -a)
|
||||
# stock 写的是 `==`(BusyBox test 接受,dash/POSIX test 不接受);语义不变,改为 `=` 以便移植与宿主验证。
|
||||
if [ "$theme" = "theme:1" ]; then
|
||||
cmd_jpeg_display /etc/logo1.jpeg
|
||||
elif [ "$theme" = "theme:2" ]; then
|
||||
cmd_jpeg_display /etc/logo2.jpeg
|
||||
else
|
||||
cmd_jpeg_display /etc/logo.jpeg
|
||||
fi
|
||||
# stock: "R1 lg 35583 need 100ms delay" —— 原先是给「画完后写 60」留的面板 settle 时间。
|
||||
# 亮度写入已移到画图之前,但该硬件 settle 保留(在后台子进程里,不阻塞 init 链)。
|
||||
sleep 0.1
|
||||
echo "Finish display... "
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
jpeg_display &
|
||||
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
esac
|
||||
|
||||
exit 0
|
||||
Executable
+111
@@ -0,0 +1,111 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# S22brightness — 开机按用户设置恢复背光(MeowOS M21)
|
||||
#
|
||||
# 位置/顺序(/etc/init.d 按文件名自然序执行,见 /etc/init.d/rcS):
|
||||
# S11jpeg_display_shell 画开机 logo,画前把背光压到 <=20(防「面板上电默认很亮」)
|
||||
# → S21mount_ubifs 挂载 /usr/data
|
||||
# → S22brightness 本脚本:此时才读得到 /usr/data/meow/settings.conf
|
||||
# → S30dbus … → S70meow_sysui / S90meow_bootmenu launcher/watchdog 接管后继续维持用户亮度
|
||||
#
|
||||
# 为什么不能只改 S11:S11 早于 S21,/usr/data 未挂载 → settings.conf 不存在,只能写死一个安全低值。
|
||||
#
|
||||
# 行为:
|
||||
# - 读 display.brightness,以 display.brightness_min(下限,缺省 1)和
|
||||
# /sys/class/backlight/backlight_pwm0/max_brightness(上限,本机实测 101)clamp 后写入。
|
||||
# - 单位是 0..max_brightness 的**绝对档位**,不是百分比;display.brightness_min 同单位。
|
||||
# - 读不到文件 / 解析不出 display.brightness / max_brightness 读不到 → **不改背光**
|
||||
# (保持 S11 设的低值),打一行日志后 exit 0。
|
||||
# - 幂等(当前值已是目标值则不写)、无 sleep / 无重试,任何运行期失败都 exit 0(不阻断 init 链)。
|
||||
|
||||
BL_BRIGHTNESS="/sys/class/backlight/backlight_pwm0/brightness"
|
||||
BL_MAX="/sys/class/backlight/backlight_pwm0/max_brightness"
|
||||
MEOW_SETTINGS="/usr/data/meow/settings.conf"
|
||||
|
||||
log()
|
||||
{
|
||||
echo "S22brightness: $*"
|
||||
}
|
||||
|
||||
start()
|
||||
{
|
||||
# /usr/data 刚挂载时 settings.conf 可能尚不存在(新机/首次启动)或被正在写:
|
||||
# 只读一次,读不到就保持 S11 的低亮度,不 sleep 重试(不阻塞 init 链)。
|
||||
if [ ! -r "$MEOW_SETTINGS" ]; then
|
||||
log "settings.conf 不可读($MEOW_SETTINGS),保持 S11 低亮度"
|
||||
return 0
|
||||
fi
|
||||
|
||||
max=$(cat "$BL_MAX" 2>/dev/null)
|
||||
case "$max" in
|
||||
''|*[!0-9]*)
|
||||
log "max_brightness 读不到,不改背光(保持 S11 低亮度)"
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
if [ "$max" -le 0 ]; then
|
||||
log "max_brightness=$max 非法,不改背光"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 解析 settings.conf:<key> = <value>,容忍两侧空白/CR,忽略注释与非数字值。
|
||||
b=""
|
||||
mn=""
|
||||
while IFS='=' read -r k v; do
|
||||
k=$(printf '%s' "$k" | tr -d '[:space:]')
|
||||
v=$(printf '%s' "$v" | tr -d '[:space:]')
|
||||
case "$k" in
|
||||
display.brightness)
|
||||
case "$v" in
|
||||
''|*[!0-9]*) ;;
|
||||
*) b="$v" ;;
|
||||
esac
|
||||
;;
|
||||
display.brightness_min)
|
||||
case "$v" in
|
||||
''|*[!0-9]*) ;;
|
||||
*) mn="$v" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
done < "$MEOW_SETTINGS"
|
||||
|
||||
if [ -z "$b" ]; then
|
||||
log "settings.conf 无有效 display.brightness,保持 S11 低亮度"
|
||||
return 0
|
||||
fi
|
||||
|
||||
[ -n "$mn" ] || mn=1
|
||||
[ "$mn" -lt 1 ] && mn=1
|
||||
[ "$mn" -gt "$max" ] && mn="$max"
|
||||
|
||||
[ "$b" -lt "$mn" ] && b="$mn"
|
||||
[ "$b" -gt "$max" ] && b="$max"
|
||||
|
||||
cur=$(cat "$BL_BRIGHTNESS" 2>/dev/null)
|
||||
if [ "$cur" = "$b" ]; then
|
||||
log "背光已是 $b,跳过写入"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if echo "$b" > "$BL_BRIGHTNESS" 2>/dev/null; then
|
||||
log "开机背光 -> $b(min=$mn max=$max)"
|
||||
else
|
||||
log "写背光 $b 失败,保持原值"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop|restart|reload)
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
@@ -69,6 +69,20 @@ bash scripts/build/build_fw_apps.sh -v 0.7.68 -o r3proii_m2_73.upt -b fw_ssh/squ
|
||||
- 目标目录自动创建;`usr/bin` / `etc/init.d` / `etc/profile.d` 一律 `chmod 755`。
|
||||
- 多重配置并存:复制 `fw_content.conf` 改名,用 `-c` 指定,互不干扰。
|
||||
|
||||
### 覆盖基线已有文件(清单 `<dst>` 与基线同名)
|
||||
|
||||
清单条目对目标目录是**无条件 `cp -f` 覆盖**:不校验基线原文件的 md5、也不跳过「已存在」的文件,只要
|
||||
`<dst>` 命中就行。脚本里唯一的基线校验是第 2 步的 `usr/bin/hiby_player`(stock a73f2c49…),与清单条目无关。
|
||||
|
||||
因此覆盖类条目要自己在 `<desc>` 里写清「覆盖基线 xxx(基线 md5 …)」,便于复盘对照基线。例(M21 开机亮度链):
|
||||
|
||||
```
|
||||
patch_v2/bootmenu/S11jpeg_display_shell|/etc/init.d/S11jpeg_display_shell|<md5>|覆盖基线 S11(基线 md5 249220f2…)…
|
||||
patch_v2/bootmenu/S22brightness|/etc/init.d/S22brightness|<md5>|新增:…(S21mount_ubifs 之后按用户设置恢复背光)
|
||||
```
|
||||
|
||||
> 覆盖基线 init 脚本时,顺序仍由**文件名**决定(`rcS` 按 `/etc/init.d/S??*` 自然序执行),不能靠清单顺序。
|
||||
|
||||
### 常见:更新某个二进制后改 md5
|
||||
|
||||
```bash
|
||||
|
||||
@@ -46,6 +46,13 @@ patch_v2/meow_netmgrd/meow_netmgrd|/usr/bin/meow_netmgrd|20243ea1a800b29badefebb
|
||||
patch_v2/meow_netmgrd/meow_netmgrd|/usr/bin/meow_net|20243ea1a800b29badefebb395603aaf|meow_netmgrd 的 CLI 形态(同二进制双形态,argv[0]=meow_net 即 CLI:status/iface/wifi/bt/rfkill/apps/conns/top/dns/policy/help;M6.28 蓝牙P1 BT_CTL收口)
|
||||
|
||||
# ---- 开机 init 脚本(etc/init.d,数字决定启动顺序,按文件名自然序)----
|
||||
# M21 开机亮度链(顺序依赖:S11 < S21mount_ubifs < S22):
|
||||
# S11jpeg_display_shell 画 logo 前把背光压到 <=20(面板上电默认很亮;此时 /usr/data 未挂载,
|
||||
# 读不到 settings.conf,只能写安全低值)→ S21mount_ubifs 挂 /usr/data → S22brightness 按
|
||||
# display.brightness(clamp [brightness_min, max_brightness])写入用户值。
|
||||
# S11 是**覆盖基线同名文件**(基线已有,md5 249220f2…);S22 是**新增**文件。
|
||||
patch_v2/bootmenu/S11jpeg_display_shell|/etc/init.d/S11jpeg_display_shell|711664ad3a13557c0c1e018303637ab8|覆盖基线 S11(基线 md5 249220f2…):背光压制从「画完 logo 后写 60」改为「画 logo 前压到 <=20(只降不升)」,删掉写死 60;用户亮度交给 S22
|
||||
patch_v2/bootmenu/S22brightness|/etc/init.d/S22brightness|3ce7c3c24edd43ef56c3e084b94d0cf5|新增:S21mount_ubifs 之后按 /usr/data/meow/settings.conf 的 display.brightness 恢复背光(clamp [brightness_min, max_brightness];读不到不改、失败不阻断 init)
|
||||
patch_v2/meow_sysui/S70meow_sysui|/etc/init.d/S70meow_sysui|e435affcb56499e5229728c6ae2524b9|sysui 自启 M2.85(launcher.conf enabled=1+迁移)
|
||||
patch_v2/meow_svcd/S89meow_svcd|/etc/init.d/S89meow_svcd|a1ef9d658d37bb7ed012cc9326840ac4|svcd 自启 M6.2(+amsd.conf 热更 exec→/usr/bin 迁移)
|
||||
patch_v2/meow_amsd/meow_amsd|/usr/bin/meow_amsd|b698f176210b07f760f874ea2bb10a14|活动管理器 M6.46 编入 M7 杀后台修复(am kill 与后台页按钮同通道:MSG_AMS_KILL 先打后台保活表走 meow_bg_terminate,无前台会话也能杀;cmd_kill/cmd_start 失败原因细分 connect failed/timeout,no reply;响应串保留 launcher offline 供 MeowPanel 503 映射);继承 M6.35(注册表自愈+busy 识别+显示名 UTF-8 整序列 name[49];批① FG/BG 收编:handle_bg/handle_fg+AMS_FG/BG 状态供批③后台管理页)
|
||||
|
||||
Reference in new issue
Block a user