safesight/scripts/install_deps.sh
2026-02-26 23:03:48 +08:00

234 lines
7.4 KiB
Bash
Executable File
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
# RK3588S 简化依赖安装脚本
# 假设已克隆项目third_party/mpp 和 third_party/rknpu2 已存在
# 只需要额外下载 ffmpeg-rockchip
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
TEMP_DIR="/tmp/rk3588_deps_$(date +%s)"
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ RK3588S 简化依赖安装脚本 ║${NC}"
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
echo ""
if [ "$(id -u)" -ne 0 ]; then
echo -e "${RED}错误: 请使用 sudo 运行${NC}"
exit 1
fi
# 检查项目目录
echo -e "${YELLOW}[检查项目目录]${NC}"
if [ ! -d "$PROJECT_DIR/third_party/mpp" ]; then
echo -e "${RED}错误: third_party/mpp 不存在${NC}"
echo "请确保已克隆完整项目: git clone <项目地址>"
exit 1
fi
if [ ! -d "$PROJECT_DIR/third_party/rknpu2" ]; then
echo -e "${RED}错误: third_party/rknpu2 不存在${NC}"
exit 1
fi
echo -e "${GREEN}${NC} third_party/mpp 存在"
echo -e "${GREEN}${NC} third_party/rknpu2 存在"
echo ""
# 检查 ffmpeg-rockchip
echo -e "${YELLOW}[检查 FFmpeg]${NC}"
FFMPEG_SRC=""
if [ -d "$PROJECT_DIR/ffmpeg-rockchip" ]; then
echo -e "${GREEN}${NC} 发现 ffmpeg-rockchip 目录"
FFMPEG_SRC="$PROJECT_DIR/ffmpeg-rockchip"
elif [ -f "/tmp/ffmpeg-rockchip-master.zip" ]; then
echo -e "${GREEN}${NC} 发现本地文件: /tmp/ffmpeg-rockchip-master.zip"
mkdir -p "$TEMP_DIR"
cd "$TEMP_DIR"
unzip -q /tmp/ffmpeg-rockchip-master.zip
FFMPEG_SRC="$TEMP_DIR/ffmpeg-rockchip-master"
else
echo -e "${RED}${NC} 未找到 ffmpeg-rockchip"
echo "请下载并放到 /tmp/ffmpeg-rockchip-master.zip"
echo "下载地址: https://github.com/nyanmisaka/ffmpeg-rockchip/archive/refs/heads/master.zip"
exit 1
fi
echo ""
# ============================================
# 1. 基础工具
# ============================================
echo -e "${YELLOW}[1/4] 安装基础工具...${NC}"
apt-get update
apt-get install -y \
build-essential cmake git wget curl pkg-config \
libdrm-dev libx11-dev libxext-dev libgles2-mesa-dev \
libwayland-dev libpulse-dev libasound2-dev libv4l-dev \
python3 python3-pip python3-dev python3-venv \
htop vim net-tools v4l-utils unzip
echo -e "${GREEN}${NC} 基础工具安装完成"
# ============================================
# 2. MPP (项目自带)
# ============================================
echo -e "${YELLOW}[2/4] 安装 Rockchip MPP...${NC}"
cd "$PROJECT_DIR/third_party/mpp"
# 创建完整的 version.h 文件
mkdir -p build/cmake mpp
cat > mpp/version.h << 'EOF'
#ifndef MPP_VERSION_H
#define MPP_VERSION_H
#define MPP_VERSION "1.0.0"
#define MPP_GIT_VERSION "unknown"
#define MPP_GIT_BRANCH "master"
#define MPP_BUILD_TIME "unknown"
#define MPP_VER_HIST_CNT 10
#define MPP_VER_HIST_0 "unknown"
#define MPP_VER_HIST_1 "unknown"
#define MPP_VER_HIST_2 "unknown"
#define MPP_VER_HIST_3 "unknown"
#define MPP_VER_HIST_4 "unknown"
#define MPP_VER_HIST_5 "unknown"
#define MPP_VER_HIST_6 "unknown"
#define MPP_VER_HIST_7 "unknown"
#define MPP_VER_HIST_8 "unknown"
#define MPP_VER_HIST_9 "unknown"
#endif
EOF
# 编译安装
mkdir -p build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DHAVE_DRM=ON
make -j$(nproc)
make install
ldconfig
echo -e "${GREEN}${NC} MPP 安装完成"
# ============================================
# 3. RKNN Runtime
# ============================================
echo -e "${YELLOW}[3/4] 安装 RKNN Runtime...${NC}"
# 优先使用下载的 rknpu2-1.5.2.zip
if [ -f "/tmp/rknpu2-1.5.2.zip" ]; then
echo " 使用下载的 rknpu2-1.5.2.zip"
cd /tmp
unzip -q -o rknpu2-1.5.2.zip 2>/dev/null || unzip -q -o rknpu2-1.6.0_arm64.deb.zip 2>/dev/null || true
# 查找解压后的目录
RKNPU_DIR=$(find /tmp -maxdepth 1 -type d -name "rknpu*" | head -1)
if [ -n "$RKNPU_DIR" ] && [ -d "$RKNPU_DIR/runtime/RK3588/Linux/aarch64" ]; then
echo " 安装 RKNN 库..."
cp "$RKNPU_DIR/runtime/RK3588/Linux/aarch64/"*.so /usr/lib/ 2>/dev/null || true
cp -r "$RKNPU_DIR/runtime/RK3588/Linux/librknn_api/include/"* /usr/include/ 2>/dev/null || true
fi
else
# 使用项目自带的(仅头文件,库需要系统安装)
echo " 使用项目自带的 RKNPU2 头文件..."
if [ -d "$PROJECT_DIR/third_party/rknpu2/runtime/RK3588/Linux/librknn_api/include" ]; then
cp -r "$PROJECT_DIR/third_party/rknpu2/runtime/RK3588/Linux/librknn_api/include/"* /usr/include/ 2>/dev/null || true
fi
echo -e "${YELLOW}警告: 未找到预编译库,尝试安装系统版本...${NC}"
# 尝试安装系统版本作为后备
apt-get install -y librknn-runtime librknn-dev 2>/dev/null || true
fi
ldconfig
echo -e "${GREEN}${NC} RKNN Runtime 安装完成"
# ============================================
# 4. FFmpeg
# ============================================
echo -e "${YELLOW}[4/4] 安装 FFmpeg (带Rockchip支持)...${NC}"
# 卸载系统ffmpeg
if dpkg -l | grep -q "^ii ffmpeg "; then
apt-mark unhold ffmpeg 2>/dev/null || true
apt-get remove -y ffmpeg 2>/dev/null || true
fi
cd "$FFMPEG_SRC"
# 安装依赖
apt-get install -y \
libgnutls28-dev libaom-dev libdav1d-dev \
libmp3lame-dev libopus-dev libtheora-dev \
libvorbis-dev libvpx-dev libx264-dev libx265-dev libnuma-dev
# 配置编译
./configure \
--prefix=/usr/local \
--enable-gpl --enable-version3 \
--enable-libdrm --enable-rkmpp \
--enable-libx264 --enable-libx265 \
--enable-shared --disable-static \
--extra-libs=-lpthread --extra-libs=-lm 2>&1 | tail -20
make -j$(nproc)
make install
ldconfig
ln -sf /usr/local/bin/ffmpeg /usr/bin/ffmpeg-rk 2>/dev/null || true
echo -e "${GREEN}${NC} FFmpeg 安装完成"
# ============================================
# 5. 系统配置
# ============================================
echo -e "${YELLOW}[系统配置]${NC}"
cat > /etc/udev/rules.d/99-rockchip-npu.rules << 'EOF'
KERNEL=="rknpu*", MODE="0666", GROUP="video"
KERNEL=="mpp_service", MODE="0666", GROUP="video"
KERNEL=="rga*", MODE="0666", GROUP="video"
EOF
udevadm control --reload-rules
udevadm trigger
usermod -a -G video orangepi 2>/dev/null || true
usermod -a -G render orangepi 2>/dev/null || true
# 清理
rm -rf "$TEMP_DIR"
echo ""
echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ 依赖安装完成! ║${NC}"
echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo "验证:"
echo " ls /dev/rknpu*"
echo " pkg-config --modversion rockchip_mpp"
echo " ffmpeg -version | head -1"
echo ""
echo "下一步:"
echo " cd ~/apps/OrangePi3588Media/build"
echo " cmake .. && make -j\$(nproc)"