清理旧版本

This commit is contained in:
haotian 2026-02-26 22:56:58 +08:00
parent b2718652ed
commit 9c2c4bdda5
4 changed files with 192 additions and 892 deletions

View File

@ -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
```

View File

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

View File

@ -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' 使组权限生效"

View File

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