diff --git a/docs/dependencies.md b/docs/dependencies.md index ac46b7f..42ddf1e 100644 --- a/docs/dependencies.md +++ b/docs/dependencies.md @@ -8,13 +8,33 @@ ## 快速安装 -使用一键安装脚本: +### 前提条件 + +新设备需要: +1. **克隆项目**(包含 `third_party/mpp` 和 `third_party/rknpu2`) +2. **下载 FFmpeg-rockchip**(唯一额外依赖) + +### 1. 克隆项目 ```bash -# 1. 克隆或复制项目到新设备 +git clone http://<服务器IP>/Doni/OrangePi3588Media.git ~/apps/OrangePi3588Media cd ~/apps/OrangePi3588Media +``` -# 2. 运行依赖安装脚本 +### 2. 准备 FFmpeg(在Windows/Mac下载) + +```powershell +# PowerShell 下载 +Invoke-WebRequest -Uri "https://github.com/nyanmisaka/ffmpeg-rockchip/archive/refs/heads/master.zip" -OutFile "ffmpeg-rockchip-master.zip" + +# 传到新设备 +scp ffmpeg-rockchip-master.zip orangepi@新设备IP:/tmp/ +``` + +### 3. 运行安装脚本 + +```bash +cd ~/apps/OrangePi3588Media sudo ./scripts/install_deps.sh ``` diff --git a/scripts/install_deps.sh b/scripts/install_deps.sh index 7503e15..c86e772 100755 --- a/scripts/install_deps.sh +++ b/scripts/install_deps.sh @@ -1,8 +1,7 @@ #!/bin/bash -# RK3588S 依赖安装脚本 -# 在全新安装的RK3588S上运行,安装所有必要的支撑软件 -# -# 用法: sudo ./install_deps.sh +# RK3588S 简化依赖安装脚本 +# 假设已克隆项目,third_party/mpp 和 third_party/rknpu2 已存在 +# 只需要额外下载 ffmpeg-rockchip set -e @@ -14,496 +13,202 @@ 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" - -# 检查是否有本地预下载的文件 -LOCAL_FILES_DIR="" -if [ -f "/tmp/mpp-develop.zip" ] && [ -f "/tmp/rkrga-main.zip" ] && [ -f "/tmp/ffmpeg-rockchip-master.zip" ]; then - echo -e "${GREEN}发现本地预下载的文件,将使用本地文件安装${NC}" - LOCAL_FILES_DIR="/tmp" -fi echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}" -echo -e "${BLUE}║ RK3588S 依赖安装脚本 ║${NC}" +echo -e "${BLUE}║ RK3588S 简化依赖安装脚本 ║${NC}" echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}" echo "" -# 检查root权限 if [ "$(id -u)" -ne 0 ]; then - echo -e "${RED}错误: 请使用 sudo 运行此脚本${NC}" + 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 -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. 安装基础工具 +# 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 - - # 其他工具 (注意: ffmpeg稍后会从源码编译安装) - apt-get install -y \ - htop \ - vim \ - net-tools \ - v4l-utils \ - unzip - - echo -e "${GREEN}✓${NC} 基础工具安装完成" -} +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. 安装Rockchip MPP +# 2. MPP (项目自带) # ============================================ -install_mpp() { - echo -e "${YELLOW}[2/6] 安装 Rockchip MPP...${NC}" +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 - cd "$TEMP_DIR" - - # 克隆MPP(带重试和镜像) - if [ ! -d "mpp" ]; then - # 优先使用本地文件 - if [ -n "$LOCAL_FILES_DIR" ] && [ -f "$LOCAL_FILES_DIR/mpp-master.zip" ]; then - echo " 使用本地文件: mpp-master.zip" - cp "$LOCAL_FILES_DIR/mpp-master.zip" . - unzip -q mpp-master.zip - mv mpp-master mpp - elif [ -n "$LOCAL_FILES_DIR" ] && [ -f "$LOCAL_FILES_DIR/mpp-develop.zip" ]; then - echo " 使用本地文件: mpp-develop.zip" - cp "$LOCAL_FILES_DIR/mpp-develop.zip" . - unzip -q mpp-develop.zip - mv mpp-develop mpp - else - echo " 尝试从 GitHub 克隆 MPP..." - timeout 30 git clone --depth 1 https://github.com/rockchip-linux/mpp.git 2>/dev/null || { - echo -e "${YELLOW}Git 克隆失败,尝试下载 ZIP...${NC}" - timeout 60 wget -O mpp-develop.zip https://github.com/rockchip-linux/mpp/archive/refs/heads/develop.zip - unzip -q mpp-develop.zip - mv mpp-develop mpp - } - fi + if [ -d "runtime/RK3588/Linux/aarch64/include" ]; then + cp -r runtime/RK3588/Linux/aarch64/include/* /usr/include/ 2>/dev/null || true 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 安装完成" -} +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 安装完成" # ============================================ -# 3. 安装Rockchip RGA +# 4. FFmpeg # ============================================ -install_rga() { - echo -e "${YELLOW}[3/6] 安装 Rockchip RGA...${NC}" - - cd "$TEMP_DIR" - - # 克隆RGA(带重试和镜像) - if [ ! -d "rkrga" ]; then - # 优先使用本地文件 (支持main或master分支) - if [ -n "$LOCAL_FILES_DIR" ] && [ -f "$LOCAL_FILES_DIR/rkrga-main.zip" ]; then - echo " 使用本地文件: rkrga-main.zip" - cp "$LOCAL_FILES_DIR/rkrga-main.zip" . - unzip -q rkrga-main.zip - mv rkrga-main rkrga - elif [ -n "$LOCAL_FILES_DIR" ] && [ -f "$LOCAL_FILES_DIR/rkrga-master.zip" ]; then - echo " 使用本地文件: rkrga-master.zip" - cp "$LOCAL_FILES_DIR/rkrga-master.zip" . - unzip -q rkrga-master.zip - mv rkrga-master rkrga - else - echo " 尝试从 GitHub 克隆 RGA..." - git clone https://github.com/rockchip-linux/rkrga.git 2>/dev/null || { - echo -e "${YELLOW}Git 克隆失败,尝试下载 ZIP...${NC}" - wget -O rkrga-main.zip https://github.com/rockchip-linux/rkrga/archive/refs/heads/main.zip - unzip -q rkrga-main.zip - mv rkrga-main rkrga - } - fi - 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 安装完成" -} +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 安装完成" # ============================================ -# 4. 安装RKNN Runtime +# 5. 系统配置 # ============================================ -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 - # 优先使用本地文件 - if [ -n "$LOCAL_FILES_DIR" ] && [ -f "$LOCAL_FILES_DIR/$RKNN_DEB" ]; then - echo " 使用本地文件: $RKNN_DEB" - cp "$LOCAL_FILES_DIR/$RKNN_DEB" . - else - echo " 尝试下载 RKNN Runtime..." - 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}" - echo " 手动下载地址: https://github.com/rockchip-linux/rknpu2/releases" - return 0 - } - fi - 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 安装完成" -} +echo -e "${YELLOW}[系统配置]${NC}" -# ============================================ -# 5. 安装FFmpeg (带Rockchip支持) -# ============================================ -install_ffmpeg_rk() { - echo -e "${YELLOW}[5/6] 安装 FFmpeg (带Rockchip支持)...${NC}" - - # 检查并处理系统预装的ffmpeg - echo " 检查系统ffmpeg..." - if dpkg -l | grep -q "^ii ffmpeg "; then - echo " 发现系统预装ffmpeg,解除保留状态..." - apt-mark unhold ffmpeg 2>/dev/null || true - apt-get remove -y ffmpeg 2>/dev/null || true - fi - - cd "$TEMP_DIR" - - # 检查是否已有ffmpeg-rockchip - if [ -d "$PROJECT_DIR/ffmpeg-rockchip" ]; then - echo " 使用项目自带的 ffmpeg-rockchip" - cd "$PROJECT_DIR/ffmpeg-rockchip" - elif [ -n "$LOCAL_FILES_DIR" ] && [ -f "$LOCAL_FILES_DIR/ffmpeg-rockchip-master.zip" ]; then - # 优先使用本地文件 - echo " 使用本地文件: ffmpeg-rockchip-master.zip" - cd "$TEMP_DIR" - cp "$LOCAL_FILES_DIR/ffmpeg-rockchip-master.zip" . - unzip -q ffmpeg-rockchip-master.zip - cd ffmpeg-rockchip-master - else - # 克隆ffmpeg-rockchip - echo " 尝试下载 ffmpeg-rockchip..." - git clone https://github.com/nyanmisaka/ffmpeg-rockchip.git 2>/dev/null || { - echo -e "${YELLOW}Git 克隆失败,尝试下载 ZIP...${NC}" - wget -O ffmpeg-rockchip-master.zip https://github.com/nyanmisaka/ffmpeg-rockchip/archive/refs/heads/master.zip - unzip -q ffmpeg-rockchip-master.zip - cd ffmpeg-rockchip-master - } - 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 +cat > /etc/udev/rules.d/99-rockchip-npu.rules << 'EOF' +KERNEL=="rknpu*", MODE="0666", GROUP="video" KERNEL=="mpp_service", MODE="0666", GROUP="video" - -# RGA -KERNEL=="rga", MODE="0666", GROUP="video" -KERNEL=="rga3", MODE="0666", GROUP="video" +KERNEL=="rga*", 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} 系统环境配置完成" -} +udevadm control --reload-rules +udevadm trigger -# ============================================ -# 验证安装 -# ============================================ -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 -} +usermod -a -G video orangepi 2>/dev/null || true +usermod -a -G render orangepi 2>/dev/null || true -# ============================================ # 清理 -# ============================================ -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 -} +rm -rf "$TEMP_DIR" -# ============================================ -# 主流程 -# ============================================ -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 "$@" +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)" diff --git a/scripts/install_deps_local.sh b/scripts/install_deps_local.sh deleted file mode 100755 index bdf499e..0000000 --- a/scripts/install_deps_local.sh +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/bash -# RK3588S 依赖安装脚本 - 本地文件版本 -# 使用预下载/打包的本地文件安装 -# -# 用法: -# 1. 将以下文件放到 /tmp/: -# - mpp.tar.gz (从 third_party/mpp 打包) -# - rknpu2-1.5.2.zip (已下载) -# - ffmpeg-rockchip-master.zip (已下载) -# 2. sudo ./install_deps_local.sh - -set -e - -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' - -LOCAL_DIR="/tmp" -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 "" - -if [ "$(id -u)" -ne 0 ]; then - echo -e "${RED}错误: 请使用 sudo 运行此脚本${NC}" - exit 1 -fi - -# 检查本地文件 -echo -e "${YELLOW}[检查本地文件]${NC}" -MISSING=0 - -if [ ! -f "$LOCAL_DIR/mpp.tar.gz" ]; then - echo -e "${RED}✗${NC} mpp.tar.gz 不存在" - echo " 请在 OrangePi 上执行: cd ~/apps/OrangePi3588Media/third_party && tar czf ~/mpp.tar.gz mpp/" - MISSING=$((MISSING+1)) -else - echo -e "${GREEN}✓${NC} mpp.tar.gz" -fi - -if [ ! -f "$LOCAL_DIR/rknpu2-1.5.2.zip" ]; then - echo -e "${RED}✗${NC} rknpu2-1.5.2.zip 不存在" - MISSING=$((MISSING+1)) -else - echo -e "${GREEN}✓${NC} rknpu2-1.5.2.zip" -fi - -if [ ! -f "$LOCAL_DIR/ffmpeg-rockchip-master.zip" ]; then - echo -e "${RED}✗${NC} ffmpeg-rockchip-master.zip 不存在" - MISSING=$((MISSING+1)) -else - echo -e "${GREEN}✓${NC} ffmpeg-rockchip-master.zip" -fi - -if [ $MISSING -gt 0 ]; then - echo "" - echo -e "${RED}缺少 $MISSING 个文件,请将文件放到 $LOCAL_DIR/ 目录${NC}" - 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 "$TEMP_DIR" -tar xzf "$LOCAL_DIR/mpp.tar.gz" -cd mpp - -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 "$TEMP_DIR" -unzip -q "$LOCAL_DIR/rknpu2-1.5.2.zip" -cd rknpu2-1.5.2 - -# 复制库文件 -if [ -d "runtime/RK3588/Linux/aarch64" ]; then - cp runtime/RK3588/Linux/aarch64/*.so /usr/lib/ 2>/dev/null || true - cp runtime/RK3588/Linux/aarch64/librknn* /usr/lib/ 2>/dev/null || true -fi - -# 复制头文件 -if [ -d "runtime/RK3588/Linux/aarch64/include" ]; then - cp -r runtime/RK3588/Linux/aarch64/include/* /usr/include/ 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 "$TEMP_DIR" -unzip -q "$LOCAL_DIR/ffmpeg-rockchip-master.zip" -cd ffmpeg-rockchip-master - -# 安装依赖 -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 \ - --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 安装完成" - -# ============================================ -# 5. 系统配置 -# ============================================ -echo -e "${YELLOW}[系统配置]${NC}" - -# udev规则 -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 - -# 内核参数 -cat >> /etc/sysctl.conf << 'EOF' -vm.swappiness=10 -vm.dirty_ratio=40 -vm.dirty_background_ratio=10 -EOF - -sysctl -p - -echo -e "${GREEN}✓${NC} 系统配置完成" - -# 清理 -rm -rf "$TEMP_DIR" - -echo "" -echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${NC}" -echo -e "${GREEN}║ 依赖安装完成! ║${NC}" -echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}" -echo "" -echo "验证命令:" -echo " ls /dev/rknpu* # NPU设备" -echo " pkg-config --modversion rockchip_mpp # MPP版本" -echo " ffmpeg -version | head -1 # FFmpeg版本" -echo "" -echo "提示: 重新登录或使用 'newgrp video' 使组权限生效" diff --git a/scripts/install_deps_simple.sh b/scripts/install_deps_simple.sh deleted file mode 100755 index c86e772..0000000 --- a/scripts/install_deps_simple.sh +++ /dev/null @@ -1,214 +0,0 @@ -#!/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)"