111 lines
4.8 KiB
Bash
111 lines
4.8 KiB
Bash
#!/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 "========================================================="
|