diff --git a/docs/dependencies.md b/docs/dependencies.md new file mode 100644 index 0000000..ac46b7f --- /dev/null +++ b/docs/dependencies.md @@ -0,0 +1,218 @@ +# RK3588S 依赖安装指南 + +## 系统要求 + +- **硬件**: Orange Pi 5 / 5 Plus 或其他 RK3588/RK3588S 设备 +- **系统**: Ubuntu 22.04 LTS 或 Debian 11 (ARM64) +- **内核**: 5.10.x (带 Rockchip 驱动) + +## 快速安装 + +使用一键安装脚本: + +```bash +# 1. 克隆或复制项目到新设备 +cd ~/apps/OrangePi3588Media + +# 2. 运行依赖安装脚本 +sudo ./scripts/install_deps.sh +``` + +## 手动安装步骤 + +如果脚本安装失败,可按以下步骤手动安装: + +### 1. 基础工具 + +```bash +sudo apt-get update + +sudo 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 \ + htop vim net-tools ffmpeg v4l-utils +``` + +### 2. Rockchip MPP (硬件编解码) + +```bash +cd /tmp +git clone https://github.com/rockchip-linux/mpp.git +cd mpp +mkdir build && cd build +cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DHAVE_DRM=ON +make -j$(nproc) +sudo make install +sudo ldconfig +``` + +**验证**: +```bash +pkg-config --modversion rockchip_mpp +``` + +### 3. Rockchip RGA (2D图形加速) + +```bash +cd /tmp +git clone https://github.com/rockchip-linux/rkrga.git +cd rkrga +mkdir build && cd build +cmake .. -DCMAKE_INSTALL_PREFIX=/usr +make -j$(nproc) +sudo make install +sudo ldconfig +``` + +### 4. RKNN Runtime (NPU推理) + +```bash +# 方法1: 使用项目内置版本(推荐) +# 项目已包含 third_party/rknpu2 + +# 方法2: 手动下载安装 +cd /tmp +wget https://github.com/rockchip-linux/rknpu2/releases/download/v1.6.0/rknpu2_1.6.0_arm64.deb +sudo dpkg -i rknpu2_1.6.0_arm64.deb + +# Python包 +pip3 install rknn-toolkit2-lite2 +``` + +**验证**: +```bash +ls /dev/rknpu* +cat /proc/rknpu/version +``` + +### 5. FFmpeg (带Rockchip支持) + +```bash +cd /tmp +git clone https://github.com/nyanmisaka/ffmpeg-rockchip.git +cd ffmpeg-rockchip + +# 安装依赖 +sudo 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-rkrga \ + --enable-libx264 --enable-libx265 \ + --enable-shared --disable-static + +make -j$(nproc) +sudo make install +sudo ldconfig +``` + +**验证**: +```bash +ffmpeg -version +ffmpeg -encoders | grep rkmpp +``` + +### 6. 系统配置 + +```bash +# NPU设备权限 +sudo tee /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 + +sudo udevadm control --reload-rules +sudo udevadm trigger + +# 添加用户到video组 +sudo usermod -a -G video $USER +``` + +## 依赖检查清单 + +安装完成后,运行以下检查: + +```bash +# 1. NPU设备 +ls -la /dev/rknpu* # 应该显示 /dev/rknpu, /dev/rknpu0 等 + +# 2. MPP库 +pkg-config --modversion rockchip_mpp + +# 3. RKNN库 +ls /usr/lib/librknnrt.so || ls /usr/lib/aarch64-linux-gnu/librknnrt.so + +# 4. FFmpeg +ffmpeg -version | head -1 + +# 5. 内核模块 +lsmod | grep rknpu +lsmod | grep mpp +``` + +## 常见问题 + +### Q: NPU设备不存在 +```bash +# 检查内核模块 +lsmod | grep rknpu + +# 如果没有,尝试手动加载 +sudo modprobe rknpu + +# 或者检查dts是否启用了NPU +dmesg | grep -i rknpu +``` + +### Q: MPP编译失败 +```bash +# 确保安装了libdrm-dev +sudo apt-get install -y libdrm-dev + +# 或者禁用DRM支持 +cmake .. -DHAVE_DRM=OFF +``` + +### Q: FFmpeg找不到rkmpp +```bash +# 确保MPP已正确安装并更新pkg-config +pkg-config --cflags rockchip_mpp + +# 如果失败,手动指定路径 +./configure --extra-cflags="-I/usr/include" --extra-ldflags="-L/usr/lib" +``` + +### Q: RKNN模型加载失败 +```bash +# 检查驱动版本 +cat /proc/rknpu/version + +# 确保模型版本与驱动匹配 +# RKNN-Toolkit2 1.6+ 需要驱动 0.9.6+ +``` + +## 版本兼容性 + +| 组件 | 推荐版本 | 说明 | +|-----|---------|------| +| MPP | git master | 硬件编解码 | +| RGA | git master | 2D加速 | +| RKNN Runtime | 1.6.0+ | NPU推理 | +| FFmpeg | 6.0+ (rockchip) | 带rkmpp/rkrga支持 | +| CMake | 3.16+ | 编译工具 | +| GCC | 9.0+ | 编译器 | + +## 下一步 + +依赖安装完成后,继续: + +1. **编译项目**: [编译指南](../Readme.md#编译) +2. **部署服务**: [部署指南](./deployment.md) diff --git a/scripts/install_deps.sh b/scripts/install_deps.sh new file mode 100755 index 0000000..ba0ff9e --- /dev/null +++ b/scripts/install_deps.sh @@ -0,0 +1,437 @@ +#!/bin/bash +# RK3588S 依赖安装脚本 +# 在全新安装的RK3588S上运行,安装所有必要的支撑软件 +# +# 用法: sudo ./install_deps.sh + +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)" +mkdir -p "$TEMP_DIR" + +echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}" +echo -e "${BLUE}║ RK3588S 依赖安装脚本 ║${NC}" +echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}" +echo "" + +# 检查root权限 +if [ "$(id -u)" -ne 0 ]; then + echo -e "${RED}错误: 请使用 sudo 运行此脚本${NC}" + exit 1 +fi + +# 检测系统版本 +echo -e "${YELLOW}[系统信息]${NC}" +echo " 内核: $(uname -r)" +echo " 架构: $(uname -m)" +echo " 系统: $(lsb_release -d 2>/dev/null | cut -f2 || cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2 | tr -d '\"')" +echo "" + +# ============================================ +# 1. 安装基础工具 +# ============================================ +install_basic_tools() { + echo -e "${YELLOW}[1/6] 安装基础工具...${NC}" + + apt-get update + + # 编译工具 + apt-get install -y \ + build-essential \ + cmake \ + git \ + wget \ + curl \ + pkg-config + + # 开发库 + apt-get install -y \ + libdrm-dev \ + libx11-dev \ + libxext-dev \ + libgles2-mesa-dev \ + libwayland-dev \ + libpulse-dev \ + libasound2-dev \ + libv4l-dev + + # Python和工具 + apt-get install -y \ + python3 \ + python3-pip \ + python3-dev \ + python3-venv + + # 其他工具 + apt-get install -y \ + htop \ + vim \ + net-tools \ + ffmpeg \ + v4l-utils + + echo -e "${GREEN}✓${NC} 基础工具安装完成" +} + +# ============================================ +# 2. 安装Rockchip MPP +# ============================================ +install_mpp() { + echo -e "${YELLOW}[2/6] 安装 Rockchip MPP...${NC}" + + cd "$TEMP_DIR" + + # 克隆MPP + if [ ! -d "mpp" ]; then + git clone https://github.com/rockchip-linux/mpp.git + fi + + cd mpp + + # 创建build目录 + 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. 安装Rockchip RGA +# ============================================ +install_rga() { + echo -e "${YELLOW}[3/6] 安装 Rockchip RGA...${NC}" + + cd "$TEMP_DIR" + + # 克隆RGA + if [ ! -d "rkrga" ]; then + git clone https://github.com/rockchip-linux/rkrga.git + fi + + cd rkrga + + # 编译 + mkdir -p build + cd build + + cmake .. \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release + + make -j$(nproc) + make install + + ldconfig + + echo -e "${GREEN}✓${NC} RGA 安装完成" +} + +# ============================================ +# 4. 安装RKNN Runtime +# ============================================ +install_rknn() { + echo -e "${YELLOW}[4/6] 安装 RKNN Runtime...${NC}" + + cd "$TEMP_DIR" + + # 检查项目目录中是否有RKNN包 + RKNN_PACKAGE="" + if [ -d "$PROJECT_DIR/third_party/rknpu2" ]; then + echo " 使用项目自带的 RKNN Runtime" + else + # 下载RKNN Runtime + echo " 下载 RKNN Runtime..." + RKNN_VERSION="1.6.0" + RKNN_DEB="rknpu2_${RKNN_VERSION}_arm64.deb" + + if [ ! -f "$RKNN_DEB" ]; then + wget "https://github.com/rockchip-linux/rknpu2/releases/download/v${RKNN_VERSION}/${RKNN_DEB}" \ + -O "$RKNN_DEB" 2>/dev/null || { + echo -e "${YELLOW}警告: 无法下载RKNN包,请手动安装${NC}" + return 0 + } + fi + + dpkg -i "$RKNN_DEB" || apt-get install -f -y + fi + + # 安装python包 + pip3 install rknn-toolkit2-lite2 --break-system-packages 2>/dev/null || \ + pip3 install rknn-toolkit2-lite2 --user 2>/dev/null || { + echo -e "${YELLOW}警告: RKNN Python包安装失败${NC}" + } + + ldconfig + + echo -e "${GREEN}✓${NC} RKNN Runtime 安装完成" +} + +# ============================================ +# 5. 安装FFmpeg (带Rockchip支持) +# ============================================ +install_ffmpeg_rk() { + echo -e "${YELLOW}[5/6] 安装 FFmpeg (带Rockchip支持)...${NC}" + + cd "$TEMP_DIR" + + # 检查是否已有ffmpeg-rockchip + if [ -d "$PROJECT_DIR/ffmpeg-rockchip" ]; then + echo " 使用项目自带的 ffmpeg-rockchip" + cd "$PROJECT_DIR/ffmpeg-rockchip" + else + # 克隆ffmpeg-rockchip + echo " 下载 ffmpeg-rockchip..." + git clone https://github.com/nyanmisaka/ffmpeg-rockchip.git + cd ffmpeg-rockchip + fi + + # 安装依赖 + 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-rkrga \ + --enable-libx264 \ + --enable-libx265 \ + --enable-libvpx \ + --enable-libopus \ + --enable-libvorbis \ + --enable-libmp3lame \ + --enable-libtheora \ + --enable-libaom \ + --enable-libdav1d \ + --enable-shared \ + --disable-static \ + --extra-libs=-lpthread \ + --extra-libs=-lm + + # 编译安装 + make -j$(nproc) + make install + + # 更新动态链接库 + ldconfig + + # 创建软链接 + ln -sf /usr/local/bin/ffmpeg /usr/bin/ffmpeg-rk + + echo -e "${GREEN}✓${NC} FFmpeg 安装完成" + echo " 版本: $(ffmpeg -version | head -1)" +} + +# ============================================ +# 6. 配置系统环境 +# ============================================ +configure_system() { + echo -e "${YELLOW}[6/6] 配置系统环境...${NC}" + + # 创建udev规则(NPU设备权限) + cat > /etc/udev/rules.d/99-rockchip-npu.rules << 'EOF' +# RK3588 NPU +KERNEL=="rknpu", MODE="0666", GROUP="video" +KERNEL=="rknpu0", MODE="0666", GROUP="video" +KERNEL=="rknpu1", MODE="0666", GROUP="video" +KERNEL=="rknpu2", MODE="0666", GROUP="video" + +# MPP +KERNEL=="mpp_service", MODE="0666", GROUP="video" + +# RGA +KERNEL=="rga", MODE="0666", GROUP="video" +KERNEL=="rga3", MODE="0666", GROUP="video" +EOF + + # 重新加载udev规则 + udevadm control --reload-rules + udevadm trigger + + # 添加用户到video组 + usermod -a -G video orangepi 2>/dev/null || true + usermod -a -G render orangepi 2>/dev/null || true + + # 创建日志目录 + mkdir -p /var/log/rk3588 + chown -R orangepi:orangepi /var/log/rk3588 2>/dev/null || true + + # 配置内核参数(性能优化) + cat >> /etc/sysctl.conf << 'EOF' +# RK3588 性能优化 +vm.swappiness=10 +vm.dirty_ratio=40 +vm.dirty_background_ratio=10 +net.core.rmem_max=134217728 +net.core.wmem_max=134217728 +EOF + + sysctl -p + + echo -e "${GREEN}✓${NC} 系统环境配置完成" +} + +# ============================================ +# 验证安装 +# ============================================ +verify_installation() { + echo "" + echo -e "${BLUE}[安装验证]${NC}" + + local ERRORS=0 + + # 检查NPU设备 + if [ -e /dev/rknpu ]; then + echo -e "${GREEN}✓${NC} NPU设备: $(ls /dev/rknpu* 2>/dev/null | wc -l) 个" + else + echo -e "${RED}✗${NC} NPU设备未找到" + ERRORS=$((ERRORS+1)) + fi + + # 检查MPP + if pkg-config --exists rockchip_mpp; then + echo -e "${GREEN}✓${NC} MPP: $(pkg-config --modversion rockchip_mpp)" + else + echo -e "${RED}✗${NC} MPP未安装" + ERRORS=$((ERRORS+1)) + fi + + # 检查RGA + if [ -f /usr/include/rga/RgaApi.h ]; then + echo -e "${GREEN}✓${NC} RGA头文件" + else + echo -e "${YELLOW}⚠${NC} RGA头文件可能未正确安装" + fi + + # 检查RKNN + if [ -f /usr/lib/librknnrt.so ] || [ -f /usr/lib/aarch64-linux-gnu/librknnrt.so ]; then + echo -e "${GREEN}✓${NC} RKNN Runtime" + else + echo -e "${YELLOW}⚠${NC} RKNN Runtime可能使用项目内置版本" + fi + + # 检查FFmpeg + if command -v ffmpeg &> /dev/null; then + echo -e "${GREEN}✓${NC} FFmpeg: $(ffmpeg -version | head -1 | awk '{print $3}')" + else + echo -e "${RED}✗${NC} FFmpeg未安装" + ERRORS=$((ERRORS+1)) + fi + + # 检查cmake + if command -v cmake &> /dev/null; then + echo -e "${GREEN}✓${NC} CMake: $(cmake --version | head -1)" + else + echo -e "${RED}✗${NC} CMake未安装" + ERRORS=$((ERRORS+1)) + fi + + echo "" + if [ $ERRORS -eq 0 ]; then + echo -e "${GREEN}所有依赖安装成功!${NC}" + return 0 + else + echo -e "${YELLOW}有 $ERRORS 项验证失败,请检查安装日志${NC}" + return 1 + fi +} + +# ============================================ +# 清理 +# ============================================ +cleanup() { + echo "" + echo -e "${YELLOW}[清理]${NC}" + read -p "是否删除临时文件 ($TEMP_DIR)? (y/N): " -r + if [ "$REPLY" = "y" ] || [ "$REPLY" = "Y" ]; then + rm -rf "$TEMP_DIR" + echo "临时文件已删除" + fi +} + +# ============================================ +# 主流程 +# ============================================ +main() { + echo -e "${YELLOW}即将安装以下软件:${NC}" + echo " 1. 基础工具 (cmake, git, python3等)" + echo " 2. Rockchip MPP (硬件编解码)" + echo " 3. Rockchip RGA (2D图形加速)" + echo " 4. RKNN Runtime (NPU推理)" + echo " 5. FFmpeg (带Rockchip支持)" + echo " 6. 系统环境配置" + echo "" + read -p "确认安装? (y/N): " -r + if [ "$REPLY" != "y" ] && [ "$REPLY" != "Y" ]; then + echo "已取消" + exit 0 + fi + + echo "" + + # 执行安装 + install_basic_tools + install_mpp + install_rga + install_rknn + install_ffmpeg_rk + configure_system + + # 验证 + verify_installation + + # 清理 + cleanup + + # 完成 + echo "" + echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${NC}" + echo -e "${GREEN}║ 依赖安装完成! ║${NC}" + echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}" + echo "" + echo "下一步:" + echo " 1. 复制项目代码到新设备" + echo " 2. 编译项目: cd build && cmake .. && make -j\$(nproc)" + echo " 3. 运行部署脚本: sudo ./scripts/deploy.sh install" + echo "" + echo "提示: 重新登录或使用 'newgrp video' 使组权限生效" +} + +# 运行 +main "$@"