灵芯派 gpu 嵌入式 Rockchip Debian 系统

 

zmrobo@H2-RCU:~/code$ ls /dev/dri/
card0  card1  renderD128  renderD129
zmrobo@H2-RCU:~/code$ sudo apt install -y mesa-utils
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
mesa-utils 已经是最新版 (8.4.0-1+b1)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 44 个软件包未被升级。
zmrobo@H2-RCU:~/code$ glxinfo | grep -i "renderer"
libGL error: unable to load driver: rockchip_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: rockchip
libGL error: unable to load driver: rockchip_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: rockchip
    GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer,
    GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, GLX_MESA_query_renderer,
Extended renderer info (GLX_MESA_query_renderer):
OpenGL renderer string: llvmpipe (LLVM 7.0, 128 bits)
zmrobo@H2-RCU:~/code$ glxgears
libGL error: unable to load driver: rockchip_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: rockchip
libGL error: unable to load driver: rockchip_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: rockchip
584 frames in 5.0 seconds = 116.501 FPS
701 frames in 5.0 seconds = 140.144 FPS
697 frames in 5.0 seconds = 139.285 FPS
694 frames in 5.0 seconds = 138.652 FPS
682 frames in 5.0 seconds = 136.335 FPS
692 frames in 5.0 seconds = 138.377 FPS
701 frames in 5.0 seconds = 140.138 FPS
XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
      after 15472 requests (15472 known processed) with 0 events remaining.

  

ls /dev/dri/ 的输出 card0 card1 renderD128 renderD129 依然表明,内核已经正确识别了 GPU 硬件并创建了设备节点。

GPU 硬件已被识别,但对应的开源图形驱动(Mesa Rockchip DRI)加载失败

 

 sudo find /usr/lib -name "libmali.so*" 2>/dev/null
/usr/lib/aarch64-linux-gnu/libmali.so
/usr/lib/aarch64-linux-gnu/libmali.so.1
/usr/lib/aarch64-linux-gnu/libmali.so.1.9.0

 

zmrobo@H2-RCU:/usr/lib/aarch64-linux-gnu/dri$ sudo tee /etc/profile.d/mesa-gpu.sh <<EOF
> export MESA_LOADER_DRIVER_OVERRIDE=rockchip
> export LIBGL_DRIVERS_PATH=/usr/lib/aarch64-linux-gnu/dri
> EOF
export MESA_LOADER_DRIVER_OVERRIDE=rockchip
export LIBGL_DRIVERS_PATH=/usr/lib/aarch64-linux-gnu/dri
zmrobo@H2-RCU:/usr/lib/aarch64-linux-gnu/dri$ sudo chmod +x /etc/profile.d/mesa-gpu.sh
zmrobo@H2-RCU:/usr/lib/aarch64-linux-gnu/dri$ source /etc/profile.d/mesa-gpu.sh
zmrobo@H2-RCU:/usr/lib/aarch64-linux-gnu/dri$ glxinfo | grep -i "renderer"
libGL error: driver exports no extensions (/usr/lib/aarch64-linux-gnu/dri/rockchip_dri.so: undefined symbol: __driDriverExtensions)
libGL error: failed to load driver: rockchip
libGL error: driver exports no extensions (/usr/lib/aarch64-linux-gnu/dri/rockchip_dri.so: undefined symbol: __driDriverExtensions)
libGL error: failed to load driver: rockchip
    GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer,
    GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer, GLX_MESA_query_renderer,
Extended renderer info (GLX_MESA_query_renderer):
OpenGL renderer string: llvmpipe (LLVM 7.0, 128 bits)

 

  1. 软件层面:你的 Debian 10 系统安装的 Mesa 版本是 18.3.6,这个版本不支持 Mali-G52 GPU 所需的 Panfrost 驱动。Panfrost 对 Mali-G52 的支持是在 Mesa 20.0 版本以后才加入的。
  2. 硬件层面:lspci 命令没有输出,说明这是一个嵌入式设备,GPU 是集成在 SoC 内部的,并非独立的 PCI 设备。系统日志(dmesg)中也没有找到 panfrost 或 mali 的相关信息。
  3. 内核层面:sudo modprobe panfrost 命令失败,提示找不到该模块。这说明你当前的内核(4.19.232)没有编译 Panfrost 驱动模块。

系统(内核 + Mesa)组合不具备运行 Mali-G52 GPU 硬件加速的条件。

 

刷入官方提供的、已配置好 GPU 驱动的系统镜像

灵芯派 H2-RCU

升级到 Debian 11 (Bullseye)

Debian 11 的默认 Mesa 版本是 20.3.5,这个版本原生支持 Panfrost 驱动。

 

#!/bin/bash

echo "=================================================="
echo "         设备硬件环境综合检测脚本 (GPU 重点)        "
echo "=================================================="

# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 函数:打印标题
print_title() {
    echo -e "\n${GREEN}=== $1 ===${NC}"
}

# ----------------- 系统信息 -----------------
print_title "1. 系统基本信息"
echo "内核版本: $(uname -r)"
echo "系统版本: $(cat /etc/debian_version 2>/dev/null || cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
echo "系统架构: $(uname -m)"

# ----------------- CPU 信息 -----------------
print_title "2. CPU 信息"
CPU_MODEL=$(cat /proc/cpuinfo | grep -m1 "model name" | cut -d':' -f2 | sed 's/^ *//')
CPU_CORES=$(nproc)
echo "CPU 型号: $CPU_MODEL"
echo "CPU 核心数: $CPU_CORES"

# ----------------- 内存信息 -----------------
print_title "3. 内存信息"
TOTAL_MEM=$(free -h | awk '/Mem:/ {print $2}')
AVAIL_MEM=$(free -h | awk '/Mem:/ {print $7}')
echo "总内存: $TOTAL_MEM"
echo "可用内存: $AVAIL_MEM"

# ----------------- 存储信息 -----------------
print_title "4. 存储信息 (根目录)"
ROOT_DISK=$(df -h / | awk '/\// {print $2 " / " $4 " 可用"}')
echo "根目录空间: $ROOT_DISK"

# ----------------- 显卡硬件信息 -----------------
print_title "5. 显卡 (GPU) 硬件信息"

echo -e "\n[ lspci 检测 ]"
lspci_output=$(lspci | grep -iE "vga|3d|display")
if [ -n "$lspci_output" ]; then
    echo "$lspci_output"
else
    echo -e "${YELLOW}未通过 lspci 检测到独立显卡。这对于嵌入式设备是正常的。${NC}"
fi

echo -e "\n[ dmesg 内核日志检测 GPU ]"
dmesg | grep -iE "gpu|mali|panfrost|drm" | tail -20

echo -e "\n[ 设备树检测 GPU 节点 ]"
if [ -d /proc/device-tree ]; then
    dt_gpu_nodes=$(find /proc/device-tree -name "*gpu*" -o -name "*mali*" | head -10)
    if [ -n "$dt_gpu_nodes" ]; then
        echo "$dt_gpu_nodes"
    else
        echo -e "${YELLOW}未在设备树中找到明显的 GPU 节点。${NC}"
    fi
fi

# ----------------- GPU 驱动相关信息 -----------------
print_title "6. GPU 驱动及渲染信息"

echo -e "\n[ Mesa 版本 ]"
mesa_version=$(glxinfo | grep "OpenGL version string" | cut -d' ' -f4)
if [ -n "$mesa_version" ]; then
    echo "Mesa OpenGL 版本: $mesa_version"
else
    echo -e "${RED}无法获取 Mesa 版本,请确保已安装 mesa-utils (glxinfo)。${NC}"
fi

echo -e "\n[ Mali 驱动文件检查 ]"
 mali_files=$(find /usr/lib -name "libmali.so*" 2>/dev/null | head -5)
if [ -n "$mali_files" ]; then
    echo "找到 Mali 驱动文件:"
    echo "$mali_files"
else
    echo -e "${YELLOW}未找到 Mali 驱动文件 (libmali.so*)。${NC}"
fi

echo -e "\n[ Panfrost 驱动模块检查 ]"
if lsmod | grep -q panfrost; then
    echo -e "${GREEN}Panfrost 驱动模块已加载。${NC}"
else
    echo -e "${YELLOW}Panfrost 驱动模块未加载。尝试查找模块文件...${NC}"
    panfrost_module=$(find /lib/modules/$(uname -r) -name "panfrost.ko" 2>/dev/null)
    if [ -n "$panfrost_module" ]; then
        echo "找到 Panfrost 模块文件: $panfrost_module"
    else
        echo -e "${RED}未找到 Panfrost 驱动模块。${NC}"
    fi
fi

# ----------------- 当前 GPU 渲染器 -----------------
echo -e "\n[ 当前 OpenGL 渲染器 ]"
renderer=$(glxinfo | grep "OpenGL renderer string" | cut -d':' -f2 | sed 's/^ *//')
if [ -n "$renderer" ]; then
    echo "渲染器: $renderer"
    if [[ "$renderer" == *llvmpipe* ]]; then
        echo -e "${RED}警告: 当前使用软件渲染 (llvmpipe),未启用 GPU 硬件加速。${NC}"
    elif [[ "$renderer" == *Panfrost* || "$renderer" == *Mali* ]]; then
        echo -e "${GREEN}成功: 当前使用 GPU 硬件加速渲染。${NC}"
    else
        echo -e "${YELLOW}注意: 渲染器为 $renderer,请确认是否为硬件加速。${NC}"
    fi
else
    echo -e "${RED}无法获取 OpenGL 渲染器信息。${NC}"
fi

# ----------------- DRM 设备节点 -----------------
print_title "7. DRM 设备节点 (/dev/dri)"
if [ -d /dev/dri ]; then
    ls -l /dev/dri
else
    echo -e "${RED}/dev/dri 目录不存在,GPU 驱动可能未正确安装。${NC}"
fi

echo -e "\n=================================================="
echo "                   检测完成                        "
echo "=================================================="

  

==================================================
         设备硬件环境综合检测脚本 (GPU 重点)
==================================================

=== 1. 系统基本信息 ===
内核版本: 4.19.232
系统版本: 10.13
系统架构: aarch64

=== 2. CPU 信息 ===
CPU 型号:
CPU 核心数: 4

=== 3. 内存信息 ===
总内存: 1.9Gi
可用内存: 1.4Gi

=== 4. 存储信息 (根目录) ===
根目录空间: 14G / 3.2G 可用

=== 5. 显卡 (GPU) 硬件信息 ===

[ lspci 检测 ]
未通过 lspci 检测到独立显卡。这对于嵌入式设备是正常的。

[ dmesg 内核日志检测 GPU ]

[ 设备树检测 GPU 节点 ]
未在设备树中找到明显的 GPU 节点。

=== 6. GPU 驱动及渲染信息 ===

[ Mesa 版本 ]
libGL error: unable to load driver: panfrost_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: panfrost
libGL error: unable to load driver: panfrost_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: panfrost
Mesa OpenGL 版本: 3.1

[ Mali 驱动文件检查 ]
找到 Mali 驱动文件:
/usr/lib/aarch64-linux-gnu/libmali.so
/usr/lib/aarch64-linux-gnu/libmali.so.1
/usr/lib/aarch64-linux-gnu/libmali.so.1.9.0

[ Panfrost 驱动模块检查 ]
Panfrost 驱动模块未加载。尝试查找模块文件...
未找到 Panfrost 驱动模块。

[ 当前 OpenGL 渲染器 ]
libGL error: unable to load driver: panfrost_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: panfrost
libGL error: unable to load driver: panfrost_dri.so
libGL error: driver pointer missing
libGL error: failed to load driver: panfrost
渲染器: llvmpipe (LLVM 7.0, 128 bits)
警告: 当前使用软件渲染 (llvmpipe),未启用 GPU 硬件加速。

=== 7. DRM 设备节点 (/dev/dri) ===
总用量 0
crw-rw----+ 1 root video  226,   0 2月  14  2019 card0
crw-rw----+ 1 root video  226,   1 2月  14  2019 card1
crw-rw----+ 1 root render 226, 128 2月  14  2019 renderD128
crw-rw----+ 1 root render 226, 129 2月  14  2019 renderD129

==================================================
                   检测完成
==================================================

 

 

 

设备是一个 aarch64 架构的嵌入式系统(很可能是 Rockchip RK3566 或类似 SoC),运行 Debian 10 "Buster"。

关键发现:

  1. GPU 硬件存在但未被正确识别:
    • 证据:/dev/dri 目录下存在 card0card1renderD128renderD129 设备节点。这是最有力的证明,说明内核的 DRM(直接渲染管理器)子系统已经识别了 GPU 硬件,并创建了设备文件。
    • 矛盾:dmesg 和设备树搜索没有找到明确的 mali 或 gpu 相关信息,这可能是因为驱动或设备树配置不完整。
  2. 驱动环境混乱且不兼容:
    • Mesa 版本过旧:你的 Mesa 版本是 3.1(对应 Mesa 库版本 18.3.6),这个版本 不支持 你的 Mali-G52 GPU 所需的 Panfrost 开源驱动。
    • 存在 Mali 闭源驱动:系统中安装了 libmali.so 文件,但它是一个独立的闭源驱动,与系统的 Mesa 库没有正确集成。
    • Panfrost 驱动缺失:系统中没有 Panfrost 驱动模块(panfrost.ko),且 Mesa 版本太旧,无法提供支持。
  3. 最终结果:
    • 由于 Panfrost 驱动不可用,且 Mali 闭源驱动未被正确调用,系统回退到了软件渲染器 llvmpipe。所有图形计算都在 CPU 上完成,性能低下。

解决方案(再次强调,按优先级排序)

方案一:寻找并刷入官方提供的、已配置好 GPU 驱动的系统镜像(最佳且唯一推荐的简单方案)

这是解决你问题的唯一正确途径。你当前的系统是一个 “干净” 的 Debian 10,但缺少针对你特定硬件(灵芯派 H2-RCU)的驱动配置。
  • 操作:联系 “灵芯派” 的供应商或访问其官方网站 / 论坛,下载一个为 H2-RCU 定制的、支持 GPU 硬件加速的 Linux 镜像(可以是 Debian、Ubuntu 或 Armbian)。
  • 原因:官方镜像会包含:
    • 一个已正确配置并包含 Panfrost 模块的内核。
    • 一个适配该内核的、足够新的 Mesa 版本。
    • 正确的设备树文件,确保硬件被正确识别。
  • 预期效果:刷入镜像后,无需任何手动配置,glxinfo | grep -i renderer 就会显示 Panfrost (Mali-G52)

方案二:手动构建并替换内核与 Mesa(技术要求高,不推荐)

如果你无法找到官方镜像,这是唯一的技术解决方案,但过程非常复杂,远超 “简单修理” 的范畴。
  1. 构建新内核:
    • 获取针对你 SoC(如 RK3566)的内核源码。
    • 配置内核,启用 CONFIG_DRM_PANFROST 和其他相关驱动。
    • 编译并安装新内核和模块。
  2. 构建新 Mesa:
    • 获取 Mesa 源码(推荐 20.3.x 或更高版本)。
    • 交叉编译或本地编译支持 Panfrost 和你的 GPU 的 Mesa 库。
    • 替换系统中的旧 Mesa 库。
  3. 配置:
    • 更新 initramfs,确保新内核被正确加载。
    • 可能还需要修改设备树。

 

posted @ 2025-11-24 13:40  aiplus  阅读(13)  评论(0)    收藏  举报
悬浮按钮示例