清理旧版本
This commit is contained in:
parent
b2718652ed
commit
9c2c4bdda5
@ -8,13 +8,33 @@
|
|||||||
|
|
||||||
## 快速安装
|
## 快速安装
|
||||||
|
|
||||||
使用一键安装脚本:
|
### 前提条件
|
||||||
|
|
||||||
|
新设备需要:
|
||||||
|
1. **克隆项目**(包含 `third_party/mpp` 和 `third_party/rknpu2`)
|
||||||
|
2. **下载 FFmpeg-rockchip**(唯一额外依赖)
|
||||||
|
|
||||||
|
### 1. 克隆项目
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. 克隆或复制项目到新设备
|
git clone http://<服务器IP>/Doni/OrangePi3588Media.git ~/apps/OrangePi3588Media
|
||||||
cd ~/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
|
sudo ./scripts/install_deps.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# RK3588S 依赖安装脚本
|
# RK3588S 简化依赖安装脚本
|
||||||
# 在全新安装的RK3588S上运行,安装所有必要的支撑软件
|
# 假设已克隆项目,third_party/mpp 和 third_party/rknpu2 已存在
|
||||||
#
|
# 只需要额外下载 ffmpeg-rockchip
|
||||||
# 用法: sudo ./install_deps.sh
|
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
@ -14,496 +13,202 @@ NC='\033[0m'
|
|||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||||
|
|
||||||
# 临时目录
|
|
||||||
TEMP_DIR="/tmp/rk3588_deps_$(date +%s)"
|
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}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||||
echo -e "${BLUE}║ RK3588S 依赖安装脚本 ║${NC}"
|
echo -e "${BLUE}║ RK3588S 简化依赖安装脚本 ║${NC}"
|
||||||
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 检查root权限
|
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
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
|
exit 1
|
||||||
fi
|
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 ""
|
echo ""
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# 1. 安装基础工具
|
# 1. 基础工具
|
||||||
# ============================================
|
# ============================================
|
||||||
install_basic_tools() {
|
echo -e "${YELLOW}[1/4] 安装基础工具...${NC}"
|
||||||
echo -e "${YELLOW}[1/6] 安装基础工具...${NC}"
|
|
||||||
|
apt-get update
|
||||||
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 \
|
||||||
build-essential \
|
libwayland-dev libpulse-dev libasound2-dev libv4l-dev \
|
||||||
cmake \
|
python3 python3-pip python3-dev python3-venv \
|
||||||
git \
|
htop vim net-tools v4l-utils unzip
|
||||||
wget \
|
|
||||||
curl \
|
echo -e "${GREEN}✓${NC} 基础工具安装完成"
|
||||||
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} 基础工具安装完成"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# 2. 安装Rockchip MPP
|
# 2. MPP (项目自带)
|
||||||
# ============================================
|
# ============================================
|
||||||
install_mpp() {
|
echo -e "${YELLOW}[2/4] 安装 Rockchip MPP...${NC}"
|
||||||
echo -e "${YELLOW}[2/6] 安装 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"
|
if [ -d "runtime/RK3588/Linux/aarch64/include" ]; then
|
||||||
|
cp -r runtime/RK3588/Linux/aarch64/include/* /usr/include/ 2>/dev/null || true
|
||||||
# 克隆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
|
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
cd mpp
|
echo -e "${YELLOW}警告: 未找到标准 runtime 目录结构,尝试其他路径...${NC}"
|
||||||
|
find . -name "*.so" -type f -exec cp {} /usr/lib/ \; 2>/dev/null || true
|
||||||
# 创建build目录
|
fi
|
||||||
mkdir -p build
|
|
||||||
cd build
|
ldconfig
|
||||||
|
|
||||||
# 配置编译
|
echo -e "${GREEN}✓${NC} RKNN Runtime 安装完成"
|
||||||
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
|
# 4. FFmpeg
|
||||||
# ============================================
|
# ============================================
|
||||||
install_rga() {
|
echo -e "${YELLOW}[4/4] 安装 FFmpeg (带Rockchip支持)...${NC}"
|
||||||
echo -e "${YELLOW}[3/6] 安装 Rockchip RGA...${NC}"
|
|
||||||
|
# 卸载系统ffmpeg
|
||||||
cd "$TEMP_DIR"
|
if dpkg -l | grep -q "^ii ffmpeg "; then
|
||||||
|
apt-mark unhold ffmpeg 2>/dev/null || true
|
||||||
# 克隆RGA(带重试和镜像)
|
apt-get remove -y ffmpeg 2>/dev/null || true
|
||||||
if [ ! -d "rkrga" ]; then
|
fi
|
||||||
# 优先使用本地文件 (支持main或master分支)
|
|
||||||
if [ -n "$LOCAL_FILES_DIR" ] && [ -f "$LOCAL_FILES_DIR/rkrga-main.zip" ]; then
|
cd "$FFMPEG_SRC"
|
||||||
echo " 使用本地文件: rkrga-main.zip"
|
|
||||||
cp "$LOCAL_FILES_DIR/rkrga-main.zip" .
|
# 安装依赖
|
||||||
unzip -q rkrga-main.zip
|
apt-get install -y \
|
||||||
mv rkrga-main rkrga
|
libgnutls28-dev libaom-dev libdav1d-dev \
|
||||||
elif [ -n "$LOCAL_FILES_DIR" ] && [ -f "$LOCAL_FILES_DIR/rkrga-master.zip" ]; then
|
libmp3lame-dev libopus-dev libtheora-dev \
|
||||||
echo " 使用本地文件: rkrga-master.zip"
|
libvorbis-dev libvpx-dev libx264-dev libx265-dev libnuma-dev
|
||||||
cp "$LOCAL_FILES_DIR/rkrga-master.zip" .
|
|
||||||
unzip -q rkrga-master.zip
|
# 配置编译
|
||||||
mv rkrga-master rkrga
|
./configure \
|
||||||
else
|
--prefix=/usr/local \
|
||||||
echo " 尝试从 GitHub 克隆 RGA..."
|
--enable-gpl --enable-version3 \
|
||||||
git clone https://github.com/rockchip-linux/rkrga.git 2>/dev/null || {
|
--enable-libdrm --enable-rkmpp \
|
||||||
echo -e "${YELLOW}Git 克隆失败,尝试下载 ZIP...${NC}"
|
--enable-libx264 --enable-libx265 \
|
||||||
wget -O rkrga-main.zip https://github.com/rockchip-linux/rkrga/archive/refs/heads/main.zip
|
--enable-shared --disable-static \
|
||||||
unzip -q rkrga-main.zip
|
--extra-libs=-lpthread --extra-libs=-lm 2>&1 | tail -20
|
||||||
mv rkrga-main rkrga
|
|
||||||
}
|
make -j$(nproc)
|
||||||
fi
|
make install
|
||||||
fi
|
ldconfig
|
||||||
|
|
||||||
cd rkrga
|
ln -sf /usr/local/bin/ffmpeg /usr/bin/ffmpeg-rk 2>/dev/null || true
|
||||||
|
|
||||||
# 编译
|
echo -e "${GREEN}✓${NC} FFmpeg 安装完成"
|
||||||
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
|
# 5. 系统配置
|
||||||
# ============================================
|
# ============================================
|
||||||
install_rknn() {
|
echo -e "${YELLOW}[系统配置]${NC}"
|
||||||
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 安装完成"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ============================================
|
cat > /etc/udev/rules.d/99-rockchip-npu.rules << 'EOF'
|
||||||
# 5. 安装FFmpeg (带Rockchip支持)
|
KERNEL=="rknpu*", MODE="0666", GROUP="video"
|
||||||
# ============================================
|
|
||||||
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
|
|
||||||
KERNEL=="mpp_service", MODE="0666", GROUP="video"
|
KERNEL=="mpp_service", MODE="0666", GROUP="video"
|
||||||
|
KERNEL=="rga*", MODE="0666", GROUP="video"
|
||||||
# RGA
|
|
||||||
KERNEL=="rga", MODE="0666", GROUP="video"
|
|
||||||
KERNEL=="rga3", MODE="0666", GROUP="video"
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# 重新加载udev规则
|
udevadm control --reload-rules
|
||||||
udevadm control --reload-rules
|
udevadm trigger
|
||||||
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} 系统环境配置完成"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ============================================
|
usermod -a -G video orangepi 2>/dev/null || true
|
||||||
# 验证安装
|
usermod -a -G render orangepi 2>/dev/null || true
|
||||||
# ============================================
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
# ============================================
|
|
||||||
# 清理
|
# 清理
|
||||||
# ============================================
|
rm -rf "$TEMP_DIR"
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
# ============================================
|
echo ""
|
||||||
# 主流程
|
echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${NC}"
|
||||||
# ============================================
|
echo -e "${GREEN}║ 依赖安装完成! ║${NC}"
|
||||||
main() {
|
echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}"
|
||||||
echo -e "${YELLOW}即将安装以下软件:${NC}"
|
echo ""
|
||||||
echo " 1. 基础工具 (cmake, git, python3等)"
|
echo "验证:"
|
||||||
echo " 2. Rockchip MPP (硬件编解码)"
|
echo " ls /dev/rknpu*"
|
||||||
echo " 3. Rockchip RGA (2D图形加速)"
|
echo " pkg-config --modversion rockchip_mpp"
|
||||||
echo " 4. RKNN Runtime (NPU推理)"
|
echo " ffmpeg -version | head -1"
|
||||||
echo " 5. FFmpeg (带Rockchip支持)"
|
echo ""
|
||||||
echo " 6. 系统环境配置"
|
echo "下一步:"
|
||||||
echo ""
|
echo " cd ~/apps/OrangePi3588Media/build"
|
||||||
read -p "确认安装? (y/N): " -r
|
echo " cmake .. && make -j\$(nproc)"
|
||||||
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 "$@"
|
|
||||||
|
|||||||
@ -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' 使组权限生效"
|
|
||||||
@ -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)"
|
|
||||||
Loading…
Reference in New Issue
Block a user