计划
#!/bin/sh
HUB_GPIO=0
PHY_MODE=/sys/devices/platform/ff3e0000.usb2-phy/otg_mode
DWC3_MODE=/sys/kernel/debug/usb/ffb00000.usb/mode
mount_debugfs() {
mountpoint -q /sys/kernel/debug 2>/dev/null && return 0
mount -t debugfs none /sys/kernel/debug 2>/dev/null
}
set_host() {
echo "设置 USB Host 模式..."
mount_debugfs
# 导出 Hub GPIO
[ ! -d /sys/class/gpio/gpio${HUB_GPIO} ] && echo "$HUB_GPIO" > /sys/class/gpio/export 2>/dev/null
echo out > /sys/class/gpio/gpio${HUB_GPIO}/direction 2>/dev/null
# 断开 Hub 防止切换期间毛刺
echo 0 > /sys/class/gpio/gpio${HUB_GPIO}/value 2>/dev/null
sleep 1
# PHY → host
[ -e "$PHY_MODE" ] && echo host > "$PHY_MODE" 2>/dev/null
# DWC3 控制器 → host
[ -e "$DWC3_MODE" ] && echo host > "$DWC3_MODE" 2>/dev/null
# 轮询等待 xHCI 控制器就绪(替代 sleep 3)
for i in 1 2 3 4 5 6 7 8 9 10; do
[ -d /sys/bus/usb/devices/usb1 ] && break
sleep 1
done
# 接通 Camera Hub,USB 设备开始枚举
echo 1 > /sys/class/gpio/gpio${HUB_GPIO}/value 2>/dev/null
echo "Hub 已接通,USB 枚举开始"
}
case "$1" in
start) set_host ;;
stop) ;;
restart|reload) set_host ;;
*) echo "Usage: $0 {start|stop|restart}"
exit 1 ;;
esac
exit 0
- 精简 S98lvgld(删除冗余 USB 切换代码,保留 UVC 等待)
#!/bin/sh
APP="/usr/lvgl_demo"
APP_NAME="lvgl_demo"
start() {
chmod 755 "$APP" 2>/dev/null
# 导出 GPIO(应用启动前一次性导出,后续直接操作 /sys/class/gpio/gpioN/value)
for gpio in 2 4 40 97; do
[ -d "/sys/class/gpio/gpio$gpio" ] || echo "$gpio" > /sys/class/gpio/export 2>/dev/null
done
# 修复被展平的软链接(构建系统产物)
for lib in librockchip_mpp.so.1 librockit_full.so librockit.so; do
[ -f "/usr/$lib" ] && [ ! -L "/usr/$lib" ] && rm -f "/usr/$lib"
done
# oem 分区库优先
LD_LIBRARY_PATH="/oem/usr/lib:${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH
# 触发一次 DRM lastclose,将 fbdev 模式提交到硬件 CRTC
: < /dev/dri/card0 2>/dev/null
echo "Starting ${APP_NAME}..."
cd /usr
"$APP" &
}
stop() {
PID=$(pidof "$APP_NAME" 2>/dev/null)
if [ -n "$PID" ]; then
echo "Stopping ${APP_NAME} (pid $PID)..."
kill $PID 2>/dev/null
sleep 1
REMAINING=$(pidof "$APP_NAME" 2>/dev/null)
[ -n "$REMAINING" ] && kill -9 $REMAINING 2>/dev/null || true
fi
echo "${APP_NAME} stopped"
}
status() {
PID=$(pidof "$APP_NAME" 2>/dev/null)
if [ -n "$PID" ]; then
echo "${APP_NAME} is running (pid $PID)"
return 0
fi
echo "${APP_NAME} is not running"
return 1
}
case "$1" in
start) start ;;
stop) stop ;;
restart) stop; sleep 1; start ;;
status) status ;;
*) echo "Usage: $0 {start|stop|restart|status}"; exit 1 ;;
esac