初始化奇妙小屏幕控制器项目

This commit is contained in:
2026-09-08 22:56:52 +08:00
commit 8d368de3b5
491 changed files with 67678 additions and 0 deletions
@@ -0,0 +1,104 @@
#!/bin/sh
set -eu
OUTPUT=
while [ "$#" -gt 0 ]; do
case "$1" in
--output) OUTPUT=$2; shift 2 ;;
*) echo "unknown argument: $1" >&2; exit 2 ;;
esac
done
if [ "$(id -u)" -ne 0 ]; then
echo "state capture must run as root" >&2
exit 1
fi
if [ -z "$OUTPUT" ]; then
echo "usage: capture_axp313a_state.sh --output NEW_DIR" >&2
exit 2
fi
parent=$(dirname -- "$OUTPUT")
mkdir -p -- "$parent"
parent=$(CDPATH= cd -- "$parent" && pwd)
OUTPUT=$parent/$(basename -- "$OUTPUT")
case "$OUTPUT" in
/|/boot|/opt|/var|/var/lib|/var/lib/matrix-screen-controller|/run|/etc)
echo "unsafe state output directory: $OUTPUT" >&2
exit 1
;;
esac
if [ -e "$OUTPUT" ]; then
echo "state output directory must not exist: $OUTPUT" >&2
exit 1
fi
install -d -m 0700 -- "$OUTPUT"
uname -a > "$OUTPUT/uname.txt"
cat /proc/cmdline > "$OUTPUT/cmdline.txt"
(cd /boot && find . -maxdepth 1 -type f -print0 | sort -z | xargs -0 sha256sum) \
> "$OUTPUT/boot.sha256"
(cd /var/lib && find matrix-screen-controller -type f -print0 | sort -z | xargs -0 sha256sum) \
> "$OUTPUT/persistent.sha256"
if [ -d /sys/kernel/debug/regmap ]; then
for registers in /sys/kernel/debug/regmap/*-0036/registers; do
[ -f "$registers" ] || continue
regmap_name=$(basename -- "$(dirname -- "$registers")")
cp -- "$registers" "$OUTPUT/pmic-$regmap_name-registers.txt"
done
fi
: > "$OUTPUT/regulators.txt"
for regulator in /sys/class/regulator/regulator.*; do
[ -d "$regulator" ] || continue
printf '[%s]\n' "$(basename -- "$regulator")" >> "$OUTPUT/regulators.txt"
for field in name microvolts state status; do
if [ -r "$regulator/$field" ]; then
if value=$(cat "$regulator/$field" 2>/dev/null); then
printf '%s=%s\n' "$field" "$value" >> "$OUTPUT/regulators.txt"
else
printf '%s=<unavailable>\n' "$field" >> "$OUTPUT/regulators.txt"
fi
fi
done
done
: > "$OUTPUT/cpufreq.txt"
for policy in /sys/devices/system/cpu/cpufreq/policy*; do
[ -d "$policy" ] || continue
printf '[%s]\n' "$(basename -- "$policy")" >> "$OUTPUT/cpufreq.txt"
for field in affected_cpus related_cpus scaling_available_frequencies \
scaling_available_governors scaling_cur_freq scaling_governor; do
if [ -r "$policy/$field" ]; then
if value=$(cat "$policy/$field" 2>/dev/null); then
printf '%s=%s\n' "$field" "$value" >> "$OUTPUT/cpufreq.txt"
else
printf '%s=<unavailable>\n' "$field" >> "$OUTPUT/cpufreq.txt"
fi
fi
done
done
if [ -r /sys/kernel/debug/devices_deferred ]; then
cp -- /sys/kernel/debug/devices_deferred "$OUTPUT/devices_deferred.txt"
fi
: > "$OUTPUT/gpu.txt"
for devfreq in /sys/class/devfreq/*; do
[ -d "$devfreq" ] || continue
case "$(basename -- "$devfreq")" in
*gpu*|*mali*)
printf '[%s]\n' "$(basename -- "$devfreq")" >> "$OUTPUT/gpu.txt"
for field in available_frequencies cur_freq governor min_freq max_freq; do
if [ -r "$devfreq/$field" ]; then
if value=$(cat "$devfreq/$field" 2>/dev/null); then
printf '%s=%s\n' "$field" "$value" >> "$OUTPUT/gpu.txt"
else
printf '%s=<unavailable>\n' "$field" >> "$OUTPUT/gpu.txt"
fi
fi
done
;;
esac
done
sync
echo "state captured at $OUTPUT"