Files
vision-anti-pinch/build_and_run.sh
T

102 lines
2.4 KiB
Bash

#!/bin/bash
# build_and_run.sh - 在 Orin 上构建并运行 V4L2 取图 demo
#
# 使用方法:
# ./build_and_run.sh [选项]
#
# 选项:
# --deploy 将源码复制到 Orin 并构建
# --run 在 Orin 上运行已构建的程序
# --both 部署并运行 (默认)
#
# 示例:
# ./build_and_run.sh --both
# ./build_and_run.sh --deploy
# ./build_and_run.sh --run --args "-n 100 -v"
set -e
# 配置
ORIN_HOST="192.168.195.100"
ORIN_USER="orin"
ORIN_PASS="${ORIN_PASS:?Set ORIN_PASS locally, or use scripts/deploy.sh for interactive SSH}"
export SSHPASS="$ORIN_PASS"
LOCAL_DIR="$(cd "$(dirname "$0")" && pwd)"
BUILD_DIR="$LOCAL_DIR/build"
BIN_NAME="vision-anti-pinch"
# 默认参数
ACTION="both"
RUN_ARGS="-n 100"
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
--deploy) ACTION="deploy"; shift ;;
--run) ACTION="run"; shift ;;
--both) ACTION="both"; shift ;;
--args)
RUN_ARGS="$2"
shift 2
;;
*)
echo "Unknown option: $1"
exit 1
;;
esac
done
# 部署函数
do_deploy() {
echo "=== 部署源码到 Orin ==="
# 创建临时目录用于传输
TEMP_DIR=$(mktemp -d)
cp -r "$LOCAL_DIR"/* "$TEMP_DIR/"
# 使用 sshpass 复制 (如果没有 sshpass, 手动复制)
if command -v sshpass &> /dev/null; then
echo "复制源码到 Orin..."
sshpass -e scp -o StrictHostKeyChecking=no -r "$TEMP_DIR"/* "${ORIN_USER}@${ORIN_HOST}:~/vision-anti-pinch/"
else
echo "警告: 未安装 sshpass, 请手动复制源码到 Orin:"
echo " scp -r $LOCAL_DIR/* ${ORIN_USER}@${ORIN_HOST}:~/vision-anti-pinch/"
return 1
fi
rm -rf "$TEMP_DIR"
echo "=== 在 Orin 上构建 ==="
sshpass -e ssh -o StrictHostKeyChecking=no "${ORIN_USER}@${ORIN_HOST}" << 'EOF'
cd ~/vision-anti-pinch
make clean
make -j$(nproc)
echo "构建完成"
EOF
echo "部署完成"
}
# 运行函数
do_run() {
echo "=== 在 Orin 上运行 ==="
sshpass -e ssh -o StrictHostKeyChecking=no "${ORIN_USER}@${ORIN_HOST}" << EOF
cd ~/vision-anti-pinch
./${BIN_NAME} ${RUN_ARGS}
EOF
}
# 主流程
echo "V4L2 Capture Demo - Build & Run"
echo "================================"
if [[ "$ACTION" == "deploy" ]] || [[ "$ACTION" == "both" ]]; then
do_deploy
fi
if [[ "$ACTION" == "run" ]] || [[ "$ACTION" == "both" ]]; then
do_run
fi
echo "完成"