增加依赖安装脚本和文档

This commit is contained in:
haotian 2026-02-26 21:54:13 +08:00
parent b5b36457e4
commit e94430cf1f
2 changed files with 655 additions and 0 deletions

218
docs/dependencies.md Normal file
View File

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

437
scripts/install_deps.sh Executable file
View File

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