Files
vision-anti-pinch/camera_reset.sh
T

111 lines
4.8 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# camera_reset.sh - 修复 GMSL2 相机"第二次运行全绿"问题
#
# 问题原因:
# quick_bring_up_64g.sh 第二次运行时,仅重新设置 sensor_mode/trig_pin,
# 但 sgx_yuv_gmsl2 链路状态未重新初始化,导致相机输出全绿。
#
# 模块依赖关系 (modinfo 确认):
# sgx-yuv-gmsl2.ko depends: max9296, max9295
# 必须按顺序加载: max9295.ko -> max9296.ko -> sgx-yuv-gmsl2.ko
# 否则 insmod sgx-yuv-gmsl2.ko 报 "Unknown symbol in module"
#
# 本脚本: 依赖模块仅在未加载时 insmod (不重载, 避免链路抖动),
# sgx_yuv_gmsl2 先 rmmod 再 insmod 完成链路复位。
# 全绿图像多由 gmsl_mode 错误引起 (本工程固定 2,2,2,2);
# 若复位后仍异常, 请重启 Orin 后运行 quick_bring_up_64g.sh。
#
# 使用方法:
# sudo ./camera_reset.sh [camera_type] [port]
#
# camera_type: 0-17 对应 quick_bring_up_64g.sh 中的相机类型 (默认 8)
# port: 0-7 对应 video 设备号 (默认 5)
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
KO_DIR="/home/orin/SG8A_ORIN_GMSL2-F_V2_AGX_Orin_YUV_JP5.1.2_L4TR35.4.1/ko"
VIDEO_PORT="${2:-5}"
CAMERA_TYPE="${1:-5}" # 默认 camera_type=5 (SG3S-ISX031C-GMSL2F)
echo "========================================================="
echo "Camera Reset Script"
echo "========================================================="
echo "Camera type: $CAMERA_TYPE"
echo "Video port: $VIDEO_PORT (/dev/video${VIDEO_PORT})"
echo ""
# Step 1: 停止占用 video 设备的进程
echo "[1/4] Stopping processes using video devices..."
pkill -9 gst-launch-1.0 2>/dev/null || true
pkill -9 vision-anti-pinch 2>/dev/null || true
sleep 1
# Step 2: 加载依赖模块 max9295/max9296 (未加载时), 再重载 sgx_yuv_gmsl2
echo "[2/4] Loading modules (max9295 -> max9296 -> sgx_yuv_gmsl2)..."
if ! lsmod | grep -q '^max9295'; then
sudo insmod "$KO_DIR/max9295.ko" || { echo "ERROR: insmod max9295 failed"; exit 1; }
echo " loaded max9295.ko"
else
echo " max9295 already loaded (skip)"
fi
if ! lsmod | grep -q '^max9296'; then
sudo insmod "$KO_DIR/max9296.ko" || { echo "ERROR: insmod max9296 failed"; exit 1; }
echo " loaded max9296.ko"
else
echo " max9296 already loaded (skip)"
fi
if lsmod | grep -q '^sgx_yuv_gmsl2'; then
sudo rmmod sgx_yuv_gmsl2
sleep 1
fi
sudo insmod "$KO_DIR/sgx-yuv-gmsl2.ko" gmsl_mode=2,2,2,2 || { echo "ERROR: insmod sgx-yuv-gmsl2 failed"; exit 1; }
echo " loaded sgx-yuv-gmsl2.ko (gmsl_mode=2,2,2,2)"
sleep 2
# Step 3: 验证设备节点
echo "[3/4] Verifying device nodes..."
if [ ! -c "/dev/video${VIDEO_PORT}" ]; then
echo "Error: /dev/video${VIDEO_PORT} not found!"
echo "Please reboot the system and run quick_bring_up_64g.sh again."
exit 1
fi
echo " /dev/video${VIDEO_PORT} exists"
# Step 4: 根据 camera_type 配置 sensor_mode 和 trig_pin
echo "[4/4] Configuring sensor..."
case "$CAMERA_TYPE" in
0) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=0,trig_pin=0xffff0007 ;;
1) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=0,trig_pin=0xffff0007 ;;
2) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=0,trig_pin=0xffff0007 ;;
3) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=1,trig_pin=0xffff0007 ;;
4) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=0,trig_pin=0xffff0007 ;;
5) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=1,trig_pin=0xffff0007 ;;
6) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=1,trig_pin=0xffff0007 ;;
7) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=2,trig_pin=0xffff0008,trig_mode=1 ;;
8) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=3,trig_pin=0xffff0007 ;;
9) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=3,trig_pin=0xffff0008 ;;
10) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=3,trig_pin=0xffff0007 ;;
11) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=3,trig_pin=0xffff0008 ;;
12) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=5,trig_pin=0xffff0007,trig_mode=3 ;;
13) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=4,trig_pin=0xffff0007,trig_mode=3 ;;
14) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=6,trig_pin=0xffff0007 ;;
15) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=8 ;;
16) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=9 ;;
17) v4l2-ctl -d /dev/video${VIDEO_PORT} -c sensor_mode=0 ;;
*) echo "Unknown camera_type: $CAMERA_TYPE"; exit 1 ;;
esac
sleep 1
echo ""
echo "========================================================="
echo "Camera reset complete!"
echo ""
echo "Now run: ./vision-anti-pinch -d /dev/video5 -W 1920 -H 1536 -n 100 -s 5 -t jpg"
echo ""
echo "⚠️ If image is still all-green, the GMSL2 link is damaged."
echo " Please REBOOT the Orin system to recover:"
echo " sudo reboot"
echo " (then run quick_bring_up_64g.sh after reboot)"
echo "========================================================="