RK3568 Ubuntu 20.04 显卡mali驱动配置与桌面加速
1 deb包安装
内核mali版本为g18p0对应的用户空间的驱动就应该装比这个版本低级的,而3568SDK中只提供了g2p0和g24p0,前者版本太低,后者版本太新,故在3588SDK中找到了libmali驱动。要装的驱动包如下
-
RK3588SDK提供: libmali-bifrost-g52-g13p0-x11-gbm_1.9-1_arm64.deb
-
RK3568SDK提供: librga2_2.2.0-1_arm64.deb xserver-xorg-core_1.20.11-1_arm64.deb
注意,xserver的包有selinux这个包的依赖问题,需要手动拆包然后修改依赖的版本号,方式如下:
cd /tmp
mkdir xserver-fix && cd xserver-fix
dpkg-deb -R /tmp/xserver-xorg-core_1.20.11-1_arm64.deb x
sed -i 's/libselinux1 (>= 3.1~)/libselinux1 (>= 3.0)/' x/DEBIAN/control
dpkg-deb --build x /tmp/xserver-xorg-core_1.20.11-1_arm64-fixed.deb
最终得到xserver-xorg-core_1.20.11-1_arm64-fixed.deb
安装这几个包,使用apt update后apt install ./***
libmali-bifrost-g52-g13p0-x11-gbm_1.9-1_arm64.deb
librga2_2.2.0-1_arm64.deb
xserver-xorg-core_1.20.11-1_arm64-fixed.deb
2 显卡加速桌面渲染的配置
安装完上面的deb后,还需将3568 sdk中debian目录下有关显卡加速的配置都应用下,为此我做了个deb包。
2.1 包介绍
2.1.1 基本信息
| 项目 | 值 |
|---|---|
| 包名 | rk3568-kernel-5.10-overlayconf |
| 版本 | 1.0-2 |
| 架构 | arm64 |
| 作者 | Witheart [email protected] |
| 来源 | 3568 SDK debian/overlay/ + device/rockchip/common/tools/aarch64/ |
2.1.2 作用
针对 RK3568(Mali-G52) + kernel 5.10 BSP + Ubuntu/Xfce 桌面,一键部署 GPU 渲染加速和系统配套配置。核心目标:
- 消除画面撕裂 + 光标闪烁(
FlipFB=always+ASYNC_COMMIT=1) - 保证 GPU 性能不降(异步提交不阻塞渲染管线)
- 桌面合成走 GPU(glamor 在 Mali-G52 上加速)
2.1.3 包内文件清单
| 文件 | 作用 |
|---|---|
usr/bin/modetest |
DRM 测试工具(S10atomic_commit.sh 依赖,缺它脚本会静默跳过) |
etc/init.d/S10atomic_commit.sh |
启动时为所有 DRM plane 设置 ASYNC_COMMIT=1 |
usr/lib/systemd/system/async.service |
开机执行上述脚本的 systemd 服务 |
etc/systemd/system/multi-user.target.wants/async.service |
服务软链接(→ /lib/systemd/system/async.service) |
etc/X11/xorg.conf.d/20-modesetting.conf |
X 配置:modesetting + glamor + FlipFB=always |
etc/X11/Xsession.d/36x11-common_xhost-root |
登录时放行 root 访问 X |
etc/X11/Xsession.d/98x11-common_env |
登录会话加载系统环境 |
etc/profile.d/cogl.sh |
COGL_DRIVER=gles2(合成器走 GLES2) |
etc/profile.d/gst.sh |
GST_GL_API=gles2、GST_GL_PLATFORM=egl(GStreamer 硬解) |
etc/profile.d/qt.sh |
QT_XCB_GL_INTEGRATION=xcb_egl(Qt 走 EGL) |
etc/profile.d/qtwebengine.sh |
Chromium GPU/硬解 flags |
etc/profile.d/adbd.sh / ibus.sh / common-env.sh / usbdevice.sh / x11.sh |
ADB / 输入法 / 基础环境 / USB 设备 / 显示环境 |
etc/udev/rules.d/88-rockchip-camera.rules |
摄像头设备权限 |
etc/udev/rules.d/90-pulseaudio-rockchip.rules |
声卡权限 |
etc/udev/rules.d/99-rockchip-permissions.rules |
rockchip 设备节点权限 |
2.1.4 部署后效果验证
# ① ASYNC_COMMIT:期望 20 个 plane 全部 value: 1
modetest -M rockchip -a 2>&1 | grep -A3 'ASYNC_COMMIT' | grep 'value:' | sort | uniq -c
# → 20 value: 1
# ② Xorg FlipFB:期望出现 FlipFB: Always
grep 'FlipFB' /var/log/Xorg.0.log
# → (**) modeset(0): Option "FlipFB" "always"
# → (II) modeset(0): FlipFB: Always, limited to: -1 fps
# ③ glamor:期望 Mali-G52 硬件加速
grep 'glamor X acceleration' /var/log/Xorg.0.log
# → (II) modeset(0): glamor X acceleration enabled on Mali-G52
2.2 包构建方式
2.2.1 前置条件
- 3568 SDK 位于
/mnt/hdd/Witheart/3568SDK-5.10-226-hhj-260623/rk3568-5.10-226/3568/ - 主机装有
fakeroot和dpkg-deb(Debian/Ubuntu 自带)
2.2.2 构建脚本
#!/bin/bash
set -e
# 路径定义
SDK=/mnt/hdd/Witheart/3568SDK-5.10-226-hhj-260623/rk3568-5.10-226/3568
OVERLAY=$SDK/debian/overlay
MODETEST=$SDK/device/rockchip/common/tools/aarch64/modetest
PKG=/tmp/rk3568-overlay-pkg
OUT=/tmp/rk3568-kernel-5.10-overlayconf_1.0-2_arm64.deb
# 1. 初始化目录结构
rm -rf "$PKG"
mkdir -p "$PKG/DEBIAN" \
"$PKG/etc/init.d" "$PKG/etc/profile.d" \
"$PKG/etc/udev/rules.d" \
"$PKG/etc/X11/xorg.conf.d" "$PKG/etc/X11/Xsession.d" \
"$PKG/etc/systemd/system/multi-user.target.wants" \
"$PKG/usr/lib/systemd/system" "$PKG/usr/bin"
# 2. 复制 overlay 配置文件
cp -a "$OVERLAY/etc/init.d/S10atomic_commit.sh" "$PKG/etc/init.d/"
cp -a "$OVERLAY/etc/profile.d/." "$PKG/etc/profile.d/"
cp -a "$OVERLAY/etc/udev/rules.d/." "$PKG/etc/udev/rules.d/"
cp -a "$OVERLAY/etc/X11/xorg.conf.d/." "$PKG/etc/X11/xorg.conf.d/"
cp -a "$OVERLAY/etc/X11/Xsession.d/." "$PKG/etc/X11/Xsession.d/"
cp -a "$OVERLAY/usr/lib/systemd/system/async.service" "$PKG/usr/lib/systemd/system/"
# 3. 复制 modetest(S10 脚本依赖)
cp -a "$MODETEST" "$PKG/usr/bin/modetest"
# 4. 创建服务软链接(指向 /lib/systemd/system/async.service)
ln -s /lib/systemd/system/async.service \
"$PKG/etc/systemd/system/multi-user.target.wants/async.service"
# 5. 写 control 文件
cat > "$PKG/DEBIAN/control" << 'EOF'
Package: rk3568-kernel-5.10-overlayconf
Version: 1.0-2
Architecture: arm64
Maintainer: Witheart <[email protected]>
Section: x11
Priority: optional
Description: RK3568 GPU rendering acceleration desktop configuration and udev rules
RK3568 (Mali-G52) GPU accelerated desktop configuration overlay for
kernel 5.10 BSP.
.
Includes:
- X11 modesetting/glamor config (FlipFB, ASYNC_COMMIT) for tearing-free
GPU accelerated compositing
- modetest utility (required by S10atomic_commit.sh)
- profile.d environment (COGL_DRIVER=gles2, GST_GL_API=gles2,
QT_XCB_GL_INTEGRATION=xcb_egl, QtWebEngine GPU flags)
- async.service + multi-user.target.wants symlink to enable ASYNC_COMMIT
on all DRM planes at boot
- udev rules: rockchip device permissions, camera and pulseaudio
EOF
# 6. 修正权限与所有权(fakeroot 模拟 root)
fakeroot bash -c "
chmod 755 $PKG/etc/init.d/S10atomic_commit.sh $PKG/usr/bin/modetest
find $PKG -type f ! -name 'S10atomic_commit.sh' ! -name modetest -exec chmod 644 {} \;
find $PKG -type d -exec chmod 755 {} \;
chown -R root:root $PKG
"
# 7. 打包
fakeroot dpkg-deb --build "$PKG" "$OUT"
echo "构建完成: $OUT"
2.2.3 构建要点说明
| 步骤 | 注意 |
|---|---|
| 目录结构 | 必须按 etc/...、usr/... 相对路径,安装时才会落到 / 对应位置 |
| 软链接 | multi-user.target.wants/async.service 必须保留为绝对路径软链接(/lib/systemd/system/async.service),不能用 -a 解引用复制 |
| 权限 | 脚本 755、普通文件 644、目录 755、所有权 root:root |
| fakeroot | 普通用户无法 chown root,用 fakeroot 让 dpkg-deb 以 root 身份记录所有权 |
| 版本号 | 升级时递增 Version(如 1.0-2),dpkg 才能识别为升级 |
2.3 手动部署(等价效果)
不装 deb,手动达到相同效果。三步:复制文件 → 设置权限 → 启用服务。
2.3.1 复制文件
SDK=/mnt/hdd/Witheart/3568SDK-5.10-226-hhj-260623/rk3568-5.10-226/3568
OVERLAY=$SDK/debian/overlay
# X11 配置
sudo cp $OVERLAY/etc/X11/xorg.conf.d/20-modesetting.conf /etc/X11/xorg.conf.d/
sudo cp $OVERLAY/etc/X11/Xsession.d/36x11-common_xhost-root /etc/X11/Xsession.d/
sudo cp $OVERLAY/etc/X11/Xsession.d/98x11-common_env /etc/X11/Xsession.d/
# ASYNC_COMMIT 脚本 + modetest
sudo cp $OVERLAY/etc/init.d/S10atomic_commit.sh /etc/init.d/
sudo cp $SDK/device/rockchip/common/tools/aarch64/modetest /usr/bin/
# systemd 服务
sudo cp $OVERLAY/usr/lib/systemd/system/async.service /usr/lib/systemd/system/
# profile.d 环境变量
sudo cp $OVERLAY/etc/profile.d/*.sh /etc/profile.d/
# udev 规则
sudo cp $OVERLAY/etc/udev/rules.d/88-rockchip-camera.rules /etc/udev/rules.d/
sudo cp $OVERLAY/etc/udev/rules.d/90-pulseaudio-rockchip.rules /etc/udev/rules.d/
sudo cp $OVERLAY/etc/udev/rules.d/99-rockchip-permissions.rules /etc/udev/rules.d/
2.3.2 设置权限 + 启用服务
# 可执行权限
sudo chmod 755 /etc/init.d/S10atomic_commit.sh /usr/bin/modetest
# 启用 systemd 服务(生成 multi-user.target.wants 软链接,开机自启)
sudo systemctl daemon-reload
sudo systemctl enable async.service
# 立即设置 ASYNC_COMMIT(不等重启)
sudo /etc/init.d/S10atomic_commit.sh start
2.3.3 重启使 X 配置生效
sudo reboot
2.3.4 验证(与包部署完全一致)
modetest -M rockchip -a 2>&1 | grep -A3 'ASYNC_COMMIT' | grep 'value:' | sort | uniq -c
# → 20 value: 1
grep 'FlipFB' /var/log/Xorg.0.log
grep 'glamor X acceleration' /var/log/Xorg.0.log
留下评论