215 lines
6.6 KiB
Bash
Executable File
215 lines
6.6 KiB
Bash
Executable File
#!/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)"
|