OrangePi3588Media/scripts/install_deps_simple.sh
2026-02-26 22:54:10 +08:00

215 lines
6.6 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 文件
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)"