简化依赖安装脚本

This commit is contained in:
haotian 2026-02-26 22:54:10 +08:00
parent a454bd301b
commit b2718652ed

214
scripts/install_deps_simple.sh Executable file
View File

@ -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)"