safesight-edge/scripts/install_deps.sh
2026-02-26 22:03:39 +08:00

445 lines
12 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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
# 其他工具 (注意: ffmpeg稍后会从源码编译安装)
apt-get install -y \
htop \
vim \
net-tools \
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}"
# 检查并处理系统预装的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"
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 "$@"