diff --git a/scripts/install_deps_simple.sh b/scripts/install_deps_simple.sh new file mode 100755 index 0000000..c86e772 --- /dev/null +++ b/scripts/install_deps_simple.sh @@ -0,0 +1,214 @@ +#!/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 文件 +mkdir -p build/cmake mpp +if [ ! -f "build/cmake/version.in" ]; then + cat > build/cmake/version.in << '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" +#endif +EOF +fi +if [ ! -f "mpp/version.h" ]; then + cp build/cmake/version.in mpp/version.h +fi + +# 编译安装 +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}" + +cd "$PROJECT_DIR/third_party/rknpu2" + +# 查找 runtime 目录 +if [ -d "runtime/RK3588/Linux/aarch64" ]; then + echo " 安装 RKNN 库..." + cp runtime/RK3588/Linux/aarch64/*.so /usr/lib/ 2>/dev/null || true + cp runtime/RK3588/Linux/aarch64/librknn* /usr/lib/ 2>/dev/null || true + + if [ -d "runtime/RK3588/Linux/aarch64/include" ]; then + cp -r runtime/RK3588/Linux/aarch64/include/* /usr/include/ 2>/dev/null || true + fi +else + echo -e "${YELLOW}警告: 未找到标准 runtime 目录结构,尝试其他路径...${NC}" + find . -name "*.so" -type f -exec cp {} /usr/lib/ \; 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)"