程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

Rockchip RK3588 - Mali-G610 GPU驱动(mesa+Panthor)

----------------------------------------------------------------------------------------------------------------------------

开发板 :ArmSoM-Sige7/NanoPC-T6开发板
eMMC64GB/256GB
LPDDR48GB/16GB
显示屏 :15.6英寸HDMI接口显示屏
u-boot2017.09
linux6.1
----------------------------------------------------------------------------------------------------------------------------

在两年前,我们介绍了如何移植ARM Mali GPU的开源驱动到NanoPC-T4RK3399)开发板,具体可以参考《Rockchip RK3399 - Mali-T860 GPU驱动 (mesa+Panfrost) 》。

今天呢,我们就来谈一谈如何将ARM Mali GPU开源驱动移植到ArmSoM-Sige7/NanoPC-T6RK3588)开发板。

一、GPU驱动回顾

ARM Mali GPU一般分为两部分:

  • 内核层GPU驱动:Mail GPU IP提供商ARM公司只开放了内核部分驱动,而且这部分驱动还没有按照linux kernel的规范以DRM的框架去实现,位于kernel/drivers/gpu/arm/bifrost/目录;
  • 用户层动态库:此外Userspace部分ARM没有开源,只是以库的形式提供给购买了Mali GPU授权的SoC厂商,官方提供的用户层动态库libmali.solibmali.so一般会有不同的版本(X11Wayland等),其提供了OpenGL ESEGLOpenCL接口;
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ll external/libmali/lib/aarch64-linux-gnu/
-rwxr-xr-x 1 root root 43370976  6月  9  2024 libmali-valhall-g610-g13p0-dummy.so*
-rwxr-xr-x 1 root root 43489296  6月  9  2024 libmali-valhall-g610-g13p0-gbm.so*
-rwxr-xr-x 1 root root 43513872  6月  9  2024 libmali-valhall-g610-g13p0-wayland-gbm.so*
-rwxr-xr-x 1 root root 43526160  6月  9  2024 libmali-valhall-g610-g13p0-x11-gbm.so*
-rwxr-xr-x 1 root root 43550736  6月  9  2024 libmali-valhall-g610-g13p0-x11-wayland-gbm.so*
......

注意:更多相关内容可以参考《Rockchip RK3588 - OpenCL环境搭建(官方GPU驱动)》。

ARM Mali GPU开源驱动,我们在《Rockchip RK3399 - Mali-T860 GPU驱动(mesa+Panfrost) 》中详细介绍过,其由两部分组成:

  • 内核层GPU驱动:
    • Lima驱动支持Utgard Mali GPUMali-400 / Mali-450 GPULinux 5.2+);
    • Panfrost驱动支持MidgardBifrostValhall Mali GPUMali-Gxx GPUMali-T6xx / Mali-T7xx / Mali-T8xx GPULinux 5.2+);
    • Panthor驱动为新一代的开源驱动,专门为未来基于ARM最新GPU架构(如Valhall和后续架构)的Mali GPU 而设计(Linux 6.10+);
  • 用户层动态库:Usersacpe部分的开源库叫做mesa,对Mali GPU的支持从mesa 19.2开始。

1.1 Panfrost

Panfrost是一个开源的自由及开放源代码软件(FOSS)图形驱动项目,旨在为ARM Mali系列GPU提供在Linux系统上的支持。它包含在Mesa 3D图形库中,是 Linux开源图形栈的核心组成部分。

Panfrost最初是通过对ARM Mali GPU的硬件行为和官方闭源驱动进行逆向工程而开发的。这是一个由社区推动的巨大成就。它支持多代Mali GPU架构:、

  • Midgard(例如Mali-T760, T860);
  • Bifrost(例如Mali-G31, G52);
  • Valhall(例如Mali-G57,G310):注意:对Valhall的早期支持是在Panfrost内开始的,但现在发展的重点已经转移到了Panthor上。

作为Mesa的一部分,Panfrost已经进入了几乎所有主要的Linux发行版。

Panfrost驱动程序栈包括基于MidgardBifrostValhalla 微架构的ARM Mali GPUOpenGL ES实现,目前支持以下硬件:

GPU Architecture Found in SoC Mesa version Notes
T600 Midgard (v4) Exynos 5250 25.1.4+
T620 Midgard (v4) Exynos 5420/5422/5430/5800 22.3+
T720 Midgard (v4) Exynos 7580, MT6735, and MT6753 20.0+
T760 Midgard (v5) RK3288 19.3+
T820 Midgard (v5) S912 19.3+
T830 Midgard (v5) Kirin 65x 22.0+
T860 Midgard (v5) RK3399 19.3+
T880 Midgard (v5) Kirin 95x and MediaTek Helio X20/X27 22.0+
G31 Bifrost (v7) Amlogic S905, RK3326 and Allwinner H616 SoC 20.3 kernel 5.10+
G51 Bifrost (v7) Kirin 710 22.0
G52 Bifrost (v7) Amlogic S922, RK3530, Kirin 810 and Helio P65/G70/G80/G85 20.3 kernel 5.10+
G52r1 Bifrost (v7) RK3566 and RK3568 21.2
G57 Valhall (v9) MediaTek MT8192 22.2+ kernel 5.20+
G72 Bifrost (v6) Exynos 7 9610, Exynos 9 9810, Helio P60/P70 and Kirin 970 20.3 kernel 5.10+
G76 Bifrost (v7) elio G90T/G95 22.0
G310 Valhall (v10) RK3688 25.1.4+ kernel 6.10+
G610 Valhall (v10) RK3588 25.1.4+ kernel 6.10+
G720 5th Gen (v12) 25.1+ kernel TBD - Requires patch series to be merged: https://lwn.net/Articles/1023522/
G725 5th Gen (v13) 25.1+ kernel TBD - Requires patch series to be merged: https://lwn.net/Articles/1023522/

1.2 Panthor

PanthorARM公司推出的Mali GPU开源驱动项目,主要用于替代传统闭源驱动,支持Linux系统下的OpenGLVulkan图形渲染。

  • 目标硬件:主要针对Valhall以及其后续架构,例如瑞芯微、全志等国产芯片方案中集成的Mali GPU(例如Mali-G31Mali-G52Mali-G710等);
  • 驱动类型:它是一个完全开源、符合现代Linux内核标准的GPU驱动。

Panthor目前处于积极开发阶段,它在Linux 6.10版本中引入。在最新的Linux内核和Mesa版本中,它已经提供了基本的功能(2D/3D 加速),并且性能和改进正在快速推进。

1.3 区别

我们来详细解释一下PanthorPanfrost这两个与ARM Mali GPU相关的开源驱动程序。

简单来说:

  • Panfrost是现有的、已经成熟的开源驱动,支持从较旧到较新的多代Mali GPUPanfrost已经非常成熟和稳定,对于MidgardBifrost架构的GPU,它提供了优秀的日常使用体验和良好的性能。对于早期的Valhall GPU,它也能提供基本功能,但更高级的功能和优化正在Panthor中实现;
  • Panthor是新一代的开源驱动,专门为未来基于ARM最新GPU架构(如Valhall和后续架构)的Mali GPU 而设计;
    • Panthor是继Panfrost之后的新一代开源GPU驱动,同样集成在Mesa中;
    • Panthor并非完全取代Panfrost,对于MidgardBifrost GPUPanfrost仍然是主要且推荐的驱动,Panthor是为新硬件准备的“接班人”。

为什么需要Panthor

  • 随着GPU架构从Bifrost演进到Valhall,硬件的工作方式和特性发生了显著变化。继续在旧的Panfrost驱动代码上修修补补来支持新硬件会变得非常低效和混乱。因此,驱动开发者决定“另起炉灶”:
  • 更清晰的代码结构:Panthor从头开始设计,代码库更干净、更模块化,便于维护和为新硬件添加支持;
  • 利用现代GPU特性:Valhall架构引入了新的着色器核心、新的指令集和新的内存管理单元(MMU)。Panthor能够更好地利用这些特性,以实现更高的性能和更低的功耗。
  • 支持新功能:例如Vulkan 1.3 API的支持是Panthor的一个关键目标。虽然Panfrost主要专注于OpenGL ES,但Panthor旨在同时提供高质量的Vulkan OpenGL ES支持。
  • 统一内存管理:Panthor引入了更现代和高效的GPU内存管理方法,这对于性能和多任务处理至关重要。

二、NanoPC-T6 GPU驱动移植

2.1 准备工作

2.1.1 下载sd-fuse_rk3588

我们在《Rockchip RK3588 - 移植uboot 2017.09 & linux 6.1》介绍了如何编译适用于NanoPC-T6开发板的固件。由于我本地代码是2年前拉取的,到2025年已经两年多了,仓库的代码也提交了许多,因此这里将源码删除了重新下载了。

编译使用的SDK源码如下:

root@ubuntu:/work/sambashare/rk3588/friendly# git clone https://github.com/friendlyarm/sd-fuse_rk3588.git --single-branch -b kernel-6.1.y

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll
-rwxr-xr-x  1 root root     1137 11月  8 20:07 build-boot-img.sh
-rwxr-xr-x  1 root root    12433 11月  8 23:11 build-kernel.sh
-rwxr-xr-x  1 root root     7769 11月  8 20:07 build-rootfs-img.sh
-rwxr-xr-x  1 root root     4265 11月  8 20:07 build-uboot.sh
-rwxr-xr-x  1 root root       39 11月  8 20:07 clean.sh
drwxr-xr-x  3 root root     4096 11月  8 20:07 files/
-rwxr-xr-x  1 root root     3677 11月  8 20:07 fusing.sh
-rw-r--r--  1 root root      599 11月  8 20:07 .gitignore
-rwxr-xr-x  1 root root     3215 11月  8 20:07 mk-emmc-image.sh
-rwxr-xr-x  1 root root     5834 11月  8 20:07 mk-sd-image.sh
drwxr-xr-x 14 root root     4096 11月  8 23:27 out/
drwxr-xr-x  4 root root     4096 11月  8 23:33 prebuilt/
-rw-r--r--  1 root root    12790 11月  8 20:07 README_cn.md
-rw-r--r--  1 root root    13176 11月  8 20:07 README.md
drwxr-xr-x  3 root root     4096 11月  8 20:07 test/
drwxr-xr-x  3 root root     4096 11月  8 23:31 tools/

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# git log -n 1
commit 6700e2bcf7ba23037ba59eee918f77c8580fbe75 (HEAD -> kernel-6.1.y, origin/kernel-6.1.y, origin/HEAD)
Author: Lawrence-Tang <tangzongsheng@gmail.com>
Date:   Mon Sep 8 14:10:02 2025 +0800

    update readme
2.1.2 下载固件

系统镜像,这里我们以debian-bullseye-desktop-arm64为例,下载地址:https://download.friendlyelec.com/NanoPC-T6

debian-bullseye-desktop-arm64-images.tgz(位于"\03_分区镜像文件"目录下,以实际下载的文件为准)拷贝到/work/sambashare/rk3588/friendly/sd-fuse_rk3588目录下;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll debian*
-rw-r--r-- 1 root root 1777656242 11月  9 09:30 debian-bullseye-desktop-arm64-images.tgz
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# tar -xvzf debian-bullseye-desktop-arm64-images.tgz

解压得到debian-bullseye-desktop-arm64文件夹;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll debian-bullseye-desktop-arm64
-rw-r--r--  1 root root    7945164  8月 10 23:04 boot.img
-rw-r--r--  1 root root       1424  5月 28  2023 dtbo.img
-rw-r--r--  1 root root     331776  1月  9  2025 idbloader.img
-rw-r--r--  1 root root         62 10月 10 15:08 info.conf
-rw-r--r--  1 root root   35911700  8月  7 15:06 kernel.img
-rw-r--r--  1 root root     487872  1月  9  2025 MiniLoaderAll.bin
-rw-r--r--  1 root root      49152  5月 28  2023 misc.img
-rw-r--r--  1 root root        470 10月 10 15:08 parameter.txt
-rw-r--r--  1 root root    8446976  8月  7 15:06 resource.img
-rw-r--r--  1 root root 4264674256 10月 10 15:08 rootfs.img
-rw-r--r--  1 root root    4194304  7月 21 14:38 uboot.img
-rw-r--r--  1 root root     159868 10月 10 15:08 userdata.img
2.1.3 安装交叉编译工具

下载交叉编辑工具:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# wget https://github.com/friendlyarm/prebuilts/blob/master/gcc-x64/toolchain-11.3-aarch64.tar.xz
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# tar xvf toolchain-11.3-aarch64.tar.xz -C /

默认安装到/opt/FriendlyARM/toolchain/11.3-aarch64/

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll /opt/FriendlyARM/toolchain/11.3-aarch64/
dr-xr-xr-x 8 root root 4096 12月  6  2022 aarch64-cortexa53-linux-gnu/
dr-xr-xr-x 2 root root 4096 12月  6  2022 bin/
dr-xr-xr-x 2 root root 4096 12月  6  2022 include/
dr-xr-xr-x 4 root root 4096 12月  6  2022 lib/
dr-xr-xr-x 3 root root 4096 12月  6  2022 libexec/
dr-xr-xr-x 5 root root 4096 12月  6  2022 share/
2.1.4 下载内核

下载内核源代码:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# git clone https://github.com/friendlyarm/kernel-rockchip --depth 1 -b nanopi6-v6.1.y kernel-rk3588

查看提交历史(由于--depth 1,只有一条记录);

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# git log
commit 4944602540b62f5aad139fe602a76cf7c3176128 (grafted, HEAD -> nanopi6-v6.1.y, origin/nanopi6-v6.1.y, origin/HEAD)
Author: Jon Lin <jon.lin@rock-chips.com>
Date:   Mon Apr 28 10:12:42 2025 +0800

    arm64: dts: rockchip: rk3588: Add clk PCLK_PHP_ROOT to pcie30phy

    Configure pcie30phy phy_grf with clk PCLK_PHP_ROOT on.

    Change-Id: Ie3f9fa78aaf7b1098450ade48e6f0c9f09725869
    Signed-off-by: Jon Lin <jon.lin@rock-chips.com>
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3

注意:该仓库代码是forked from https://github.com/rockchip-linux/kernel

我们来看一下nanopi6-v6.1.y 分支的代码是否已经移植了Panthor源码,我们切换到目录drivers/gpu/drm目录查看是否存在子目录panthor,可以看到是没有;

2.1.5 内核配置和设备树

NanoPC-T6开发板内核编译使用的板级配置是nanopi6_linux_defconfig,该文件位于arch/arm64/configs目录下;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# ll arch/arm64/configs/nanopi6_linux_defconfig
-rw-r--r-- 1 root root 46618 11月  8 17:03 arch/arm64/configs/nanopi6_linux_defconfig

由于配置文件有近2000行,具体可以查看:nanopi6_linux_defconfig

该开发板使用的设备树是rk3588-nanopi6-rev01.dt,位于arch/arm64/boot/dts/rockchip目录下;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# ll arch/arm64/boot/dts/rockchip/rk3588-nanopi6-rev01.dts
-rw-r--r-- 1 root root 16387 11月  8 17:03 arch/arm64/boot/dts/rockchip/rk3588-nanopi6-rev01.dts
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# vim arch/arm64/boot/dts/rockchip/rk3588-nanopi6-rev01.dts

// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2022 FriendlyElec Computer Tech. Co., Ltd.
 * (http://www.friendlyelec.com)
 */

/dts-v1/;

#include "rk3588.dtsi"
#include "rk3588-nanopi6-common.dtsi"

/ {
        model = "FriendlyElec NanoPC-T6";
        compatible = "friendlyelec,nanopc-t6", "rockchip,rk3588";

        aliases {
                ethernet0 = &r8125_u10;
                ethernet1 = &r8125_u12;
        };

......

可以看到设备树引用了rk3588.dtsirk3588-nanopi6-common.dtsi文件,具体可以查看:rk3588-nanopi6-rev01.dt

rk3588-nanopi6-common.dtsi文件又引入了如下文件;

// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2022 FriendlyElec Computer Tech. Co., Ltd.
 * (http://www.friendlyelec.com)
 *
 * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
 */

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pwm/pwm.h>
#include <dt-bindings/pinctrl/rockchip.h>
#include <dt-bindings/input/rk-input.h>
#include <dt-bindings/display/drm_mipi_dsi.h>
#include <dt-bindings/display/rockchip_vop.h>
#include <dt-bindings/sensor-dev.h>
#include <dt-bindings/usb/pd.h>
#include "rk3588s.dtsi"
#include "rk3588-android.dtsi"
#include "rk3588-rk806-single.dtsi"

/ {
        model = "FriendlyElec boards based on Rockchip RK3588";
        compatible = "friendlyelec,nanopi6",
                     "rockchip,rk3588";
......

这里我们主要记住这个文件rk3588-rk806-single.dtsi,后面会使用到。

2.2 Panthor源码移植

由于Panthor是基于Linux内核6.10版发布的,因此在将其移植到Linux 6.1时需要对drm驱动程序进行一些调整。

Panthor代码(https://github.com/jacobchencc/panthor-linux6.1)是从Panfrost freedesktop项目的Linux存储库panthor-next+rk3588分支获得的;

https://gitlab.freedesktop.org/panfrost/linux.git

这里我们在github找到了可以直接使用的源码;

root@ubuntu:/work/sambashare/rk3588/friendly# git clone https://github.com/jacobchencc/panthor-linux6.1.git

这里我们主要看一下panthor-linux6.1仓库的代码做了哪些变更;

root@ubuntu:/work/sambashare/rk3588/friendly# cd panthor-linux6.1
root@ubuntu:/work/sambashare/rk3588/friendly/panthor-linux6.1# git log --oneline --grep=panthor --name-only > panthor_commits.txt
root@ubuntu:/work/sambashare/rk3588/friendly/panthor-linux6.1# cat panthor_commits.txt
e0a632d panthor for develop-6.1
arch/arm64/boot/dts/rockchip/rk3588-rk806-dual.dtsi   # 变更
arch/arm64/boot/dts/rockchip/rk3588s.dtsi             # 变更
arch/arm64/configs/rk3588_linux.config                # 变更 
drivers/gpu/drm/Kconfig                               # 变更  
drivers/gpu/drm/Makefile                              # 变更
drivers/gpu/drm/drm_debugfs.c                         # 变更
drivers/gpu/drm/drm_exec.c                            # 新增 
drivers/gpu/drm/drm_gem.c                             # 变更
drivers/gpu/drm/drm_gpuvm.c                           # 新增  
drivers/gpu/drm/panthor/Kconfig                # 新增
drivers/gpu/drm/panthor/Makefile               # 新增 
drivers/gpu/drm/panthor/panthor_devfreq.c      # 新增 
drivers/gpu/drm/panthor/panthor_devfreq.h      # 新增
drivers/gpu/drm/panthor/panthor_device.c       # 新增 
drivers/gpu/drm/panthor/panthor_device.h       # 新增
drivers/gpu/drm/panthor/panthor_drv.c          # 新增 
drivers/gpu/drm/panthor/panthor_fw.c           # 新增  
drivers/gpu/drm/panthor/panthor_fw.h           # 新增 
drivers/gpu/drm/panthor/panthor_gem.c          # 新增  
drivers/gpu/drm/panthor/panthor_gem.h          # 新增
drivers/gpu/drm/panthor/panthor_gpu.c          # 新增 
drivers/gpu/drm/panthor/panthor_gpu.h          # 新增
drivers/gpu/drm/panthor/panthor_heap.c         # 新增
drivers/gpu/drm/panthor/panthor_heap.h         # 新增
drivers/gpu/drm/panthor/panthor_mmu.c          # 新增
drivers/gpu/drm/panthor/panthor_mmu.h          # 新增 
drivers/gpu/drm/panthor/panthor_regs.h         # 新增
drivers/gpu/drm/panthor/panthor_sched.c        # 新增
drivers/gpu/drm/panthor/panthor_sched.h        # 新增
include/drm/drm_debugfs.h         # 变更           
include/drm/drm_drv.h             # 变更
include/drm/drm_exec.h            # 新增
include/drm/drm_gem.h             # 变更  
include/drm/drm_gpuvm.h           # 新增
include/uapi/drm/panthor_drm.h    # 新增
2.2.1 rk3588s.dtsi文件修改

比较arch/arm64/boot/dts/rockchip/rk3588s.dtsi文件差异,这里我们只关注GPU差异部分;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# diff arch/arm64/boot/dts/rockchip/rk3588s.dtsi /work/sambashare/rk3588/friendly/panthor-linux6.1/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
......

由于比较出来差异较多,包含cluster1_opp_tablecluster2_opp_tabledmc_opp_tablegpu_opp_tablegpu: gpu@fb000000等节点;

为了简单方便我们直接覆盖源文件;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/arch/arm64/boot/dts/rockchip/rk3588s.dtsi arch/arm64/boot/dts/rockchip/
2.2.2 rk3588-rk806-single.dtsi文件修改

比较arch/arm64/boot/dts/rockchip/rk3588-rk806-dual.dtsi文件差异:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# diff arch/arm64/boot/dts/rockchip/rk3588-rk806-dual.dtsi /work/sambashare/rk3588/friendly/panthor-linux6.1/arch/arm64/boot/dts/rockchip/rk3588-rk806-dual.dtsi
152c152
<                               regulator-boot-on;
---
>                               regulator-always-on;
159c159
<                                       regulator-off-in-suspend;
---
>                                       regulator-always-on;
201c201
<                               regulator-boot-on;
---
>                               regulator-always-on;
208c208
<                                       regulator-off-in-suspend;
---
>                                       regulator-always-on;
535d534
<                               regulator-init-microvolt = <800000>;
548d546
<                               regulator-init-microvolt = <800000>;
561d558
<                               regulator-init-microvolt = <800000>;
586d582
<                               regulator-init-microvolt = <800000>;
600d595
<                               regulator-init-microvolt = <800000>;
625d619
<                               regulator-init-microvolt = <800000>;

这里涉及变更的节点就是vdd_gpu_s0vdd_gpu_mem_s0

vdd_gpu_s0: DCDC_REG1 {
		regulator-always-on; # 从regulator-boot-on修改成这个
		regulator-min-microvolt = <550000>;
		regulator-max-microvolt = <950000>;
		regulator-ramp-delay = <12500>;
		regulator-name = "vdd_gpu_s0";   
		regulator-enable-ramp-delay = <400>;
		regulator-state-mem {
				regulator-always-on; # 从regulator-off-in-suspend修改成这个
		};
};

vdd_gpu_mem_s0: DCDC_REG5 {
		regulator-always-on;  # 从regulator-boot-on修改成这个
		regulator-min-microvolt = <675000>;
		regulator-max-microvolt = <950000>;
		regulator-ramp-delay = <12500>;
		regulator-enable-ramp-delay = <400>;
		regulator-name = "vdd_gpu_mem_s0";
		regulator-state-mem {
				regulator-always-on;  # 从regulator-off-in-suspend修改成这个
		};
};

这里提一下第一处修改regulator-boot-on->regulator-always-on

  • regulator-boot-on:只在系统启动时自动开启GPU电源,启动完成后可能会根据负载情况自动关闭;
  • regulator-always-on:强制GPU电源始终开启,无论系统处于什么状态。

第二处修改regulator-off-in-suspend->regulator-always-on

  • regulator-off-in-suspend:系统进入休眠(suspend)状态时关闭GPU电源;

  • regulator-always-on:系统进入休眠状态时保持GPU电源开启。

对于我们使用的NanopC-T6开发板来说vdd_gpu_s0vdd_gpu_mem_s0节点定义在文件rk3588-rk806-single.dtsi

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# vim arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi
.......
vdd_gpu_s0: vdd_gpu_mem_s0: DCDC_REG1 {
		regulator-always-on;
		regulator-min-microvolt = <550000>;
		regulator-max-microvolt = <950000>;
		regulator-ramp-delay = <12500>;
		regulator-name = "vdd_gpu_s0";
		regulator-enable-ramp-delay = <400>;
		regulator-state-mem {
				regulator-always-on;
		};
};
.......

这行代码定义了两个标签指向同一个节点,以用两个不同的名称(vdd_gpu_s0vdd_gpu_mem_s0)来访问和配置同一个电源调节器(DCDC_REG1)。

2.2.3 nanopi6_linux_defconfig文件修改

比较arch/arm64/configs/rk3588_linux.config文件差异;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# diff arch/arm64/configs/rk3588_linux.config /work/sambashare/rk3588/friendly/panthor-linux6.1/arch/arm64/configs/rk3588_linux.config
3a4,6
> CONFIG_DRM_PANTHOR=y
> CONFIG_EXTRA_FIRMWARE="mali_csffw.bin"
> CONFIG_EXTRA_FIRMWARE_DIR="./firmware"

注意这里通过CONFIG_EXTRA_FIRMWARE_DIR指定了CSF固件的位置。

我们在arch/arm64/configs/nanopi6_linux_defconfig文件最后添加;

CONFIG_DRM_PANTHOR=y
CONFIG_EXTRA_FIRMWARE="mali_csffw.bin"
CONFIG_EXTRA_FIRMWARE_DIR="./firmware"
2.2.4 drivers/gpu/drm/Kconfig文件修改

比较drivers/gpu/drm/Kconfig文件差异:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# diff drivers/gpu/drm/Kconfig /work/sambashare/rk3588/friendly/panthor-linux6.1/drivers/gpu/drm/Kconfig
417a418,419
> source "drivers/gpu/drm/panthor/Kconfig"
>

我们在drivers/gpu/drm/Kconfig文件添加;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# vim drivers/gpu/drm/Kconfig

source "drivers/gpu/drm/panthor/Kconfig"
2.2.5 drivers/gpu/drm/Makefile文件修改

比较drivers/gpu/drm/Makefile文件差异:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# diff drivers/gpu/drm/Makefile /work/sambashare/rk3588/friendly/panthor-linux6.1/drivers/gpu/drm/Makefile
22c22,23
<               drm_managed.o drm_vblank_work.o
---
>               drm_managed.o drm_vblank_work.o \
>               drm_exec.o drm_gpuvm.o
143a145
> obj-$(CONFIG_DRM_PANTHOR) += panthor/

我们在drivers/gpu/drm/Makefile文件添加;

# 22行替换成
                drm_managed.o drm_vblank_work.o \
                drm_exec.o drm_gpuvm.o
# 144行新增
obj-$(CONFIG_DRM_PANTHOR) += panthor/
2.2.6 drm_debugfs文件修改

比较drivers/gpu/drm/drm_debugfs文件差异:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# diff drivers/gpu/drm/drm_debugfs.c /work/sambashare/rk3588/friendly/panthor-linux6.1/drivers/gpu/drm/drm_debugfs.c
162a163,200
> /**
>  * drm_debugfs_gpuva_info - dump the given DRM GPU VA space
>  * @m: pointer to the &seq_file to write
>  * @gpuvm: the &drm_gpuvm representing the GPU VA space
>  *
>  * Dumps the GPU VA mappings of a given DRM GPU VA manager.
>  *
>  * For each DRM GPU VA space drivers should call this function from their
>  * &drm_info_list's show callback.
>  *
>  * Returns: 0 on success, -ENODEV if the &gpuvm is not initialized
>  */
> int drm_debugfs_gpuva_info(struct seq_file *m,
>                struct drm_gpuvm *gpuvm)
> {
>     struct drm_gpuva *va, *kva = &gpuvm->kernel_alloc_node;
>
>     if (!gpuvm->name)
>         return -ENODEV;
>
>     seq_printf(m, "DRM GPU VA space (%s) [0x%016llx;0x%016llx]\n",
>            gpuvm->name, gpuvm->mm_start, gpuvm->mm_start + gpuvm->mm_range);
>     seq_printf(m, "Kernel reserved node [0x%016llx;0x%016llx]\n",
>            kva->va.addr, kva->va.addr + kva->va.range);
>     seq_puts(m, "\n");
>     seq_puts(m, " VAs | start              | range              | end                | object             | object offset\n");
>     seq_puts(m, "-------------------------------------------------------------------------------------------------------------\n");
>     drm_gpuvm_for_each_va(va, gpuvm) {
>         if (unlikely(va == kva))
>             continue;
>
>         seq_printf(m, "     | 0x%016llx | 0x%016llx | 0x%016llx | 0x%016llx | 0x%016llx\n",               va->va.addr, va->va.range, va->va.addr + va->va.range,
>                (u64)(uintptr_t)va->gem.obj, va->gem.offset);
>     }
>
>     return 0;
> }
> EXPORT_SYMBOL(drm_debugfs_gpuva_info);

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# diff include/drm/drm_debugfs.h /work/sambashare/rk3588/friendly/panthor-linux6.1/include/drm/drm_debugfs.h

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588#  diff include/drm/drm_debugfs.h /work/sambashare/rk3588/friendly/panthor-linux6.1/include/drm/drm_debugfs.h
36a37,52
>
> #include <drm/drm_gpuvm.h>
>
> /**
>  * DRM_DEBUGFS_GPUVA_INFO - &drm_info_list entry to dump a GPU VA space
>  * @show: the &drm_info_list's show callback
>  * @data: driver private data
>  *
>  * Drivers should use this macro to define a &drm_info_list entry to provide a
>  * debugfs file for dumping the GPU VA space regions and mappings.
>  *
>  * For each DRM GPU VA space drivers should call drm_debugfs_gpuva_info() from
>  * their @show callback.
>  */
> #define DRM_DEBUGFS_GPUVA_INFO(show, data) {"gpuvas", show, DRIVER_GEM_GPUVA, data}
>
87a104,105
> int drm_debugfs_gpuva_info(struct seq_file *m,
>                struct drm_gpuvm *gpuvm);
99,100d116
< #endif
<
105a122
> #endif

可以看到新增了drm_debugfs_gpuva_info函数,为了简单方便我们直接覆盖源文件;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/drivers/gpu/drm/drm_debugfs.c drivers/gpu/drm/
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/include/drm/drm_debugfs.h include/drm/
2.2.7 drm_gem文件修改

比较drivers/gpu/drm/drm_gem文件差异:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# diff drivers/gpu/drm/drm_gem.c /work/sambashare/rk3588/friendly/panthor-linux6.1/drivers/gpu/drm/drm_gem.c
166a167,169
>       if (drm_core_check_feature(dev, DRIVER_GEM_GPUVA))
>               drm_gem_gpuva_init(obj);
>
1050c1053
<               vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP);
---
>               vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP;
1185a1189,1208
>
> int drm_gem_vmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map)
> {
>     int ret;
>
>     dma_resv_lock(obj->resv, NULL);
>     ret = drm_gem_vmap(obj, map);
>     dma_resv_unlock(obj->resv);
>
>     return ret;
> }
> EXPORT_SYMBOL(drm_gem_vmap_unlocked);
>
> void drm_gem_vunmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map)
> {
>     dma_resv_lock(obj->resv, NULL);
>     drm_gem_vunmap(obj, map);
>     dma_resv_unlock(obj->resv);
> }
> EXPORT_SYMBOL(drm_gem_vunmap_unlocked);

可以看到都是新增的,为了简单方便我们直接覆盖源文件;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/drivers/gpu/drm/drm_gem.c drivers/gpu/drm/
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/include/drm/drm_gem.h include/drm/

然后修改drivers/gpu/drm/drm_gem.c文件,第1053行:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# vim drivers/gpu/drm/drm_gem.c
    
vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP);
// vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP;
2.2.8 include/drm/drm_drv.h 文件修改

比较include/drm/drm_drv.h文件差异:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# diff include/drm/drm_drv.h /work/sambashare/rk3588/friendly/panthor-linux6.1/include/drm/drm_drv.h
96a97,119
>     /**
>      * @DRIVER_COMPUTE_ACCEL:
>      *
>      * Driver supports compute acceleration devices. This flag is mutually exclusive with
>      * @DRIVER_RENDER and @DRIVER_MODESET. Devices that support both graphics and compute
>      * acceleration should be handled by two drivers that are connected using auxiliary bus.
>      */
>     DRIVER_COMPUTE_ACCEL            = BIT(7),
>     /**
>      * @DRIVER_GEM_GPUVA:
>      *
>      * Driver supports user defined GPU VA bindings for GEM objects.
>      */
>     DRIVER_GEM_GPUVA        = BIT(8),
>     /**
>      * @DRIVER_CURSOR_HOTSPOT:
>      *
>      * Driver supports and requires cursor hotspot information in the
>      * cursor plane (e.g. cursor plane has to actually track the mouse
>      * cursor and the clients are required to set hotspot in order for
>      * the cursor planes to work correctly).
>      */
>     DRIVER_CURSOR_HOTSPOT           = BIT(9),

可以看到都是新增的,为了简单方便我们直接覆盖源文件;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/include/drm/drm_drv.h include/drm/
2.2.9 新增部分

新增的文件有:

  • drivers/gpu/drm/drm_exec.cinclude/drm/drm_exec.h
  • drivers/gpu/drm/drm_gpuvm.cinclude/drm/drm_gpuvm.h
  • include/uapi/drm/panthor_drm.h以及drivers/gpu/drm/panthor目录源码。

拷贝新增文件:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/drivers/gpu/drm/drm_exec.c drivers/gpu/drm/
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/include/drm/drm_exec.h include/drm/
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/drivers/gpu/drm/drm_gpuvm.c drivers/gpu/drm/
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/include/drm/drm_gpuvm.h include/drm/
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/include/uapi/drm/panthor_drm.h include/uapi/drm/

Pathor源码部分合并进来:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp -r /work/sambashare/rk3588/friendly/panthor-linux6.1/drivers/gpu/drm/panthor ./drivers/gpu/drm/
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# ll drivers/gpu/drm/panthor/
-rw-r--r--  1 root root   698 11月  8 18:26 Kconfig
-rw-r--r--  1 root root   258 11月  8 18:26 Makefile
-rw-r--r--  1 root root  7592 11月  8 18:26 panthor_devfreq.c
-rw-r--r--  1 root root   579 11月  8 18:26 panthor_devfreq.h
-rw-r--r--  1 root root 15155 11月  8 18:26 panthor_device.c
-rw-r--r--  1 root root 12067 11月  8 18:26 panthor_device.h
-rw-r--r--  1 root root 38936 11月  8 18:26 panthor_drv.c
-rw-r--r--  1 root root 39248 11月  8 18:26 panthor_fw.c
-rw-r--r--  1 root root 14358 11月  8 18:26 panthor_fw.h
-rw-r--r--  1 root root  6344 11月  8 18:26 panthor_gem.c
-rw-r--r--  1 root root  3356 11月  8 18:26 panthor_gem.h
-rw-r--r--  1 root root 13804 11月  8 18:26 panthor_gpu.c
-rw-r--r--  1 root root  1660 11月  8 18:26 panthor_gpu.h
-rw-r--r--  1 root root 15538 11月  8 18:26 panthor_heap.c
-rw-r--r--  1 root root  1122 11月  8 18:26 panthor_heap.h
-rw-r--r--  1 root root 74877 11月  8 18:26 panthor_mmu.c
-rw-r--r--  1 root root  3785 11月  8 18:26 panthor_mmu.h
-rw-r--r--  1 root root  8316 11月  8 18:26 panthor_regs.h
-rw-r--r--  1 root root 99414 11月  8 18:26 panthor_sched.c
-rw-r--r--  1 root root  1848 11月  8 18:26 panthor_sched.h

修改文件drivers/gpu/drm/panthor/panthor_device.c398行;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# vim drivers/gpu/drm/panthor/panthor_device.c

vm_flags_set(vma, VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_NORESERVE | VM_DONTDUMP | VM_PFNMAP);
// vma->vm_flags |=
//             VM_IO | VM_DONTCOPY | VM_DONTEXPAND |
//             VM_NORESERVE | VM_DONTDUMP | VM_PFNMAP;

2.3 CSF固件移植

下载Mali-G610 firmware镜像文件mali_csffw.binMali-G610 CSF固件从以下存储库获取:

root@ubuntu:/work/sambashare/rk3588/friendly# git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux-firmware.git
root@ubuntu:/work/sambashare/rk3588/friendly# cd linux-firmware
root@ubuntu:/work/sambashare/rk3588/friendly/linux-firmware# ll arm/mali/
drwxr-xr-x 2 root root 4096 11月  5 23:16 arch10.10/
drwxr-xr-x 2 root root 4096 11月  5 23:16 arch10.12/
drwxr-xr-x 2 root root 4096 11月  5 23:16 arch10.8/
drwxr-xr-x 2 root root 4096 11月  5 23:16 arch11.8/
drwxr-xr-x 2 root root 4096 11月  5 23:16 arch12.8/
drwxr-xr-x 2 root root 4096 11月  5 23:16 arch13.8/

由于ARM Mali G610属于Valhall (v10),因此我们这里使用arch10.8Mali Arch 10.8 );

root@ubuntu:/work/sambashare/rk3588/friendly/linux-firmware# ll arm/mali/arch10.8/
-rw-r--r-- 1 root root 282624 11月  5 23:16 mali_csffw.bin

mali_csffw.binMali GPU的微控制器固件,用于GPU调度和命令处理。

拷贝到linux-6.1内核源码以下位置后,编译内核镜像。

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# mkdir ./kernel-rk3588/firmware
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# cp ../linux-firmware/arm/mali/arch10.8/mali_csffw.bin ./kernel-rk3588/firmware/

当然我们也可以直接使用panthor-linux6.1库中的固件;

root@ubuntu:/work/sambashare/rk3588/friendly/panthor-linux6.1# ll firmware/
-rwxr-xr-x 1 root root 274432 11月  5 22:20 mali_csffw.bin
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# cp /work/sambashare/rk3588/friendly/panthor-linux6.1/firmware/mali_csffw.bin ./kernel-rk3588/firmware/

2.4 编译内核

执行编译内核命令,编译完成后会自动更新debian-bullseye-desktop-arm64目录下的相关镜像文件,包括文件系统中的内核模块 (rootfs.img会被解包并重新打包,即更新/lib/modules下的驱动模块);

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# KERNEL_SRC=$PWD/kernel-rk3588 ./build-kernel.sh debian-bullseye-desktop-arm64
kernel src: /work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588
using official logo.
using official kernel logo.
  CLEAN   arch/arm64/boot
  CLEAN   arch/arm64/crypto
  CLEAN   arch/arm64/kernel/pi
  CLEAN   arch/arm64/kernel/vdso
  CLEAN   arch/arm64/kernel
  CLEAN   certs
  CLEAN   drivers/base/firmware_loader/builtin
  CLEAN   drivers/misc/lkdtm
  CLEAN   drivers/scsi
  CLEAN   drivers/tty/vt
  CLEAN   fs/unicode
  CLEAN   init
  CLEAN   kernel
  CLEAN   lib/raid6
  CLEAN   lib
  CLEAN   net/wireless
  CLEAN   security/apparmor
  CLEAN   security/selinux
  CLEAN   usr
  CLEAN   .
  CLEAN   kernel.img resource.img vmlinux.symvers modules.builtin modules.builtin.modinfo .vmlinux.objs .vmlinux.export.c
  CLEAN   scripts/basic
  CLEAN   scripts/dtc
  CLEAN   scripts/genksyms
  CLEAN   scripts/kconfig
  CLEAN   scripts/mod
  CLEAN   scripts/selinux/genheaders
  CLEAN   scripts/selinux/mdp
  CLEAN   scripts
  CLEAN   include/config include/generated arch/arm64/include/generated .config .version Module.symvers
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
Using .config as base
Merging ./arch/arm64/configs/kvm.config
Value of CONFIG_KEXEC is redefined by fragment ./arch/arm64/configs/kvm.config:
Previous value: # CONFIG_KEXEC is not set
New value: CONFIG_KEXEC=y

Value of CONFIG_KEXEC_FILE is redefined by fragment ./arch/arm64/configs/kvm.config:
Previous value: # CONFIG_KEXEC_FILE is not set
New value: CONFIG_KEXEC_FILE=y

......

#
# merged configuration written to .config (needs make)
#
#
# configuration written to .config
#
  SYNC    include/config/auto.conf.cmd
  HOSTCC  arch/arm64/tools/gen-hyprel
  WRAP    arch/arm64/include/generated/uapi/asm/kvm_para.h
  WRAP    arch/arm64/include/generated/uapi/asm/errno.h
  WRAP    arch/arm64/include/generated/uapi/asm/ioctl.h
  WRAP    arch/arm64/include/generated/uapi/asm/ioctls.h
  WRAP    arch/arm64/include/generated/uapi/asm/ipcbuf.h
  WRAP    arch/arm64/include/generated/uapi/asm/msgbuf.h
  WRAP    arch/arm64/include/generated/uapi/asm/poll.h
  WRAP    arch/arm64/include/generated/uapi/asm/resource.h
  WRAP    arch/arm64/include/generated/uapi/asm/sembuf.h
  WRAP    arch/arm64/include/generated/uapi/asm/shmbuf.h
  WRAP    arch/arm64/include/generated/uapi/asm/siginfo.h
  WRAP    arch/arm64/include/generated/uapi/asm/socket.h
  WRAP    arch/arm64/include/generated/uapi/asm/sockios.h
......
  Image:  resource.img (with rk3*-nanopi*-rev*.dtb logo.bmp logo_kernel.bmp) is ready
  MODPOST vmlinux.symvers
  Image:  kernel.img is ready
  CALL    scripts/checksyscalls.sh
  CHK     kernel/kheaders_data.tar.xz
  GEN     vmlinux.symvers
  INSTALL /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/kernel/arch/arm64/crypto/poly1305-neon.ko
  STRIP   /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/kernel/arch/arm64/crypto/poly1305-neon.ko
  INSTALL /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/kernel/arch/arm64/crypto/sha3-ce.ko
  STRIP   /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/kernel/arch/arm64/crypto/sha3-ce.ko
  INSTALL /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/kernel/arch/arm64/crypto/sm3-ce.ko
  STRIP   /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/kernel/arch/arm64/crypto/sm3-ce.ko
  INSTALL /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/kernel/arch/arm64/crypto/sm4-ce-cipher.ko
  STRIP   /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/kernel/arch/arm64/crypto/sm4-ce-cipher.ko
  INSTALL /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/kernel/arch/arm64/crypto/sm4-neon.ko
  STRIP   /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/kernel/arch/arm64/crypto/sm4-neon.ko
......
********************************************************************************
*  Building module - rtl8812au.ko for FriendlyARM boards
*
*    Kernel TOP-Dir: /work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588
*
*  Copyright 2020 FriendlyELEC (http://www.friendlyarm.com/)
********************************************************************************
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C /work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588 M=/work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/rtl8812au  modules
make[1]: 进入目录“/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588”
  CC [M]  /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/rtl8812au/core/rtw_cmd.o
  CC [M]  /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/rtl8812au/core/rtw_security.o
  CC [M]  /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/rtl8812au/core/rtw_debug.o
  CC [M]  /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/rtl8812au/core/rtw_io.o
  CC [M]  /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/rtl8812au/core/rtw_ioctl_query.o
......
  CC [M]  /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/rtl8812au/rtl8812au.mod.o
  LD [M]  /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/rtl8812au/rtl8812au.ko
make[1]: 离开目录“/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588”
'rtl8812au.ko' -> '/work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules/lib/modules/6.1.118/rtl8812au.ko'
depmod /work/sambashare/rk3588/friendly/sd-fuse_rk3588/out/output_rk3588_kmodules 6.1.118 ...
building kernel ok.
debian-bullseye-desktop-arm64 found.
copying kernel module and firmware to rootfs ...
mke2fs 1.45.4 (23-Sep-2019)
Creating regular file debian-bullseye-desktop-arm64/rootfs.img
Creating filesystem with 1081344 4k blocks and 228096 inodes
Filesystem UUID: dd8b145d-89a8-415c-943c-e19ca35dab57
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Copying files into the device: done
Writing superblocks and filesystem accounting information: done

'/work/sambashare/rk3588/friendly/sd-fuse_rk3588/prebuilt/parameter.template' -> 'debian-bullseye-desktop-arm64/parameter.txt'
generating debian-bullseye-desktop-arm64/parameter.txt done.
0
updating kernel ok.

注意:如果不行每次编译都执行清理工作,修改build-kernel.sh文件;

# true ${SKIP_DISTCLEAN:=0}
true ${SKIP_DISTCLEAN:=1}
2.4.1 异常处理

在编译内核的过程中,会编译第三方驱动,其中在编译rtl8822bu时候出现了错误,由于我们的开发板使用的网卡有:

  • 有线网卡是rtl8125bg
    • 类型: 2.5 Gigabit以太网控制器;
    • 接口: RJ45网线接口;
    • 速度: 10/100/1000/2500 Mbps
    • 用途: 有线网络连接;
  • 有线网卡是rtl8822ce:通过NanoPC-T6M.2接口连接;
    • 类型: 802.11ac Wave2 WiFi + Bluetooth 5.0组合模块;
    • 接口: PCI Express
    • WiFi标准: 802.11a/b/g/n/ac
    • 速度: 最高 867 Mbps (5GHz) / 300 Mbps (2.4GHz)
    • 蓝牙: Bluetooth 5.0
    • 频段: 2.4GHz + 5GHz 双频;

因此并不会使用到rtl8822bu驱动,我们修改build-kernel.sh

#KERNEL_3RD_DRIVERS+=("https://github.com/friendlyarm/rtl8851bu")
#KERNEL_3RD_DRIVER_BRANCHES+=("nanopi-r2")
#KERNEL_3RD_DRIVER_NAME+=("rtl8851bu")
2.4.2 编译输出

编译完成后会在./out路径下生成若干文件;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll out/
drwxr-xr-x  7 root root       4096 11月  9 09:39 cryptodev-linux/
-rw-r--r--  1 root root         47 11月  8 20:07 .gitignore
drwxr-xr-x  4 root root       4096 11月  8 21:00 nft-fullcone/
drwxr-xr-x  3 root root       4096 11月  9 09:38 output_rk3588_kmodules/
drwxr-xr-x  3 root root       4096 11月  9 09:39 r8125/
drwxr-xr-x 20 root root       4096 11月  9 09:47 rootfs_new/
drwxr-xr-x  8 root root       4096 11月  9 09:42 rtl8812au/
drwxr-xr-x  9 root root       4096 11月  9 09:40 rtl8821CU/
drwxr-xr-x  8 root root       4096 11月  9 09:40 rtl8822bu/
drwxr-xr-x  8 root root       4096 11月  9 09:41 rtl8822ce/
drwxr-xr-x  8 root root       4096 11月  9 09:41 rtl8822cs/
drwxr-xr-x  8 root root       4096 11月  8 22:38 rtl8851bu/
drwxr-xr-x  6 root root      20480 11月  9 09:39 rtw88/

其中:

  • cryptodev-linuxnft-fullconer8125rtl8812aurtl8821CU等:为三方驱动源码;
  • output_rk3588_kmodules:为内核驱动模块;
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ls out/output_rk3588_kmodules/lib/modules/6.1.118/
cryptodev.ko               modules.dep          r8125.ko       rtw_8723de.ko  rtw_8814a.ko   rtw_8822be.ko  rtw_88xxa.ko
kernel                     modules.dep.bin      rtl8812au.ko   rtw_8723d.ko   rtw_8814au.ko  rtw_8822b.ko   rtw_core.ko
modules.alias              modules.devname      rtl8821CU.ko   rtw_8723ds.ko  rtw_8821a.ko   rtw_8822bs.ko  rtw_pci.ko
modules.alias.bin          modules.order        rtl8822bu.ko   rtw_8723du.ko  rtw_8821au.ko  rtw_8822bu.ko  rtw_sdio.ko
modules.builtin            modules.softdep      rtl8822ce.ko   rtw_8723x.ko   rtw_8821ce.ko  rtw_8822ce.ko  rtw_usb.ko
modules.builtin.alias.bin  modules.symbols      rtl8822cs.ko   rtw_8812a.ko   rtw_8821c.ko   rtw_8822c.ko
modules.builtin.bin        modules.symbols.bin  rtw_8703b.ko   rtw_8812au.ko  rtw_8821cs.ko  rtw_8822cs.ko
modules.builtin.modinfo    nft_fullcone.ko      rtw_8723cs.ko  rtw_8814ae.ko  rtw_8821cu.ko  rtw_8822cu.ko
  • rootfs_new:新的根文件系统的源码;

此外debian-bullseye-desktop-arm64目录下的内核镜像和根文件系统被更新了;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll debian-bullseye-desktop-arm64
-rw-r--r--  1 root root    7945164  8月 10 23:04 boot.img
-rw-r--r--  1 root root       1424  5月 28  2023 dtbo.img           
-rw-r--r--  1 root root     331776  1月  9  2025 idbloader.img
-rw-r--r--  1 root root         62 10月 10 15:08 info.conf
-rw-r--r--  1 root root   36177940 11月  9 09:42 kernel.img     # 更新了
-rw-r--r--  1 root root     487872  1月  9  2025 MiniLoaderAll.bin   
-rw-r--r--  1 root root      49152  5月 28  2023 misc.img
-rw-r--r--  1 root root        470 11月  9 09:49 parameter.txt   # 更新了
-rw-r--r--  1 root root    8446976 11月  9 09:42 resource.img    # 更新了
-rw-r--r--  1 root root 4260586412 11月  9 09:49 rootfs.img      # 更新了
-rw-r--r--  1 root root    4194304  7月 21 14:38 uboot.img
-rw-r--r--  1 root root     159868 10月 10 15:08 userdata.img
2.4.3 系统分区介绍

parameter.txt保存着分区信息:

FIRMWARE_VER: 12.0
MACHINE_MODEL: RK3588
MACHINE_ID: 007
MANUFACTURER: RK3588
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: NanoPi6
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00002000@0x00008000(dtbo),0x00008000@0x0000a000(resource),0x00014000@0x00012000(kernel),0x00010000@0x00026000(boot),0x00010000@0x00036000(recovery),0x00840000@0x00046000(rootfs),-@0x00886000(userdata:grow)

解析信息如下:

Number Name 镜像文件 Start (sector) End (sector) Size
1 uboot uboot.img 0x4000(16384) 0x5FFF 4M
2 misc misc.img 0x6000(24576) 0x7FFF 4M
3 dtbo dtbo.img 0x8000(32768) 0x9FFF 4M
4 resource resource.img 0xa000(40960) 0x11FFF 16MB
5 kernel kernel.img 0x12000(73728) 0x25FFF 40MB
6 boot boot.img 0x26000(155648) 0x35FFF 32MB
7 recovery recovery.img 0x36000(221184) 0x45FFF 32MB
8 rootfs rootfs.img 0x46000(286720) 0x885FFF 4.298GB
9 userdata userdata.img 0x886000(8937472) -

其中:

  • uboot分区:供uboot编译出来的uboot.img
  • misc分区:引导参数分区,供misc.img,给recovery使用;
    • uboot会根据misc分区存放的字段来判断将要引导的系统是normal系统还是recovery系统。更多可以参考《misc分区介绍》;
  • dtbo:供kernel编译出来的dtbo.imgdtbo.img镜像中存放了/chosen节点bootargs_ext属性信息,更多可以参考《android_fdt_overlay_apply》;
  • resource:资源分区,由设备树、图片资源文件组成,不包含内核;
  • boot:供kernel编译出来的boot.img(可能是FIT uImage镜像格式,也有可能是Android bootimg镜像格式),实际上烧录的boot.img并不是FIT uIamge,因此uboot启动并不会使用到这个文件,具体可以参考《启动内核》;
  • kernel:供kernel编译出来的kernel.img(由tools/mkkrnlimg工具编译内核镜像Image文件得到),uboot启动使用的是这个;
  • recovery分区:供recovery编译出的recovery.imgkernel + dtb + ramdisk),更多可以参考《Rockchip RK3588 - 从零开始制作recovery》;
  • rootfs分区:供buildrootdebianyocto编出来的rootfs.img
  • userdata分区:供APP临时生成文件或给最终用户使用,挂载在/userdata目录下。
2.4.4 生成统一固件

debian-bullseye-desktop-arm64目录下的镜像文件重新打包成SD卡固件:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ./mk-sd-image.sh debian-bullseye-desktop-arm64
Creating RAW image: out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20251109.img (7800 MB)
---------------------------------
记录了0+0 的读入
记录了0+0 的写出
0字节已复制,0.000236721 s,0.0 kB/s
----------------------------------------------------------------
[out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20251109.img] capacity = 7438MB, 7799999488 bytes
current out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20251109.img partition:
----------------------------------------------------------------
parsing ./debian-bullseye-desktop-arm64/parameter.txt:
create new GPT 9:
----------------------------------------------------------------
copy from: ./debian-bullseye-desktop-arm64 to out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20251109.img
 [RAW. 0]:      324 KB | ./debian-bullseye-desktop-arm64/idbloader.img  > 100% : done.
 [RAW. 1]:     4096 KB | ./debian-bullseye-desktop-arm64/uboot.img      > 100% : done.
 [RAW. 2]:       48 KB | ./debian-bullseye-desktop-arm64/misc.img       > 100% : done.
 [RAW. 3]:        1 KB | ./debian-bullseye-desktop-arm64/dtbo.img       > 100% : done.
 [RAW. 4]:     8249 KB | ./debian-bullseye-desktop-arm64/resource.img   > 100% : done.
 [RAW. 5]:    35330 KB | ./debian-bullseye-desktop-arm64/kernel.img     > 100% : done.
 [RAW. 6]:     7758 KB | ./debian-bullseye-desktop-arm64/boot.img       > 100% : done.
 [RAW. 8]:  4160728 KB | ./debian-bullseye-desktop-arm64/rootfs.img     > 100% : done.
 [RAW. 9]:      156 KB | ./debian-bullseye-desktop-arm64/userdata.img   > 100% : done.
----------------------------------------------------------------
---------------------------------
RAW image successfully created (10:43:18).
-rw-r--r-- 1 root root 7799999488 11月  9 10:43 out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20251109.img
Tip: You can compress it to save disk space.

sh脚本内部调用了Rockchip官方提供的打包工具生成的统一固件,由于打包工具并不开源,所以无法研究源码。

不过我们大致可以猜测出应该就是做了一个镜像文件,然后按照parameter.txt进行划分分区,并将各个分区镜像依次烧录进去。

命令完成后,生成的统一固件位于out目录,可以用dd命令制作SD启动卡;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# ll out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20251109.img
-rw-r--r-- 1 root root 7799999488 11月  9 10:43 out/rk3588-sd-debian-bullseye-desktop-6.1-arm64-20251109.img

三、NanoPC-T6烧录测试

这里我们使用upgrade_tool工具进行烧录,将开发板连接上电源,并且通过HDMI接口连接到显示设备,连接Type-C数据线到PC

3.1 烧写分区镜像

3.1.1 硬件准备

按住Mask键再长按Power键开机(保持按下Mask5秒以上),将强制进入MASKROM模式;

进入MASKROM模式后,运行upgrade_tool后可以看到连接设备中有个Maskrom的提示:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588# sudo upgrade_tool LD
List of rockusb connected(1)
DevNo=1 Vid=0x2207,Pid=0x350b,LocationID=11     Mode=Maskrom    SerialNo=rockchip

注意:烧录工具upgrade_tool的安装参考:《upgrade_tool工具烧录》。

3.1.2 根文件系统调整

采用upgrade_tool方式方式烧录各个分区,在完成烧录之后,测试发现ubootlinux内核均能正常加载,但是挂载根文件系统的时候却失败了,这是因为官方提供的rootfs.img采用的sparse ext4 image,是无法直接烧写运行的;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# file rootfs.img
debian-bullseye-desktop-arm64/rootfs.img: Android sparse image, version: 1.0, Total of 1081344 4096-byte output blocks in 76 input chunks.

需要使用simg2imgsimgsparse ext4 image)还原为raw ext4 image

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# cp rootfs.img rootfs.simg
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# simg2img rootfs.simg rootfs_use.img
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# rm -rf rootfs.simg
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# file rootfs_use.img
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# file rootfs_use.img
rootfs_use.img: Linux rev 1.0 ext4 filesystem data, UUID=dd8b145d-89a8-415c-943c-e19ca35dab57, volume name "rootfs" (extents) (64bit) (large files) (huge files)
3.1.3 开始烧录

我们在开发过程中,经常会对内核、根文件系统、uboot进行修改,在这种情况下我们只需要替换我们修改的镜像文件即可。在ubuntu宿主机烧写分区镜像;

root@ubuntu:/work/sambashare/rk3399/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool ul MiniLoaderAll.bin -noreset
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -p parameter.txt
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -uboot uboot.img
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -misc misc.img 
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -dtbo dtbo.img 
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -resource resource.img
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -k kernel.img      
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -boot boot.img        
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -rootfs rootfs_use.img    
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool di -userdata  userdata.img 
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool RD

对于MASKROM模式,其中前两步和最后一步是必须的,中间的步骤根据实际情况进行调整。如果烧录失败,可以重复上电->烧录的过程试试。

由于SoC进入到MASKROM模式后,目标板子会运行Rockusb驱动程序。在MASKROM模式下,烧写镜像需要使用到DDR,因此需要下载固件进行DDR的初始化,所以升级之前第一步要做的就是执行sudo upgrade_tool ul MiniLoaderAll.bin

注意:如果在测试的时候发现,烧录完MiniLoaderAll.bin之后,系统自动重启了,是由于其命令后没有追加-noreset

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64# sudo upgrade_tool ul MiniLoaderAll.bin -noreset
Loading loader...
Support Type:RK3588     Loader ver:1.0b Loader Time:2024-07-20 11:31:59
Start to upgrade loader...
Download Boot Start
Download Boot Success
Wait For Maskrom Start
Wait For Maskrom Success
Test Device Start
Test Device Success
Check Chip Start
Check Chip Success
Get FlashInfo Start
Get FlashInfo Success
Prepare IDB Start
Prepare IDB Success
Download IDB Start
Download IDB Success
Upgrade loader ok. 

3.2 系统启动

3.2.1 串口连接

使用准备好的USB转串口适配器和连接线(需另购),连接开发板,其使用的是RK3588UART2

引脚 开发板接口 USB转串口
1 GND GND(黑色)
2 UART2_TX_M0_DEBUG RX(白色)
3 UART2_RX_M0_DEBUG TX(绿色)
3.2.2 启动日志

开发板上电启动完整日志:

点击查看代码
DDR 9fa84341ce typ 24/09/06-09:51:11,fwver: v1.18
ch0 ttot10
ch1 ttot10
ch2 ttot10
ch3 ttot10
ch0 ttot18
LPDDR4X, 2112MHz
channel[0] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=8 Size=4096MB
ch1 ttot18
channel[1] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=8 Size=4096MB
ch2 ttot16
channel[2] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=8 Size=4096MB
ch3 ttot16
channel[3] BW=16 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=8 Size=4096MB
Manufacturer ID:0x1
DQS rds:l0,l0
CH0 RX Vref:27.5%, TX Vref:21.8%,21.8%
DQ rds:h1 h4 l0 h2 h6 h1 h1 h2, l1 h1 h2 h2 l0 h1 h2 l2

DQS rds:l0,l0
CH1 RX Vref:26.3%, TX Vref:22.8%,22.8%
DQ rds:l1 l0 l0 l0 h1 h7 l0 h1, h1 l0 l1 l1 h4 h4 h4 h1

DQS rds:l1,h1
CH2 RX Vref:28.3%, TX Vref:21.8%,21.8%
DQ rds:l0 h1 h3 h1 h2 l0 l0 h2, h2 l0 l0 h3 l0 h5 h2 l2

DQS rds:h2,h1
CH3 RX Vref:27.9%, TX Vref:20.8%,21.8%
DQ rds:h1 l0 h1 h1 h2 h1 l0 h1, h1 h3 h2 h1 h6 l0 h1 h2

stride=0x2, ddr_config=0x4
hash ch_mask0-1 0x20 0x40, bank_mask0-3 0xa00 0x1400 0x2800 0x0, rank_mask0 0x401000
change to F1: 528MHz
ch0 ttot10
ch1 ttot10
ch2 ttot10
ch3 ttot10
change to F2: 1068MHz
ch0 ttot14
ch1 ttot14
ch2 ttot14
ch3 ttot12
change to F3: 1560MHz
ch0 ttot16
ch1 ttot16
ch2 ttot14
ch3 ttot14
change to F0: 2112MHz
ch0 ttot18
ch1 ttot18
ch2 ttot18
ch3 ttot18
out
U-Boot SPL board init
U-Boot SPL 2017.09-ge4e124926e-230922 #lxh (Sep 25 2023 - 10:58:38), fwver: v1.13
Trying to boot from MMC2
MMC: no card present
mmc_init: -123, time 0
spl: mmc init failed with error: -123
Trying to boot from MMC1
SPL: A/B-slot: _a, successful: 0, tries-remain: 7
Trying fit image at 0x4000 sector
## Verified-boot: 0
## Checking atf-1 0x00040000 (gzip @0x00240000) ... sha256(921934f9ac...) + sha256(acb6e4b004...) + OK
## Checking uboot 0x00200000 (gzip @0x00400000) ... sha256(99a31c0983...) + sha256(a110dfc4d1...) + OK
## Checking fdt 0x0034f4a8 ... sha256(9ff849197b...) + OK
## Checking atf-2 0xff100000 ... sha256(11bdd78b17...) + OK
## Checking atf-3 0x000f0000 ... sha256(b2af21b504...) + OK
## Checking optee 0x08400000 (gzip @0x08600000) ... sha256(ea5d3492ad...) + sha256(3e0a1f56ed...) + OK
Jumping to U-Boot(0x00200000) via ARM Trusted Firmware(0x00040000)
Total: 490.340/685.266 ms

INFO:    Preloader serial: 2
NOTICE:  BL31: v2.3():v2.3-893-g1653f2a08:derrick.huang, fwver: v1.49
NOTICE:  BL31: Built : 14:27:47, Mar  3 2025
INFO:    spec: 0x1
INFO:    code: 0x88
INFO:    ext 32k is not valid
INFO:    ddr: stride-en 4CH
INFO:    GICv3 without legacy support detected.
INFO:    ARM GICv3 driver initialized in EL3
INFO:    valid_cpu_msk=0xff bcore0_rst = 0x0, bcore1_rst = 0x0
INFO:    l3 cache partition cfg-0
INFO:    system boots from cpu-hwid-0
INFO:    enable memory repair
INFO:    idle_st=0x21fff, pd_st=0x11fff9, repair_st=0xfff70001
INFO:    dfs DDR fsp_params[0].freq_mhz= 2112MHz
INFO:    dfs DDR fsp_params[1].freq_mhz= 528MHz
INFO:    dfs DDR fsp_params[2].freq_mhz= 1068MHz
INFO:    dfs DDR fsp_params[3].freq_mhz= 1560MHz
INFO:    BL31: Initialising Exception Handling Framework
INFO:    BL31: Initializing runtime services
INFO:    BL31: Initializing BL32
I/TC:
I/TC: OP-TEE version: 3.13.0-898-g57604957e #hisping.lin (gcc version 10.2.1 20201103 (GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16))) #2 Fri Nov 15 16:04:27 CST 2024 aarch64, fwver: v1.19
I/TC: OP-TEE memory: TEEOS 0x200000 TA 0xc00000 SHM 0x200000
I/TC: Primary CPU initializing
I/TC: Primary CPU switching to normal world boot
INFO:    BL31: Preparing for EL3 exit to normal world
INFO:    Entry point address = 0x200000
INFO:    SPSR = 0x3c9


U-Boot 2017.09-g44f011c4ba9-250620 #fa (Jul 17 2025 - 15:25:44 +0800)

Board: NanoPi R6S
PreSerial: 2, raw, 0xfeb50000
DRAM:  16 GiB
Sysmem: init
Relocation Offset: ed90e000
Relocation fdt: eb7fa180 - eb7fecd8
CR: M/C/I
Using default environment

optee api revision: 2.0
mmc@fe2c0000: 1, mmc@fe2e0000: 0
Bootdev(atags): mmc 0
MMC0: HS400 Enhanced Strobe, 200Mhz
PartType: EFI
TEEC: Waring: Could not find security partition
DM: v2
boot mode: normal
RESC: 'resource', blk@0x0000a000
lib/avb/libavb_user/avb_ops_user.c: trusty_read_lock_state failed
Error determining whether device is unlocked.
Device is: UNLOCKED
DTB: rk3588-nanopi6-rev01.dtb (279535)
HASH(c): OK
ANDROID: fdt overlay OK
usb dr_mode not found
usb dr_mode not found
I2c0 speed: 100000Hz
vsel-gpios- not found!
en-gpios- not found!
vdd_cpu_big0_s0 675000 uV
vsel-gpios- not found!
en-gpios- not found!
vdd_cpu_big1_s0 675000 uV
I2c2 speed: 100000Hz
vsel-gpios- not found!
en-gpios- not found!
vdd_npu_s0 837500 uV
spi2: RK806: 2
ON=0x80, OFF=0x04
vdd_gpu_s0 750000 uV
vdd_cpu_lit_s0 init 800000 uV
vdd_log_s0 750000 uV
vdd_vdenc_s0 init 750000 uV
vdd_ddr_s0 850000 uV
use 0xede00000 as drm logo base memory
get vp0 plane mask:0x7, primary id:0, cursor id:2, from dts
get vp1 plane mask:0x148, primary id:6, cursor id:3, from dts
get vp2 plane mask:0x280, primary id:9, cursor id:7, from dts
Could not find baseparameter partition
I2c6 speed: 200000Hz
Rockchip UBOOT DRM driver version: v1.0.1
vp0 have layer nr:3[Cluster0 Cluster1 Esmart0 ], primary plane: Cluster0
vp1 have layer nr:3[Esmart1 Cluster2 Esmart2 ], primary plane: Cluster2
vp2 have layer nr:2[Cluster3 Esmart3 ], primary plane: Esmart3
vp3 have layer nr:0[], primary plane: INVALID
I2c4 speed: 100000Hz
dsi@fde30000 disconnected
Monitor has basic audio support
Could not find baseparameter partition
color_format:1
hdmi_select_link_config use tmds mode
mode:1920x1080 bus_format:0x2025
hdmi@fde80000:  detailed mode clock 148500 kHz, flags[5]
    H: 1920 2008 2052 2200
    V: 1080 1082 1087 1125
bus_format: 2025
VOP update mode to: 1920x1080p60, type: HDMI0 for VP0
dclk:148500000,if_pixclk_div;2,if_dclk_div:4
hdptx_ropll_cmn_config bus_width:16a8c8 rate:1485000
hdptx phy pll locked!
VP0 set crtc_clock to 1485KHz
VOP VP0 enable Cluster0[800x480->800x480@560x300] fmt[0] addr[0xede00000]
Non-CEA mode used in HDMI
mtmdsclock:148500000
hdptx_ropll_cmn_config bus_width:16a8c8 rate:1485000
hdptx phy pll locked!
dw_hdmi_setup HDMI mode
don't use dsc mode
dw hdmi qp use tmds mode
bus_width:0x16a8c8,bit_rate:1485000
hdptx phy lane locked!
CLK: (sync kernel. arm: enter 1008000 KHz, init 1008000 KHz, kernel 0N/A)
  b0pll 24000 KHz
  b1pll 24000 KHz
  lpll 24000 KHz
  v0pll 24000 KHz
  aupll 786431 KHz
  cpll 1500000 KHz
  gpll 1188000 KHz
  npll 850000 KHz
  ppll 1100000 KHz
  aclk_center_root 702000 KHz
  pclk_center_root 100000 KHz
  hclk_center_root 396000 KHz
  aclk_center_low_root 500000 KHz
  aclk_top_root 750000 KHz
  pclk_top_root 100000 KHz
  aclk_low_top_root 396000 KHz
vdd_usbc 12529 mV

Net:   No ethernet found.
Hit key to stop autoboot('CTRL+C'):  0
## Booting FIT Image FIT: No fit blob
FIT: No FIT image
ANDROID: reboot reason: "(none)"
Not AVB images, AVB skip
No valid android hdr
Android image load failed
Android boot failed, error -1.

## Booting Rockchip Format Image
fdt      @ 0x08300000 (0x0004468f)
kernel   @ 0x00400000 (0x022b0808)
ramdisk  @ 0x0a200000 (0x00793bc0)
Fdt Ramdisk skip relocation
## Flattened Device Tree blob at 0x08300000
   Booting using the fdt blob at 0x08300000
   Using Device Tree in place at 0000000008300000, end 000000000834768e
## reserved-memory:
  cma: addr=10000000 size=8000000
  drm-logo@0: addr=ede00000 size=2ee000
  vendor-storage-rm@00000000: addr=ebbbe000 size=10000
  ramoops@110000: addr=110000 size=e0000
Adding bank: 0x00200000 - 0x08400000 (size: 0x08200000)
Adding bank: 0x09400000 - 0xf0000000 (size: 0xe6c00000)
Adding bank: 0x100000000 - 0x3fc000000 (size: 0x2fc000000)
Adding bank: 0x3fc500000 - 0x3fff00000 (size: 0x03a00000)
Adding bank: 0x4f0000000 - 0x500000000 (size: 0x10000000)
Total: 1662.837/1718.526 ms

Starting kernel ...

[    1.728689] Booting Linux on physical CPU 0x0000000000 [0x412fd050]
[    1.728713] Linux version 6.1.118 (root@ubuntu) (aarch64-linux-gnu-gcc (Ubuntu 10.5.0-1ubuntu1~22.04) 10.5.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #2 SMP Sun Nov  9 12:15:31 CST 2025
[    1.731493] random: crng init done
[    1.736108] Machine model: FriendlyElec NanoPC-T6
[    1.743163] earlycon: uart8250 at MMIO32 0x00000000feb50000 (options '')
[    1.746541] printk: bootconsole [uart8250] enabled
[    1.749215] OF: fdt: Reserved memory: failed to reserve memory for node 'drm-cubic-lut@0': base 0x0000000000000000, size 0 MiB
[    1.750292] OF: reserved mem: 0x0000000000110000..0x00000000001effff (896 KiB) map non-reusable ramoops@110000
[    1.751211] Reserved memory: created CMA memory pool at 0x0000000010000000, size 128 MiB
[    1.751939] OF: reserved mem: initialized node cma, compatible id shared-dma-pool
[    1.752618] OF: reserved mem: 0x0000000010000000..0x0000000017ffffff (131072 KiB) map reusable cma
[    1.753436] OF: reserved mem: 0x00000000ebbbe000..0x00000000ebbcdfff (64 KiB) map non-reusable vendor-storage-rm@00000000
[    1.754433] OF: reserved mem: 0x00000000ede00000..0x00000000ee0edfff (3000 KiB) map non-reusable drm-logo@0
[    1.969871] Zone ranges:
[    1.970112]   DMA      [mem 0x0000000000200000-0x00000000ffffffff]
[    1.970679]   DMA32    empty
[    1.970943]   Normal   [mem 0x0000000100000000-0x00000004ffffffff]
[    1.971506] Movable zone start for each node
[    1.971890] Early memory node ranges
[    1.972210]   node   0: [mem 0x0000000000200000-0x00000000083fffff]
[    1.972776]   node   0: [mem 0x0000000009400000-0x00000000efffffff]
[    1.973342]   node   0: [mem 0x0000000100000000-0x00000003fbffffff]
[    1.973911]   node   0: [mem 0x00000003fc500000-0x00000003ffefffff]
[    1.974475]   node   0: [mem 0x00000004f0000000-0x00000004ffffffff]
[    1.975042] Initmem setup node 0 [mem 0x0000000000200000-0x00000004ffffffff]
[    1.976347] On node 0, zone DMA: 512 pages in unavailable ranges
[    1.994695] On node 0, zone DMA: 4096 pages in unavailable ranges
[    2.055796] On node 0, zone Normal: 1280 pages in unavailable ranges
[    2.057655] On node 0, zone Normal: 256 pages in unavailable ranges
[    2.058404] psci: probing for conduit method from DT.
[    2.059430] psci: PSCIv1.1 detected in firmware.
[    2.059849] psci: Using standard PSCI v0.2 function IDs
[    2.060322] psci: Trusted OS migration not required
[    2.060802] psci: SMC Calling Convention v1.2
[    2.061563] percpu: Embedded 30 pages/cpu s83448 r8192 d31240 u122880
[    2.062327] Detected VIPT I-cache on CPU0
[    2.062725] CPU features: detected: GIC system register CPU interface
[    2.063304] CPU features: detected: Virtualization Host Extensions
[    2.063867] CPU features: detected: ARM errata 1165522, 1319367, or 1530923
[    2.064496] alternatives: applying boot alternatives
[    2.066535] Built 1 zonelists, mobility grouping on.  Total pages: 4122720
[    2.067164] Kernel command line: storagemedia=emmc androidboot.storagemedia=emmc androidboot.mode=normal androidboot.dtbo_idx=0 androidboot.verifiedbootstate=orange earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 coherent_pool=1m irqchip.gicv3_pseudo_nmi=0 rw root=/dev/mmcblk2p8 rootfstype=ext4 rootflags=discard data=/dev/mmcblk2p9 consoleblank=0 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1 androidboot.fwver=ddr-v1.18-9fa84341ce,spl-v1.13,bl31-v1.49,bl32-v1.19,uboot-44f011c4ba-07/17/2025
[    2.071569] Unknown kernel command line parameters "storagemedia=emmc data=/dev/mmcblk2p9 cgroup_enable=memory cgroup_memory=1", will be passed to user space.
[    2.074291] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes, linear)
[    2.075741] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes, linear)
[    2.076457] mem auto-init: stack:off, heap alloc:off, heap free:off
[    2.077023] software IO TLB: area num 8.
[    2.088954] software IO TLB: mapped [mem 0x00000000e7bbe000-0x00000000ebbbe000] (64MB)
[    2.192925] Memory: 16185824K/16752640K available (18880K kernel code, 3138K rwdata, 6852K rodata, 6464K init, 936K bss, 435744K reserved, 131072K cma-reserved)
[    2.194364] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
[    2.194988] ftrace: allocating 60368 entries in 236 pages
[    2.278808] ftrace: allocated 236 pages with 5 groups
[    2.279361] trace event string verifier disabled
[    2.279958] rcu: Hierarchical RCU implementation.
[    2.280382] rcu:     RCU event tracing is enabled.
[    2.280791]  Rude variant of Tasks RCU enabled.
[    2.281197]  Tracing variant of Tasks RCU enabled.
[    2.281627] rcu: RCU calculated value of scheduler-enlistment delay is 30 jiffies.
[    2.286627] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    2.289647] GICv3: GIC: Using split EOI/Deactivate mode
[    2.290122] GICv3: 480 SPIs implemented
[    2.290469] GICv3: 0 Extended SPIs implemented
[    2.290895] Root IRQ handler: gic_handle_irq
[    2.291292] GICv3: GICv3 features: 16 PPIs
[    2.291704] GICv3: CPU0: found redistributor 0 region 0:0x00000000fe680000
[    2.292632] ITS [mem 0xfe640000-0xfe65ffff]
[    2.293053] ITS@0x00000000fe640000: allocated 8192 Devices @1000d0000 (indirect, esz 8, psz 64K, shr 0)
[    2.293917] ITS@0x00000000fe640000: allocated 32768 Interrupt Collections @1000e0000 (flat, esz 2, psz 64K, shr 0)
[    2.294853] ITS: using cache flushing for cmd queue
[    2.295318] ITS [mem 0xfe660000-0xfe67ffff]
[    2.295730] ITS@0x00000000fe660000: allocated 8192 Devices @100100000 (indirect, esz 8, psz 64K, shr 0)
[    2.296593] ITS@0x00000000fe660000: allocated 32768 Interrupt Collections @100110000 (flat, esz 2, psz 64K, shr 0)
[    2.297529] ITS: using cache flushing for cmd queue
[    2.298153] GICv3: using LPI property table @0x0000000100120000
[    2.298793] GIC: using cache flushing for LPI property table
[    2.299305] GICv3: CPU0: using allocated LPI pending table @0x0000000100130000
[    2.300001] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    2.431554] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
[    2.432115] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    2.433095] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[    2.434997] Console: colour dummy device 80x25
[    2.435434] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=80000)
[    2.436368] pid_max: default: 32768 minimum: 301
[    2.436835] LSM: Security Framework initializing
[    2.437358] AppArmor: AppArmor initialized
[    2.437824] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    2.438548] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    2.440725] cblist_init_generic: Setting adjustable number of callback queues.
[    2.441383] cblist_init_generic: Setting shift to 3 and lim to 1.
[    2.442015] cblist_init_generic: Setting adjustable number of callback queues.
[    2.442670] cblist_init_generic: Setting shift to 3 and lim to 1.
[    2.443361] rcu: Hierarchical SRCU implementation.
[    2.443796] rcu:     Max phase no-delay instances is 1000.
[    2.444967] Platform MSI: msi-controller@fe640000 domain created
[    2.445536] Platform MSI: msi-controller@fe660000 domain created
[    2.446402] PCI/MSI: /interrupt-controller@fe600000/msi-controller@fe640000 domain created
[    2.447167] PCI/MSI: /interrupt-controller@fe600000/msi-controller@fe660000 domain created
[    2.448432] smp: Bringing up secondary CPUs ...
I/TC: Secondary CPU 1 initializing
I/TC: Secondary CPU 1 switching to normal world boot
I/TC: Secondary CPU 2 initializing
I/TC: Secondary CPU 2 switching to normal world boot
I/TC: Secondary CPU 3 initializing
I/TC: Secondary CPU 3 switching to normal world boot
I/TC: Secondary CPU 4 initializing
I/TC: Secondary CPU 4 switching to normal world boot
I/TC: Secondary CPU 5 initializing
I/TC: Secondary CPU 5 switching to normal world boot
I/TC: Secondary CPU 6 initializing
I/TC: Secondary CPU 6 switching to normal world boot
I/TC: Secondary CPU 7 initializing
I/TC: Secondary CPU 7 switching to normal world boot
[    2.449986] Detected VIPT I-cache on CPU1
[    2.450074] GICv3: CPU1: found redistributor 100 region 0:0x00000000fe6a0000
[    2.450090] GICv3: CPU1: using allocated LPI pending table @0x0000000100140000
[    2.450126] CPU1: Booted secondary processor 0x0000000100 [0x412fd050]
[    2.451280] Detected VIPT I-cache on CPU2
[    2.451356] GICv3: CPU2: found redistributor 200 region 0:0x00000000fe6c0000
[    2.451372] GICv3: CPU2: using allocated LPI pending table @0x0000000100150000
[    2.451403] CPU2: Booted secondary processor 0x0000000200 [0x412fd050]
[    2.452546] Detected VIPT I-cache on CPU3
[    2.452622] GICv3: CPU3: found redistributor 300 region 0:0x00000000fe6e0000
[    2.452637] GICv3: CPU3: using allocated LPI pending table @0x0000000100160000
[    2.452667] CPU3: Booted secondary processor 0x0000000300 [0x412fd050]
[    2.453789] CPU features: detected: Spectre-v4
[    2.453794] CPU features: detected: Spectre-BHB
[    2.453796] CPU features: detected: SSBS not fully self-synchronizing
[    2.453799] Detected PIPT I-cache on CPU4
[    2.453852] GICv3: CPU4: found redistributor 400 region 0:0x00000000fe700000
[    2.453863] GICv3: CPU4: using allocated LPI pending table @0x0000000100170000
[    2.453886] CPU4: Booted secondary processor 0x0000000400 [0x414fd0b0]
[    2.455008] Detected PIPT I-cache on CPU5
[    2.455069] GICv3: CPU5: found redistributor 500 region 0:0x00000000fe720000
[    2.455080] GICv3: CPU5: using allocated LPI pending table @0x0000000100180000
[    2.455103] CPU5: Booted secondary processor 0x0000000500 [0x414fd0b0]
[    2.456225] Detected PIPT I-cache on CPU6
[    2.456284] GICv3: CPU6: found redistributor 600 region 0:0x00000000fe740000
[    2.456295] GICv3: CPU6: using allocated LPI pending table @0x0000000100190000
[    2.456318] CPU6: Booted secondary processor 0x0000000600 [0x414fd0b0]
[    2.457433] Detected PIPT I-cache on CPU7
[    2.457494] GICv3: CPU7: found redistributor 700 region 0:0x00000000fe760000
[    2.457505] GICv3: CPU7: using allocated LPI pending table @0x00000001001a0000
[    2.457527] CPU7: Booted secondary processor 0x0000000700 [0x414fd0b0]
[    2.457585] smp: Brought up 1 node, 8 CPUs
[    2.475002] SMP: Total of 8 processors activated.
[    2.475429] CPU features: detected: 32-bit EL0 Support
[    2.475893] CPU features: detected: Data cache clean to the PoU not required for I/D coherence
[    2.476672] CPU features: detected: Common not Private translations
[    2.477239] CPU features: detected: CRC32 instructions
[    2.477709] CPU features: detected: RCpc load-acquire (LDAPR)
[    2.478229] CPU features: detected: LSE atomic instructions
[    2.478734] CPU features: detected: Privileged Access Never
[    2.479237] CPU features: detected: RAS Extension Support
[    2.479726] CPU features: detected: Speculative Store Bypassing Safe (SSBS)
[    2.480426] CPU: All CPU(s) started at EL2
[    2.480797] alternatives: applying system-wide alternatives
[    2.488708] devtmpfs: initialized
[    2.501561] Registered cp15_barrier emulation handler
[    2.502034] Registered setend emulation handler
[    2.502519] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 6370867519511994 ns
[    2.503410] futex hash table entries: 2048 (order: 5, 131072 bytes, linear)
[    2.505023] pinctrl core: initialized pinctrl subsystem
[    2.505894] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    2.506945] DMA: preallocated 1024 KiB GFP_KERNEL pool for atomic allocations
[    2.507764] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    2.508492] audit: initializing netlink subsys (disabled)
[    2.509056] audit: type=2000 audit(0.073:1): state=initialized audit_enabled=0 res=1
[    2.509540] Registered FIQ tty driver
[    2.510222] thermal_sys: Registered thermal governor 'fair_share'
[    2.510224] thermal_sys: Registered thermal governor 'step_wise'
[    2.510779] thermal_sys: Registered thermal governor 'user_space'
[    2.511342] cpuidle: using governor menu
[    2.512385] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    2.513098] ASID allocator initialised with 65536 entries
[    2.515554] ramoops: dmesg-0 0x18000@0x0000000000110000
[    2.516038] ramoops: dmesg-1 0x18000@0x0000000000128000
[    2.516539] ramoops: console 0x80000@0x0000000000140000
[    2.517021] ramoops: pmsg    0x30000@0x00000000001c0000
[    2.517744] printk: console [ramoops-1] enabled
[    2.518267] pstore: Registered ramoops as persistent store backend
[    2.518831] ramoops: using 0xe0000@0x110000, ecc: 0
[    2.542731] platform csi2-dphy0: Fixed dependency cycle(s) with /mipi2-csi2
[    2.543396] platform mipi2-csi2: Fixed dependency cycle(s) with /csi2-dphy0
[    2.544167] platform mipi2-csi2: Fixed dependency cycle(s) with /rkcif-mipi-lvds2
[    2.544868] platform rkcif-mipi-lvds2: Fixed dependency cycle(s) with /mipi2-csi2
[    2.545663] platform rkcif-mipi-lvds2-sditf: Fixed dependency cycle(s) with /rkisp0-vir0
[    2.546420] platform rkisp0-vir0: Fixed dependency cycle(s) with /rkcif-mipi-lvds2-sditf
[    2.557362] platform fdd90000.vop: Fixed dependency cycle(s) with /dsi@fde30000
[    2.558054] platform fde30000.dsi: Fixed dependency cycle(s) with /dsi@fde30000/panel@0
[    2.558789] platform fde30000.dsi: Fixed dependency cycle(s) with /vop@fdd90000
[    2.559638] platform fdd90000.vop: Fixed dependency cycle(s) with /dp@fde50000
[    2.560319] platform fde50000.dp: Fixed dependency cycle(s) with /vop@fdd90000
[    2.561264] platform fdd90000.vop: Fixed dependency cycle(s) with /hdmi@fde80000
[    2.561962] platform fde80000.hdmi: Fixed dependency cycle(s) with /vop@fdd90000
[    2.568603] platform fed80000.phy: Fixed dependency cycle(s) with /i2c@fec80000/fusb302@22/connector
[    2.575785] rockchip-gpio fd8a0000.gpio: probed /pinctrl/gpio@fd8a0000
[    2.576596] rockchip-gpio fec20000.gpio: probed /pinctrl/gpio@fec20000
[    2.577370] rockchip-gpio fec30000.gpio: probed /pinctrl/gpio@fec30000
[    2.578144] rockchip-gpio fec40000.gpio: probed /pinctrl/gpio@fec40000
[    2.579023] rockchip-gpio fec50000.gpio: probed /pinctrl/gpio@fec50000
[    2.579673] rockchip-pinctrl pinctrl: probed pinctrl
[    2.581611] platform fdd90000.vop: Fixed dependency cycle(s) with /hdmi@fdea0000
[    2.582314] platform fdea0000.hdmi: Fixed dependency cycle(s) with /vop@fdd90000
[    2.586745] KASLR disabled due to lack of seed
[    2.591224] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
[    2.591851] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
[    2.592423] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
[    2.593041] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
[    2.593613] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
[    2.594231] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
[    2.594803] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
[    2.595423] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[    2.596293] cryptd: max_cpu_qlen set to 1000
[    2.652045] raid6: neonx8   gen()  4409 MB/s
[    2.708765] raid6: neonx4   gen()  4355 MB/s
[    2.765480] raid6: neonx2   gen()  4155 MB/s
[    2.822199] raid6: neonx1   gen()  3367 MB/s
[    2.878916] raid6: int64x8  gen()  2030 MB/s
[    2.935635] raid6: int64x4  gen()  2310 MB/s
[    2.992351] raid6: int64x2  gen()  1966 MB/s
[    3.049075] raid6: int64x1  gen()  1617 MB/s
[    3.049467] raid6: using algorithm neonx8 gen() 4409 MB/s
[    3.105782] raid6: .... xor() 3484 MB/s, rmw enabled
[    3.106238] raid6: using neon recovery algorithm
[    3.107347] fiq_debugger fiq_debugger.0: error -ENXIO: IRQ fiq not found
[    3.107964] fiq_debugger fiq_debugger.0: error -ENXIO: IRQ wakeup not found
[    3.108602] fiq_debugger_probe: could not install nmi irq handler
[[    3.109198] printk: console [ttyFIQ0] enabled
    3.109198] printk: console [ttyFIQ0] enabled
[    3.109983] printk: bootconsole [uart8250] disabled
[    3.109983] printk: bootconsole [uart8250] disabled
[    3.110496] Registered fiq debugger ttyFIQ0
[    3.120237] iommu: Default domain type: Translated
[    3.120243] iommu: DMA domain TLB invalidation policy: strict mode
[    3.120389] SCSI subsystem initialized
[    3.120460] usbcore: registered new interface driver usbfs
[    3.120476] usbcore: registered new interface driver hub
[    3.120491] usbcore: registered new device driver usb
[    3.120637] mc: Linux media interface: v0.10
[    3.120653] videodev: Linux video capture interface: v2.00
[    3.120688] pps_core: LinuxPPS API ver. 1 registered
[    3.120693] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    3.120701] PTP clock support registered
[    3.120718] EDAC MC: Ver: 3.0.0
[    3.121018] arm-scmi firmware:scmi: Enabled polling mode TX channel - prot_id:16
[    3.121063] arm-scmi firmware:scmi: SCMI Notifications - Core Enabled.
[    3.121092] arm-scmi firmware:scmi: SCMI Protocol v2.0 'rockchip:' Firmware version 0x0
[    3.122276] Advanced Linux Sound Architecture Driver Initialized.
[    3.122511] Bluetooth: Core ver 2.22
[    3.122526] NET: Registered PF_BLUETOOTH protocol family
[    3.122530] Bluetooth: HCI device and connection manager initialized
[    3.122538] Bluetooth: HCI socket layer initialized
[    3.122543] Bluetooth: L2CAP socket layer initialized
[    3.122551] Bluetooth: SCO socket layer initialized
[    3.122560] NetLabel: Initializing
[    3.122564] NetLabel:  domain hash size = 128
[    3.122568] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO
[    3.122593] NetLabel:  unlabeled traffic allowed by default
[    3.123846] rockchip-cpuinfo cpuinfo: SoC            : 35880000
[    3.123854] rockchip-cpuinfo cpuinfo: Serial         : 1f0bee682f135e89
[    3.124163] clocksource: Switched to clocksource arch_sys_counter
[    3.124284] VFS: Disk quotas dquot_6.6.0
[    3.124307] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    3.124363] FS-Cache: Loaded
[    3.124553] AppArmor: AppArmor Filesystem Enabled
[    3.128211] NET: Registered PF_INET protocol family
[    3.128594] IP idents hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    3.135720] tcp_listen_portaddr_hash hash table entries: 8192 (order: 6, 262144 bytes, linear)
[    3.135846] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    3.135880] TCP established hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    3.136723] TCP bind hash table entries: 65536 (order: 10, 4194304 bytes, linear)
[    3.140515] TCP: Hash tables configured (established 131072 bind 65536)
[    3.140585] UDP hash table entries: 8192 (order: 7, 786432 bytes, linear)
[    3.140951] UDP-Lite hash table entries: 8192 (order: 7, 786432 bytes, linear)
[    3.141359] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    3.141515] PCI: CLS 0 bytes, default 64
[    3.141596] Trying to unpack rootfs image as initramfs...
[    3.142138] rockchip-thermal fec00000.tsadc: Missing rockchip,grf property
[    3.142863] rockchip-thermal fec00000.tsadc: tsadc is probed successfully!
[    3.143429] kvm [1]: IPA Size Limit: 40 bits
[    3.143446] kvm [1]: GICv3: no GICV resource entry
[    3.143451] kvm [1]: disabling GICv2 emulation
[    3.143468] kvm [1]: GIC system register CPU interface enabled
[    3.143590] kvm [1]: vgic interrupt IRQ9
[    3.143776] kvm [1]: VHE mode initialized successfully
[    3.144452] Initialise system trusted keyrings
[    3.144544] workingset: timestamp_bits=46 max_order=22 bucket_order=0
[    3.146626] zbud: loaded
[    3.147113] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    3.147251] fuse: init (API version 7.38)
[    3.172676] xor: measuring software checksum speed
[    3.173207]    8regs           :  6273 MB/sec
[    3.173739]    32regs          :  6235 MB/sec
[    3.174101]    arm64_neon      :  9220 MB/sec
[    3.174105] xor: using function: arm64_neon (9220 MB/sec)
[    3.174117] Key type asymmetric registered
[    3.174122] Asymmetric key parser 'x509' registered
[    3.174145] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 242)
[    3.174250] io scheduler mq-deadline registered
[    3.174255] io scheduler kyber registered
[    3.174295] io scheduler bfq registered
[    3.175439] rockchip-csi2-dphy-hw fedc0000.csi2-dphy0-hw: csi2 dphy hw probe successfully!
[    3.175521] rockchip-csi2-dphy-hw fedc8000.csi2-dphy1-hw: csi2 dphy hw probe successfully!
[    3.184293] rockchip-hdptx-phy-hdmi fed60000.hdmiphy: hdptx phy init success
[    3.184997] rockchip-hdptx-phy-hdmi fed70000.hdmiphy: hdptx phy init success
[    3.187874] rk-pcie fe180000.pcie: invalid prsnt-gpios property in node
[    3.188178] rk-pcie fe150000.pcie: invalid prsnt-gpios property in node
[    3.188289] pwm-backlight pwm-backlight: supply power not found, using dummy regulator
[    3.188607] iep: Module initialized.
[    3.188643] mpp_service mpp-srv: 494460254 author: Jon Lin 2025-08-07 arm64: dts: rockchip: rk3588: Add clk PCLK_PHP_ROOT to pcie30phy
[    3.188650] mpp_service mpp-srv: probe start
[    3.190205] mpp_vepu2 jpege-ccu: probing start
[    3.190216] mpp_vepu2 jpege-ccu: probing finish
[    3.191148] mpp_rkvdec2 fdc30000.rkvdec-ccu: rkvdec-ccu, probing start
[    3.191211] mpp_rkvdec2 fdc30000.rkvdec-ccu: ccu-mode: 1
[    3.191218] mpp_rkvdec2 fdc30000.rkvdec-ccu: probing finish
[    3.191517] mpp_rkvenc2 rkvenc-ccu: probing start
[    3.191524] mpp_rkvenc2 rkvenc-ccu: probing finish
[    3.191935] mpp_service mpp-srv: probe success
[    3.192059] rk_videotunnel_driver rkvtunnel: probe start
[    3.192136] rk_videotunnel_driver rkvtunnel: probe success
[    3.202033] dma-pl330 fea10000.dma-controller: Loaded driver for PL330 DMAC-241330
[    3.202046] dma-pl330 fea10000.dma-controller:       DBUFF-128x8bytes Num_Chans-8 Num_Peri-32 Num_Events-16
[    3.202836] dma-pl330 fea30000.dma-controller: Loaded driver for PL330 DMAC-241330
[    3.202845] dma-pl330 fea30000.dma-controller:       DBUFF-128x8bytes Num_Chans-8 Num_Peri-32 Num_Events-16
[    3.203628] dma-pl330 fed10000.dma-controller: Loaded driver for PL330 DMAC-241330
[    3.203635] dma-pl330 fed10000.dma-controller:       DBUFF-128x8bytes Num_Chans-8 Num_Peri-32 Num_Events-16
[    3.203925] rockchip-pvtm fda40000.pvtm: pvtm@0 probed
[    3.203978] rockchip-pvtm fda50000.pvtm: pvtm@1 probed
[    3.204023] rockchip-pvtm fda60000.pvtm: pvtm@2 probed
[    3.204071] rockchip-pvtm fdaf0000.pvtm: pvtm@3 probed
[    3.204114] rockchip-pvtm fdb30000.pvtm: pvtm@4 probed
[    3.204258] rk-pcie fe150000.pcie: can't get current limit.
[    3.204574] rockchip-system-monitor rockchip-system-monitor: system monitor probe
[    3.204642] rk-pcie fe150000.pcie: host bridge /pcie@fe150000 ranges:
[    3.204692] rk-pcie fe150000.pcie:       IO 0x00f0100000..0x00f01fffff -> 0x00f0100000
[    3.204724] rk-pcie fe150000.pcie:      MEM 0x00f0200000..0x00f0ffffff -> 0x00f0200000
[    3.204747] rk-pcie fe150000.pcie:      MEM 0x0900000000..0x093fffffff -> 0x0900000000
[    3.204811] rk-pcie fe150000.pcie: iATU unroll: enabled
[    3.204824] rk-pcie fe150000.pcie: iATU regions: 8 ob, 8 ib, align 64K, limit 8G
[    3.205524] Serial: 8250/16550 driver, 10 ports, IRQ sharing disabled
[    3.205983] feb90000.serial: ttyS6 at MMIO 0xfeb90000 (irq = 38, base_baud = 1500000) is a 16550A
[    3.212562] rk_iommu fdca0000.iommu: av1d iommu enabled
[    3.217026] dw-mipi-dsi2 fde30000.dsi: Fixed dependency cycle(s) with /dsi@fde30000/panel@0
[    3.217093] mipi-dsi fde30000.dsi.0: Fixed dependency cycle(s) with /dsi@fde30000
[    3.225931] panel-simple-dsi fde30000.dsi.0: supply power not found, using dummy regulator
[    3.230283] brd: module loaded
[    3.232957] loop: module loaded
[    3.233112] lkdtm: No crash points registered, enable through debugfs
[    3.233145] system_heap: orders[0] = 6
[    3.233151] system_heap: orders[1] = 4
[    3.233156] system_heap: orders[2] = 0
[    3.235200] rockchip-spi feb20000.spi: no high_speed pinctrl state
[    3.235525] spi spi2.0: Fixed dependency cycle(s) with /spi@feb20000/rk806single@0/regulators/DCDC_REG7
[    3.235563] spi spi2.0: Fixed dependency cycle(s) with /spi@feb20000/rk806single@0/pinctrl_rk806/rk806_dvs1_pwrdn
[    3.235576] spi spi2.0: Fixed dependency cycle(s) with /spi@feb20000/rk806single@0/pinctrl_rk806/rk806_dvs3_null
[    3.235589] spi spi2.0: Fixed dependency cycle(s) with /spi@feb20000/rk806single@0/pinctrl_rk806/rk806_dvs2_null
[    3.235601] spi spi2.0: Fixed dependency cycle(s) with /spi@feb20000/rk806single@0/pinctrl_rk806/rk806_dvs1_null
[    3.236063] rk806 spi2.0: chip id: RK806,ver:0x2, 0x1
[    3.236187] rk806 spi2.0: ON: 0x80 OFF:0x4
[    3.236259] rk806 spi2.0: shutdown-sequence missing!
[    3.236266] rk806 spi2.0: vb-shutdown-sequence missing!
[    3.236273] rk806 spi2.0: dvs-suspend-control-by missing!
[    3.237516] vdd_gpu_s0: No configuration
[    3.248772] rk806 spi2.0: no sleep-setting state
[    3.248782] rk806 spi2.0: no reset-setting pinctrl state
[    3.248788] rk806 spi2.0: no dvs-setting pinctrl state
[    3.249368] rockchip-spi feb20000.spi: probed, poll=0, rsd=0, cs-inactive=0, ready=0
[    3.251268] PPP generic driver version 2.4.2
[    3.251367] usbcore: registered new interface driver asix
[    3.251389] usbcore: registered new interface driver ax88179_178a
[    3.251405] usbcore: registered new interface driver cdc_ether
[    3.251421] usbcore: registered new interface driver rndis_host
[    3.251435] usbcore: registered new interface driver qmi_wwan
[    3.251811] platform fc000000.usb: Fixed dependency cycle(s) with /i2c@fec80000/fusb302@22
[    3.264040] phy phy-fd5d4000.syscon:usb2-phy@4000.3: illegal mode
[    3.264055] xhci-hcd xhci-hcd.3.auto: xHCI Host Controller
[    3.264069] xhci-hcd xhci-hcd.3.auto: new USB bus registered, assigned bus number 1
[    3.264154] xhci-hcd xhci-hcd.3.auto: hcc params 0x0220fe64 hci version 0x110 quirks 0x0000808002010010
[    3.264197] xhci-hcd xhci-hcd.3.auto: irq 67, io mem 0xfc400000
[    3.264280] xhci-hcd xhci-hcd.3.auto: xHCI Host Controller
[    3.264289] xhci-hcd xhci-hcd.3.auto: new USB bus registered, assigned bus number 2
[    3.264298] xhci-hcd xhci-hcd.3.auto: Host supports USB 3.0 SuperSpeed
[    3.264372] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.01
[    3.264383] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.264390] usb usb1: Product: xHCI Host Controller
[    3.264396] usb usb1: Manufacturer: Linux 6.1.118 xhci-hcd
[    3.264403] usb usb1: SerialNumber: xhci-hcd.3.auto
[    3.264646] hub 1-0:1.0: USB hub found
[    3.264663] hub 1-0:1.0: 1 port detected
[    3.264821] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[    3.264869] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 6.01
[    3.264878] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.264884] usb usb2: Product: xHCI Host Controller
[    3.264890] usb usb2: Manufacturer: Linux 6.1.118 xhci-hcd
[    3.264896] usb usb2: SerialNumber: xhci-hcd.3.auto
[    3.265090] hub 2-0:1.0: USB hub found
[    3.265104] hub 2-0:1.0: 1 port detected
[    3.265265] usbcore: registered new interface driver cdc_acm
[    3.265271] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[    3.265289] usbcore: registered new interface driver cdc_wdm
[    3.265388] usbcore: registered new interface driver uas
[    3.265419] usbcore: registered new interface driver usb-storage
[    3.265452] usbcore: registered new interface driver usbserial_generic
[    3.265464] usbserial: USB Serial support registered for generic
[    3.265482] usbcore: registered new interface driver ch341
[    3.265493] usbserial: USB Serial support registered for ch341-uart
[    3.265508] usbcore: registered new interface driver cp210x
[    3.265519] usbserial: USB Serial support registered for cp210x
[    3.265539] usbcore: registered new interface driver ftdi_sio
[    3.265550] usbserial: USB Serial support registered for FTDI USB Serial Device
[    3.265569] ehci-platform fc880000.usb: EHCI Host Controller
[    3.265583] usbcore: registered new interface driver option
[    3.265585] ohci-platform fc8c0000.usb: Generic Platform OHCI controller
[    3.265587] ehci-platform fc880000.usb: new USB bus registered, assigned bus number 3
[    3.265596] usbserial: USB Serial support registered for GSM modem (1-port)
[    3.265606] ohci-platform fc8c0000.usb: new USB bus registered, assigned bus number 4
[    3.265640] usbcore: registered new interface driver pl2303
[    3.265652] usbserial: USB Serial support registered for pl2303
[    3.265651] ehci-platform fc800000.usb: EHCI Host Controller
[    3.265665] ohci-platform fc840000.usb: Generic Platform OHCI controller
[    3.265667] ehci-platform fc880000.usb: irq 69, io mem 0xfc880000
[    3.265674] usbcore: registered new interface driver qcserial
[    3.265673] ehci-platform fc800000.usb: new USB bus registered, assigned bus number 5
[    3.265685] usbserial: USB Serial support registered for Qualcomm USB modem
[    3.265695] ohci-platform fc840000.usb: new USB bus registered, assigned bus number 6
[    3.265724] ohci-platform fc8c0000.usb: irq 71, io mem 0xfc8c0000
[    3.265792] ehci-platform fc800000.usb: irq 68, io mem 0xfc800000
[    3.265849] ohci-platform fc840000.usb: irq 70, io mem 0xfc840000
[    3.265932] mousedev: PS/2 mouse device common for all mice
[    3.266395] .. rk pwm remotectl v2.0 init
[    3.266508] input: fd8b0030.pwm as /devices/platform/fd8b0030.pwm/input/input0
[    3.266700] remotectl-pwm fd8b0030.pwm: Controller support pwrkey capture
[    3.267593] input: rk805 pwrkey as /devices/platform/feb20000.spi/spi_master/spi2/spi2.0/rk805-pwrkey.1.auto/input/input1
[    3.267755] i2c_dev: i2c /dev entries driver
[    3.280833] ehci-platform fc880000.usb: USB 2.0 started, EHCI 1.00
[    3.281074] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.01
[    3.281094] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.281108] usb usb3: Product: EHCI Host Controller
[    3.281120] usb usb3: Manufacturer: Linux 6.1.118 ehci_hcd
[    3.281132] usb usb3: SerialNumber: fc880000.usb
[    3.281508] hub 3-0:1.0: USB hub found
[    3.281544] hub 3-0:1.0: 1 port detected
[    3.287390] platform csi2-dphy0: Fixed dependency cycle(s) with /i2c@feab0000/imx415@1a
[    3.287453] i2c 3-001a: Fixed dependency cycle(s) with /csi2-dphy0
[    3.288423] <<GTP-INF>>[gt1x_ts_probe:546] GTP Driver Version: V1.4<2015/07/10>
[    3.288441] <<GTP-INF>>[gt1x_ts_probe:547] GTP I2C Address: 0x14
[    3.288616] <<GTP-ERR>>[gt1x_parse_dt:338] vdd_ana not specified, fallback to power-supply
[    3.288666] <<GTP-ERR>>[gt1x_parse_dt:341] power not specified, ignore power ctrl
[    3.288734] <<GTP-INF>>[gt1x_reset_guitar:807] GTP RESET!
[    3.290370] rtc-hym8563 6-0051: rtc information is valid
[    3.294175] ehci-platform fc800000.usb: USB 2.0 started, EHCI 1.00
[    3.294313] rtc-hym8563 6-0051: registered as rtc0
[    3.294485] usb usb5: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 6.01
[    3.294506] usb usb5: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.294520] usb usb5: Product: EHCI Host Controller
[    3.294532] usb usb5: Manufacturer: Linux 6.1.118 ehci_hcd
[    3.294545] usb usb5: SerialNumber: fc800000.usb
[    3.294826] rtc-hym8563 6-0051: setting system clock to 2024-08-25T20:27:06 UTC (1724617626)
[    3.294952] hub 5-0:1.0: USB hub found
[    3.295008] hub 5-0:1.0: 1 port detected
[    3.301638] IR NEC protocol handler initialized
[    3.301916] rkcifhw fdce0000.rkcif: Adding to iommu group 16
[    3.302798] rkcifhw fdce0000.rkcif: No reserved memory region assign to CIF
[    3.302910] rkcif rkcif-mipi-lvds2: Adding to iommu group 16
[    3.302928] rkcif rkcif-mipi-lvds2: rkcif driver version: v00.02.00
[    3.302998] rkcif rkcif-mipi-lvds2: attach to cif hw node
[    3.303004] rkcif rkcif-mipi-lvds2: rkcif wait line 0
[    3.303010] rkcif rkcif-mipi-lvds2: rkcif fastboot reserve bufs num 3
[    3.303017] rkcif rkcif-mipi-lvds2: rkcif pins used group 0
[    3.303026] : terminal subdev does not exist
[    3.303034] : terminal subdev does not exist
[    3.303040] : terminal subdev does not exist
[    3.303046] : terminal subdev does not exist
[    3.303051] : get_remote_sensor: video pad[0] is null
[    3.303057] : rkcif_update_sensor_info: stream[0] get remote sensor_sd failed!
[    3.303064] : rkcif_scale_set_fmt: req(40, 30) src out(0, 0)
[    3.303072] : get_remote_sensor: video pad[0] is null
[    3.303077] : rkcif_update_sensor_info: stream[0] get remote sensor_sd failed!
[    3.303082] : rkcif_scale_set_fmt: req(40, 30) src out(0, 0)
[    3.303089] : get_remote_sensor: video pad[0] is null
[    3.303094] : rkcif_update_sensor_info: stream[0] get remote sensor_sd failed!
[    3.303099] : rkcif_scale_set_fmt: req(40, 30) src out(0, 0)
[    3.303106] : get_remote_sensor: video pad[0] is null
[    3.303111] : rkcif_update_sensor_info: stream[0] get remote sensor_sd failed!
[    3.303116] : rkcif_scale_set_fmt: req(40, 30) src out(0, 0)
[    3.303773] rkcif rkcif-mipi-lvds2: No memory-region-thunderboot specified
[    3.304630] rockchip-mipi-csi2-hw fdd10000.mipi0-csi2-hw: enter mipi csi2 hw probe!
[    3.304728] rockchip-mipi-csi2-hw fdd10000.mipi0-csi2-hw: probe success, v4l2_dev:mipi0-csi2-hw!
[    3.304764] rockchip-mipi-csi2-hw fdd20000.mipi1-csi2-hw: enter mipi csi2 hw probe!
[    3.304840] rockchip-mipi-csi2-hw fdd20000.mipi1-csi2-hw: probe success, v4l2_dev:mipi1-csi2-hw!
[    3.304871] rockchip-mipi-csi2-hw fdd30000.mipi2-csi2-hw: enter mipi csi2 hw probe!
[    3.304939] rockchip-mipi-csi2-hw fdd30000.mipi2-csi2-hw: probe success, v4l2_dev:mipi2-csi2-hw!
[    3.304969] rockchip-mipi-csi2-hw fdd40000.mipi3-csi2-hw: enter mipi csi2 hw probe!
[    3.305038] rockchip-mipi-csi2-hw fdd40000.mipi3-csi2-hw: probe success, v4l2_dev:mipi3-csi2-hw!
[    3.305067] rockchip-mipi-csi2-hw fdd50000.mipi4-csi2-hw: enter mipi csi2 hw probe!
[    3.305135] rockchip-mipi-csi2-hw fdd50000.mipi4-csi2-hw: probe success, v4l2_dev:mipi4-csi2-hw!
[    3.305164] rockchip-mipi-csi2-hw fdd60000.mipi5-csi2-hw: enter mipi csi2 hw probe!
[    3.305232] rockchip-mipi-csi2-hw fdd60000.mipi5-csi2-hw: probe success, v4l2_dev:mipi5-csi2-hw!
[    3.305592] rockchip-mipi-csi2 mipi2-csi2: attach to csi2 hw node
[    3.305618] rkcif rkcif-mipi-lvds2: Entity type for entity rockchip-mipi-csi2 was not initialized!
[    3.305627] rockchip-mipi-csi2: Async registered subdev
[    3.305632] rockchip-mipi-csi2: probe success, v4l2_dev:rkcif-mipi-lvds2!
[    3.306463] rkisp_hw fdcb0000.rkisp: Adding to iommu group 15
[    3.306620] rkisp_hw fdcb0000.rkisp: is_thunderboot: 0
[    3.306627] rkisp_hw fdcb0000.rkisp: Missing rockchip,grf property
[    3.306644] rkisp_hw fdcb0000.rkisp: max input:0x0@0fps
[    3.306755] rkisp_hw fdcb0000.rkisp: no find phandle sram
[    3.307001] rkisp rkisp0-vir0: rkisp driver version: v02.09.00
[    3.307093] rkisp rkisp0-vir0: No memory-region-thunderboot specified
[    3.307168] rkisp rkisp0-vir0: Entity type for entity rkisp-isp-subdev was not initialized!
[    3.308671] rk_hdmirx fdee0000.hdmirx-controller: No reserved memory for HDMIRX, use default CMA
[    3.308698] rk_hdmirx fdee0000.hdmirx-controller: hdmirx_get_phy_cpuid_func: mpidr: 0x0000000500, phy_cpuid:0x5
[    3.308719] rk_hdmirx fdee0000.hdmirx-controller: hdmirx_probe: cpu_aff:0x500, Bound_cpu:5, wdt_cfg_bound_cpu:2, phy_cpuid:5
[    3.309220] rk_hdmirx fdee0000.hdmirx-controller: hdmirx_audio_interrupts_setup: 0
[    3.309927] rk_hdmirx fdee0000.hdmirx-controller: rk_hdmirx_hdcp_register success
[    3.309950] rk_hdmirx fdee0000.hdmirx-controller: fdee0000.hdmirx-controller driver probe ok!
[    3.311330] device-mapper: uevent: version 1.0.3
[    3.311432] device-mapper: ioctl: 4.47.0-ioctl (2022-07-28) initialised: dm-devel@redhat.com
[    3.311843] cpu cpu0: no pvtpll
[    3.312339] cpu cpu0: bin=0
[    3.312522] cpu cpu0: leakage=8
[    3.313989] cpu cpu0: pvtm=1404
[    3.314182] cpu cpu0: pvtm-volt-sel=0
[    3.314481] cpu cpu4: no pvtpll
[    3.316176] cpu cpu4: bin=0
[    3.316353] cpu cpu4: leakage=7
[    3.322963] cpu cpu4: pvtm=1633
[    3.324988] usb usb6: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 6.01
[    3.325010] usb usb6: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.325025] usb usb6: Product: Generic Platform OHCI controller
[    3.325037] usb usb6: Manufacturer: Linux 6.1.118 ohci_hcd
[    3.325049] usb usb6: SerialNumber: fc840000.usb
[    3.325410] hub 6-0:1.0: USB hub found
[    3.325448] hub 6-0:1.0: 1 port detected
[    3.325860] usb usb4: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 6.01
[    3.325880] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.325895] usb usb4: Product: Generic Platform OHCI controller
[    3.325907] usb usb4: Manufacturer: Linux 6.1.118 ohci_hcd
[    3.325919] usb usb4: SerialNumber: fc8c0000.usb
[    3.326271] hub 4-0:1.0: USB hub found
[    3.326310] hub 4-0:1.0: 1 port detected
[    3.327069] cpu cpu4: pvtm-volt-sel=2
[    3.328192] cpu cpu6: no pvtpll
[    3.329904] cpu cpu6: bin=0
[    3.330082] cpu cpu6: leakage=7
[    3.336653] cpu cpu6: pvtm=1635
[    3.340676] cpu cpu6: pvtm-volt-sel=2
[    3.342744] cpu cpu0: avs=0
[    3.344018] cpu cpu4: avs=0
[    3.345142] cpu cpu6: avs=0
[    3.345245] cpu cpu0: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=1608000000 h_table=0
[    3.345708] cpu cpu0: EM: created perf domain
[    3.346138] cpu cpu4: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=2208000000 h_table=0
[    3.352551] cpu cpu4: EM: created perf domain
[    3.353087] cpu cpu6: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=2208000000 h_table=0
[    3.357651] <<GTP-ERR>>[_do_i2c_write:434] I2c transfer error! (-6)
[    3.357663] <<GTP-ERR>>[gt1x_init:2344] Reset guitar failed!
[    3.357669] <<GTP-INF>>[gt1x_reset_guitar:807] GTP RESET!
[    3.363777] cpu cpu6: EM: created perf domain
[    3.365839] sdhci: Secure Digital Host Controller Interface driver
[    3.365852] sdhci: Copyright(c) Pierre Ossman
[    3.365860] Synopsys Designware Multimedia Card Interface Driver
[    3.366359] sdhci-pltfm: SDHCI platform and OF driver helper
[    3.368362] ledtrig-cpu: registered to indicate activity on CPUs
[    3.368409] arm-scmi firmware:scmi: Failed. SCMI protocol 17 not active.
[    3.368489] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[    3.368538] hid: raw HID events driver (C) Jiri Kosina
[    3.368804] usbcore: registered new interface driver usbhid
[    3.368818] usbhid: USB HID core driver
[    3.372029] rockchip-dfi fe060000.dfi: Failed to get pclk_ddr_mon_ch0
[    3.372051] rockchip-dfi: probe of fe060000.dfi failed with error -22
[    3.376346] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
[    3.377408] optee: probing for conduit method.
[    3.377431] optee: revision 3.13 (57604957)
[    3.377787] optee: dynamic shared memory is enabled
[    3.377918] optee: initialized driver
[    3.397681] mmc2: SDHCI controller on fe2e0000.mmc [fe2e0000.mmc] using ADMA
[    3.399196] rockchip-i2s-tdm fddf0000.i2s: CLK-ALWAYS-ON: mclk: 12288000, bclk: 3072000, fsync: 48000
[    3.399948] rockchip-i2s-tdm fe470000.i2s: Register PCM for TRCM mode
[    3.400442] rockchip-i2s-tdm fddf4000.i2s: CLK-ALWAYS-ON: mclk: 12288000, bclk: 3072000, fsync: 48000
[    3.400649] rockchip-i2s-tdm fddf8000.i2s: Init RX wait-time-ms: 50
[    3.407089] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
[    3.414448] debugfs: File 'Capture' in directory 'dapm' already present!
[    3.416056] input: rockchip,hdmiin rockchip,hdmiin as /devices/platform/hdmiin-sound/sound/card0/input2
[    3.417070] Initializing XFRM netlink socket
[    3.417092] IPsec XFRM device driver
[    3.417320] NET: Registered PF_INET6 protocol family
[    3.418205] Segment Routing with IPv6
[    3.418225] In-situ OAM (IOAM) with IPv6
[    3.418283] NET: Registered PF_PACKET protocol family
[    3.418525] Bluetooth: RFCOMM TTY layer initialized
[    3.418547] Bluetooth: RFCOMM socket layer initialized
[    3.418564] Bluetooth: RFCOMM ver 1.11
[    3.418579] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[    3.418588] Bluetooth: HIDP socket layer initialized
[    3.418595] [BT_RFKILL]: Enter rfkill_rk_init
[    3.418601] [WLAN_RFKILL]: Enter rfkill_wlan_init
[    3.418832] Freeing initrd memory: 7756K
[    3.419102] Key type dns_resolver registered
[    3.419577] imx415 3-001a: driver version: 00.01.08
[    3.419594] imx415 3-001a:  Get hdr mode failed! no hdr default
[    3.419610] imx415 3-001a: detect imx415 lane 4
[    3.419695] imx415 3-001a: could not get default pinstate
[    3.419703] imx415 3-001a: could not get sleep pinstate
[    3.419749] imx415 3-001a: supply dvdd not found, using dummy regulator
[    3.419849] imx415 3-001a: supply dovdd not found, using dummy regulator
[    3.419904] imx415 3-001a: supply avdd not found, using dummy regulator
[    3.427718] <<GTP-ERR>>[_do_i2c_write:434] I2c transfer error! (-6)
[    3.427737] <<GTP-ERR>>[gt1x_init:2344] Reset guitar failed!
[    3.427745] <<GTP-INF>>[gt1x_reset_guitar:807] GTP RESET!
[    3.428208] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
[    3.449303] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x1
[    3.470416] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
[    3.490271] imx415 3-001a: Unexpected sensor id(000000), ret(-5)
[    3.491459] rk-pcie fe150000.pcie: PCIe Linking... LTSSM is 0x0
[    3.491674] registered taskstats version 1
[    3.491703] Loading compiled-in X.509 certificates
[    3.492066] zswap: loaded using pool lzo/zbud
[    3.493539] Btrfs loaded, crc32c=crc32c-generic, zoned=no, fsverity=yes
[    3.493669] pstore: Using crash dump compression: deflate
[    3.493728] AppArmor: AppArmor sha1 policy hashing enabled
[    3.494176] rga3 fdb60000.rga: Adding to iommu group 2
[    3.494964] rga3 fdb60000.rga: probe successfully, irq = 43, hw_version:3.0.76831
[    3.495154] rga3 fdb70000.rga: Adding to iommu group 3
[    3.495808] rga3 fdb70000.rga: probe successfully, irq = 44, hw_version:3.0.76831
[    3.496627] mmc2: Host Software Queue enabled
[    3.496647] mmc2: new HS400 Enhanced strobe MMC card at address 0001
[    3.496893] rga2 fdb80000.rga: probe successfully, irq = 110, hw_version:3.2.63318
[    3.497170] mmcblk2: mmc2:0001 A3A444 230 GiB
[    3.497192] rga: IOMMU binding successfully, default mapping core[0x1]
[    3.497434] rga: Module initialized. v1.3.8
[    3.497804] <<GTP-ERR>>[_do_i2c_write:434] I2c transfer error! (-6)
[    3.497821] <<GTP-ERR>>[gt1x_init:2344] Reset guitar failed!
[    3.497829] <<GTP-INF>>[gt1x_reset_guitar:807] GTP RESET!
[    3.500156]  mmcblk2: p1 p2 p3 p4 p5 p6 p7 p8 p9
[    3.502071] mmcblk2boot0: mmc2:0001 A3A444 4.00 MiB
[    3.503225] mmcblk2boot1: mmc2:0001 A3A444 4.00 MiB
[    3.504380] mmcblk2rpmb: mmc2:0001 A3A444 4.00 MiB, chardev (236:0)
[    3.526396] vendor storage:20190527 ret = 0
[    3.539597] friendlyelec-board board: Serial         : 1f0bee682f135e89
[    3.541171] rockchip-csi2-dphy csi2-dphy0: csi2 dphy0 probe successfully!
[    3.541740] rk-pcie fe190000.pcie: invalid prsnt-gpios property in node
[    3.542140] rk-pcie fe170000.pcie: invalid prsnt-gpios property in node
[    3.542286] rk-pcie fe190000.pcie: can't get current limit.
[    3.542341] mpp_vdpu1 fdb51000.avsd-plus: Adding to iommu group 1
[    3.542692] mpp_vdpu1 fdb51000.avsd-plus: probe device
[    3.542787] rk-pcie fe190000.pcie: host bridge /pcie@fe190000 ranges:
[    3.542823] rk-pcie fe190000.pcie:       IO 0x00f4100000..0x00f41fffff -> 0x00f4100000
[    3.542844] rk-pcie fe190000.pcie:      MEM 0x00f4200000..0x00f4ffffff -> 0x00f4200000
[    3.542857] rk-pcie fe190000.pcie:      MEM 0x0a00000000..0x0a3fffffff -> 0x0a00000000
[    3.542894] mpp_vdpu1 fdb51000.avsd-plus: reset_group->rw_sem_on=0
[    3.542913] mpp_vdpu1 fdb51000.avsd-plus: reset_group->rw_sem_on=0
[    3.542926] rk-pcie fe190000.pcie: iATU unroll: enabled
[    3.542935] rk-pcie fe190000.pcie: iATU regions: 8 ob, 8 ib, align 64K, limit 8G
[    3.542973] mpp_vdpu1 fdb51000.avsd-plus: probing finish
[    3.543151] mpp_vdpu2 fdb50400.vdpu: Adding to iommu group 1
[    3.543205] mpp_vdpu2 fdb50400.vdpu: probe device
[    3.543327] mpp_vdpu2 fdb50400.vdpu: reset_group->rw_sem_on=0
[    3.543337] mpp_vdpu2 fdb50400.vdpu: reset_group->rw_sem_on=0
[    3.543353] mpp_vdpu2 fdb50400.vdpu: probing finish
[    3.543517] mpp_vepu2 fdba0000.jpege-core: Adding to iommu group 5
[    3.543604] mpp_vepu2 fdba0000.jpege-core: probing start
[    3.543776] mpp_vepu2 fdba0000.jpege-core: attach ccu success
[    3.543809] mpp_vepu2 fdba0000.jpege-core: probing finish
[    3.543970] mpp_vepu2 fdba4000.jpege-core: Adding to iommu group 6
[    3.544056] mpp_vepu2 fdba4000.jpege-core: probing start
[    3.544229] mpp_vepu2 fdba4000.jpege-core: attach ccu success
[    3.544258] mpp_vepu2 fdba4000.jpege-core: probing finish
[    3.544422] mpp_vepu2 fdba8000.jpege-core: Adding to iommu group 7
[    3.544511] mpp_vepu2 fdba8000.jpege-core: probing start
[    3.544666] mpp_vepu2 fdba8000.jpege-core: attach ccu success
[    3.544697] mpp_vepu2 fdba8000.jpege-core: probing finish
[    3.544859] mpp_vepu2 fdbac000.jpege-core: Adding to iommu group 8
[    3.544952] mpp_vepu2 fdbac000.jpege-core: probing start
[    3.545105] mpp_vepu2 fdbac000.jpege-core: attach ccu success
[    3.545133] mpp_vepu2 fdbac000.jpege-core: probing finish
[    3.545282] mpp-iep2 fdbb0000.iep: Adding to iommu group 9
[    3.545382] mpp-iep2 fdbb0000.iep: probe device
[    3.545889] mpp-iep2 fdbb0000.iep: probing finish
[    3.546098] mpp_jpgdec fdb90000.jpegd: Adding to iommu group 4
[    3.546339] mpp_jpgdec fdb90000.jpegd: probe device
[    3.546561] mpp_jpgdec fdb90000.jpegd: probing finish
[    3.546773] mpp_rkvdec2 fdc38100.rkvdec-core: Adding to iommu group 12
[    3.547171] mpp_rkvdec2 fdc38100.rkvdec-core: rkvdec-core, probing start
[    3.547365] mpp_rkvdec2 fdc38100.rkvdec-core: shared_niu_a is not found!
[    3.547374] rkvdec2_init:1250: No niu aclk reset resource define
[    3.547383] mpp_rkvdec2 fdc38100.rkvdec-core: shared_niu_h is not found!
[    3.547390] rkvdec2_init:1253: No niu hclk reset resource define
[    3.547443] mpp_rkvdec2 fdc38100.rkvdec-core: no regulator, devfreq is disabled
[    3.547543] mpp_rkvdec2 fdc38100.rkvdec-core: core_mask=00010001
[    3.547553] mpp_rkvdec2 fdc38100.rkvdec-core: attach ccu as core 0
[    3.547782] mpp_rkvdec2 fdc38100.rkvdec-core: sram_start 0x00000000ff001000
[    3.547791] mpp_rkvdec2 fdc38100.rkvdec-core: rcb_iova 0x00000000fff00000
[    3.547799] mpp_rkvdec2 fdc38100.rkvdec-core: sram_size 491520
[    3.547807] mpp_rkvdec2 fdc38100.rkvdec-core: rcb_size 1048576
[    3.547816] mpp_rkvdec2 fdc38100.rkvdec-core: min_width 512
[    3.547826] mpp_rkvdec2 fdc38100.rkvdec-core: rcb_info_count 20
[    3.547833] mpp_rkvdec2 fdc38100.rkvdec-core: [136, 24576]
[    3.547842] mpp_rkvdec2 fdc38100.rkvdec-core: [137, 49152]
[    3.547849] mpp_rkvdec2 fdc38100.rkvdec-core: [141, 90112]
[    3.547857] mpp_rkvdec2 fdc38100.rkvdec-core: [140, 49152]
[    3.547865] mpp_rkvdec2 fdc38100.rkvdec-core: [139, 180224]
[    3.547872] mpp_rkvdec2 fdc38100.rkvdec-core: [133, 49152]
[    3.547880] mpp_rkvdec2 fdc38100.rkvdec-core: [134, 8192]
[    3.547887] mpp_rkvdec2 fdc38100.rkvdec-core: [135, 4352]
[    3.547895] mpp_rkvdec2 fdc38100.rkvdec-core: [138, 13056]
[    3.547903] mpp_rkvdec2 fdc38100.rkvdec-core: [142, 291584]
[    3.547946] mpp_rkvdec2 fdc38100.rkvdec-core: probing finish
[    3.548127] mpp_rkvdec2 fdc48100.rkvdec-core: Adding to iommu group 13
[    3.548416] mpp_rkvdec2 fdc48100.rkvdec-core: rkvdec-core, probing start
[    3.548598] mpp_rkvdec2 fdc48100.rkvdec-core: shared_niu_a is not found!
[    3.548606] rkvdec2_init:1250: No niu aclk reset resource define
[    3.548615] mpp_rkvdec2 fdc48100.rkvdec-core: shared_niu_h is not found!
[    3.548621] rkvdec2_init:1253: No niu hclk reset resource define
[    3.548670] mpp_rkvdec2 fdc48100.rkvdec-core: no regulator, devfreq is disabled
[    3.548728] mpp_rkvdec2 fdc48100.rkvdec-core: core_mask=00020002
[    3.548751] mpp_rkvdec2 fdc48100.rkvdec-core: attach ccu as core 1
[    3.549020] mpp_rkvdec2 fdc48100.rkvdec-core: sram_start 0x00000000ff079000
[    3.549029] mpp_rkvdec2 fdc48100.rkvdec-core: rcb_iova 0x00000000ffe00000
[    3.549036] mpp_rkvdec2 fdc48100.rkvdec-core: sram_size 487424
[    3.549044] mpp_rkvdec2 fdc48100.rkvdec-core: rcb_size 1048576
[    3.549052] mpp_rkvdec2 fdc48100.rkvdec-core: min_width 512
[    3.549062] mpp_rkvdec2 fdc48100.rkvdec-core: rcb_info_count 20
[    3.549069] mpp_rkvdec2 fdc48100.rkvdec-core: [136, 24576]
[    3.549077] mpp_rkvdec2 fdc48100.rkvdec-core: [137, 49152]
[    3.549084] mpp_rkvdec2 fdc48100.rkvdec-core: [141, 90112]
[    3.549092] mpp_rkvdec2 fdc48100.rkvdec-core: [140, 49152]
[    3.549099] mpp_rkvdec2 fdc48100.rkvdec-core: [139, 180224]
[    3.549107] mpp_rkvdec2 fdc48100.rkvdec-core: [133, 49152]
[    3.549114] mpp_rkvdec2 fdc48100.rkvdec-core: [134, 8192]
[    3.549122] mpp_rkvdec2 fdc48100.rkvdec-core: [135, 4352]
[    3.549129] mpp_rkvdec2 fdc48100.rkvdec-core: [138, 13056]
[    3.549137] mpp_rkvdec2 fdc48100.rkvdec-core: [142, 291584]
[    3.549178] mpp_rkvdec2 fdc48100.rkvdec-core: probing finish
[    3.549376] mpp_rkvenc2 fdbd0000.rkvenc-core: Adding to iommu group 10
[    3.549588] mpp_rkvenc2 fdbd0000.rkvenc-core: probing start
[    3.549791] mpp_rkvenc2 fdbd0000.rkvenc-core: no pvtpll
[    3.550237] mpp_rkvenc2 fdbd0000.rkvenc-core: bin=0
[    3.550487] mpp_rkvenc2 fdbd0000.rkvenc-core: leakage=11
[    3.550500] mpp_rkvenc2 fdbd0000.rkvenc-core: leakage-volt-sel=0
[    3.551400] mpp_rkvenc2 fdbd0000.rkvenc-core: avs=0
[    3.551419] mpp_rkvenc2 fdbd0000.rkvenc-core: l=-2147483648 h=2147483647 hyst=0 l_limit=0 h_limit=0 h_table=0
[    3.552135] mpp_rkvenc2 fdbd0000.rkvenc-core: attach ccu as core 0
[    3.552184] mpp_rkvenc2 fdbd0000.rkvenc-core: probing finish
[    3.552411] mpp_rkvenc2 fdbe0000.rkvenc-core: Adding to iommu group 11
[    3.552633] mpp_rkvenc2 fdbe0000.rkvenc-core: probing start
[    3.552837] mpp_rkvenc2 fdbe0000.rkvenc-core: no pvtpll
[    3.553077] mpp_rkvenc2 fdbe0000.rkvenc-core: bin=0
[    3.553269] mpp_rkvenc2 fdbe0000.rkvenc-core: leakage=11
[    3.553280] mpp_rkvenc2 fdbe0000.rkvenc-core: leakage-volt-sel=0
[    3.554105] mpp_rkvenc2 fdbe0000.rkvenc-core: avs=0
[    3.554122] mpp_rkvenc2 fdbe0000.rkvenc-core: l=-2147483648 h=2147483647 hyst=0 l_limit=0 h_limit=0 h_table=0
[    3.554438] mpp_rkvenc2 fdbe0000.rkvenc-core: attach ccu as core 1
[    3.554478] mpp_rkvenc2 fdbe0000.rkvenc-core: probing finish
[    3.554656] mpp_av1dec fdc70000.av1d: Adding to iommu group 14
[    3.554945] mpp_av1dec fdc70000.av1d: probing start
[    3.555183] mpp_av1dec fdc70000.av1d: probing finish
[    3.555431] rockchip-vop2 fdd90000.vop: Adding to iommu group 17
[    3.556573] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] vp0 assign plane mask: Cluster0 | Cluster1 | Esmart0[0x7], primary plane phy id: Cluster0[0]
[    3.556597] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] vp1 assign plane mask: Esmart1 | Cluster2 | Esmart2[0x148], primary plane phy id: Cluster2[6]
[    3.556611] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] vp2 assign plane mask: Cluster3 | Esmart3[0x280], primary plane phy id: Esmart3[9]
[    3.556624] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] vp3 assign plane mask: [0x0], primary plane phy id: INVALID[-1]
[    3.556818] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] Esmart0-win0 as cursor plane for vp0
[    3.556920] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] Esmart1-win0 as cursor plane for vp1
[    3.557014] rockchip-vop2 fdd90000.vop: [drm:vop2_bind] Cluster3-win0 as cursor plane for vp2
[    3.571056] <<GTP-ERR>>[_do_i2c_write:434] I2c transfer error! (-6)
[    3.571087] <<GTP-ERR>>[gt1x_init:2344] Reset guitar failed!
[    3.571100] <<GTP-INF>>[gt1x_reset_guitar:807] GTP RESET!
[    3.572081] rockchip-vop2 fdd90000.vop: no pvtpll
[    3.572097] rockchip-vop2 fdd90000.vop: bin=0
[    3.572312] rockchip-vop2 fdd90000.vop: leakage=27
[    3.572324] rockchip-vop2 fdd90000.vop: leakage-volt-sel=0
[    3.572808] rockchip-vop2 fdd90000.vop: avs=0
[    3.572889] rockchip-vop2 fdd90000.vop: l=-2147483648 h=2147483647 hyst=0 l_limit=0 h_limit=0 h_table=0
[    3.573186] rockchip-vop2 fdd90000.vop: Supported VOP aclk dvfs, normal mode:500000000, reset mode:0, advanced mode:750000000
[    3.573217] rockchip-drm display-subsystem: bound fdd90000.vop (ops 0xffffffc00939e040)
[    3.574128] dwhdmi-rockchip fde80000.hdmi: registered ddc I2C bus driver
[    3.574603] rockchip-drm display-subsystem: bound fde80000.hdmi (ops 0xffffffc0093b59e0)
[    3.575509] dwhdmi-rockchip fdea0000.hdmi: registered ddc I2C bus driver
[    3.576214] rockchip-drm display-subsystem: bound fdea0000.hdmi (ops 0xffffffc0093b59e0)
[    3.576298] rockchip-drm display-subsystem: bound fde30000.dsi (ops 0xffffffc0093b83e8)
[    3.576673] rockchip-drm display-subsystem: bound fde50000.dp (ops 0xffffffc0093b8960)
[    3.578563] dw-hdmi-qp-hdcp dw-hdmi-qp-hdcp.9.auto: dw_hdcp_qp_hdcp_probe success
[    3.579015] dw-hdmi-qp-hdcp dw-hdmi-qp-hdcp.12.auto: dw_hdcp_qp_hdcp_probe success
[    3.579514] [drm] Initialized rockchip 4.0.0 20140818 for display-subsystem on minor 0
[    3.579581] rockchip-drm display-subsystem: route-dsi1: failed to get logo,offset
[    3.641317] <<GTP-ERR>>[_do_i2c_write:434] I2c transfer error! (-6)
[    3.641347] <<GTP-ERR>>[gt1x_init:2344] Reset guitar failed!
[    3.641358] <<GTP-ERR>>[gt1x_init:2370] Init failed, use default setting
[    3.641702] <<GTP-ERR>>[_do_i2c_read:392] I2c Transfer error! (-6)
[    3.641726] <<GTP-ERR>>[gt1x_get_chip_type:915] I2c communication error.
[    3.641738] <<GTP-ERR>>[gt1x_init:2380] Get chip type failed!
[    3.642067] <<GTP-ERR>>[_do_i2c_read:392] I2c Transfer error! (-6)
[    3.642091] <<GTP-ERR>>[gt1x_read_version:864] Read version failed!
[    3.647693] rk-pcie fe170000.pcie: can't get current limit.
[    3.648229] rk-pcie fe170000.pcie: host bridge /pcie@fe170000 ranges:
[    3.648275] rk-pcie fe170000.pcie:       IO 0x00f2100000..0x00f21fffff -> 0x00f2100000
[    3.648302] rk-pcie fe170000.pcie:      MEM 0x00f2200000..0x00f2ffffff -> 0x00f2200000
[    3.648323] rk-pcie fe170000.pcie:      MEM 0x0980000000..0x09bfffffff -> 0x0980000000
[    3.648391] rk-pcie fe170000.pcie: iATU unroll: enabled
[    3.648404] rk-pcie fe170000.pcie: iATU regions: 8 ob, 8 ib, align 64K, limit 8G
[    3.680955] dwhdmi-rockchip fde80000.hdmi: i2c read time out!
[    3.714348] rk-pcie fe180000.pcie: can't get current limit.
[    3.715230] rk-pcie fe180000.pcie: host bridge /pcie@fe180000 ranges:
[    3.715333] rk-pcie fe180000.pcie:       IO 0x00f3100000..0x00f31fffff -> 0x00f3100000
[    3.715397] rk-pcie fe180000.pcie:      MEM 0x00f3200000..0x00f3ffffff -> 0x00f3200000
[    3.715447] rk-pcie fe180000.pcie:      MEM 0x09c0000000..0x09ffffffff -> 0x09c0000000
[    3.715575] rk-pcie fe180000.pcie: iATU unroll: enabled
[    3.715606] rk-pcie fe180000.pcie: iATU regions: 8 ob, 8 ib, align 64K, limit 8G
[    3.747958] <<GTP-ERR>>[_do_i2c_read:392] I2c Transfer error! (-6)
[    3.747995] <<GTP-ERR>>[gt1x_read_version:864] Read version failed!
[    3.800995] rk-pcie fe190000.pcie: PCIe Link up, LTSSM is 0x130011
[    3.801014] rk-pcie fe190000.pcie: PCIe Gen.2 x1 link up
[    3.801165] rk-pcie fe190000.pcie: PCI host bridge to bus 0004:40
[    3.801175] pci_bus 0004:40: root bus resource [bus 40-4f]
[    3.801187] pci_bus 0004:40: root bus resource [io  0x100000-0x1fffff] (bus address [0xf4100000-0xf41fffff])
[    3.801195] pci_bus 0004:40: root bus resource [mem 0xf4200000-0xf4ffffff]
[    3.801202] pci_bus 0004:40: root bus resource [mem 0xa00000000-0xa3fffffff pref]
[    3.801234] pci 0004:40:00.0: [1d87:3588] type 01 class 0x060400
[    3.801260] pci 0004:40:00.0: reg 0x38: [mem 0x00000000-0x0000ffff pref]
[    3.801322] pci 0004:40:00.0: supports D1 D2
[    3.801328] pci 0004:40:00.0: PME# supported from D0 D1 D3hot
[    3.814565] pci 0004:40:00.0: Primary bus is hard wired to 0
[    3.814573] pci 0004:40:00.0: bridge configuration invalid ([bus 01-ff]), reconfiguring
[    3.814781] pci 0004:41:00.0: [10ec:8125] type 00 class 0x020000
[    3.814843] pci 0004:41:00.0: reg 0x10: [io  0x0000-0x00ff]
[    3.814916] pci 0004:41:00.0: reg 0x18: [mem 0x00000000-0x0000ffff 64bit]
[    3.814964] pci 0004:41:00.0: reg 0x20: [mem 0x00000000-0x00003fff 64bit]
[    3.815355] pci 0004:41:00.0: supports D1 D2
[    3.815360] pci 0004:41:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    3.823995] Console: switching to colour frame buffer device 240x67
[    3.824308] pci_bus 0004:41: busn_res: [bus 41-4f] end is updated to 41
[    3.824341] pci 0004:40:00.0: BAR 8: assigned [mem 0xf4200000-0xf42fffff]
[    3.824355] pci 0004:40:00.0: BAR 6: assigned [mem 0xf4300000-0xf430ffff pref]
[    3.824364] pci 0004:40:00.0: BAR 7: assigned [io  0x100000-0x100fff]
[    3.824377] pci 0004:41:00.0: BAR 2: assigned [mem 0xf4200000-0xf420ffff 64bit]
[    3.824418] pci 0004:41:00.0: BAR 4: assigned [mem 0xf4210000-0xf4213fff 64bit]
[    3.824458] pci 0004:41:00.0: BAR 0: assigned [io  0x100000-0x1000ff]
[    3.824475] pci 0004:40:00.0: PCI bridge to [bus 41]
[    3.824482] pci 0004:40:00.0:   bridge window [io  0x100000-0x100fff]
[    3.824490] pci 0004:40:00.0:   bridge window [mem 0xf4200000-0xf42fffff]
[    3.826697] pcieport 0004:40:00.0: PME: Signaling with IRQ 147
[    3.840845] rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device
[    3.841276] rockchip-drm display-subsystem: [drm] run display error_event monitor
[    3.842467] panthor fb000000.gpu: [drm] clock rate = 198000000
[    3.844411] panthor fb000000.gpu: EM: created perf domain
[    3.845007] panthor fb000000.gpu: [drm] mali-g610 id 0xa867 major 0x0 minor 0x0 status 0x5
[    3.845026] panthor fb000000.gpu: [drm] Features: L2:0x7120306 Tiler:0x809 Mem:0x301 MMU:0x2830 AS:0xff
[    3.845042] panthor fb000000.gpu: [drm] shader_present=0x50005 l2_present=0x1 tiler_present=0x1
[    3.848104] panthor fb000000.gpu: [drm] Firmware protected mode entry not be supported, ignoring
[    3.848461] panthor fb000000.gpu: [drm] CSF FW v1.5.0, Features 0x0 Instrumentation features 0x71
[    3.849438] [drm] Initialized panthor 1.0.0 20230801 for fb000000.gpu on minor 1
[    3.852305] dwmmc_rockchip fe2c0000.mmc: No normal pinctrl state
[    3.852323] dwmmc_rockchip fe2c0000.mmc: No idle pinctrl state
[    3.852444] dwmmc_rockchip fe2c0000.mmc: IDMAC supports 32-bit address mode.
[    3.852472] dwmmc_rockchip fe2c0000.mmc: Using internal DMA controller.
[    3.852487] dwmmc_rockchip fe2c0000.mmc: Version ID is 270a
[    3.852537] dwmmc_rockchip fe2c0000.mmc: DW MMC controller at irq 151,32 bit host data width,256 deep fifo
[    3.854695] <<GTP-ERR>>[_do_i2c_read:392] I2c Transfer error! (-6)
[    3.854721] <<GTP-ERR>>[gt1x_read_version:864] Read version failed!
[    3.857440] input: realtek,rt5616-codec Headphone Jack as /devices/platform/rt5616-sound/sound/card1/input3
[    3.862245] debugfs: File 'Capture' in directory 'dapm' already present!
[    3.866598] mmc_host mmc0: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)
[    3.870050] rkcif rkcif-mipi-lvds2: clear unready subdev num: 1
[    3.871110] rkcif-mipi-lvds2: rkcif_update_sensor_info: stream[0] get remote terminal sensor failed!
[    3.871146] rkcif-mipi-lvds2: Async subdev notifier completed
[    3.871182] rkcif-mipi-lvds2: There is not terminal subdev, not synchronized with ISP
[    3.871300] rkcif-mipi-lvds2: There is not terminal subdev, not synchronized with ISP
[    3.872095] clk: Disabling unused clocks
[    3.873993] rockchip-pm rockchip-suspend: not set pwm-regulator-config
[    3.874774] rockchip-suspend not set sleep-mode-config for mem-lite
[    3.874797] rockchip-suspend not set wakeup-config for mem-lite
[    3.874820] rockchip-suspend not set sleep-mode-config for mem-ultra
[    3.874836] rockchip-suspend not set wakeup-config for mem-ultra
[    3.877438] rkisp rkisp0-vir0: clear unready subdev num: 1
[    3.877912] rkisp0-vir0: Async subdev notifier completed
[    3.877943] ALSA device list:
[    3.877958]   #0: rockchip,hdmiin
[    3.877976]   #1: realtek,rt5616-codec
[    3.877993]   #2: rockchip,hdmi0
[    3.878009]   #3: rockchip,dp0
[    3.878024]   #4: rockchip,hdmi1
[    3.904390] rk-pcie fe170000.pcie: PCIe Link up, LTSSM is 0x130011
[    3.904417] rk-pcie fe170000.pcie: PCIe Gen.2 x1 link up
[    3.904560] rk-pcie fe170000.pcie: PCI host bridge to bus 0002:20
[    3.904578] pci_bus 0002:20: root bus resource [bus 20-2f]
[    3.904596] pci_bus 0002:20: root bus resource [io  0x200000-0x2fffff] (bus address [0xf2100000-0xf21fffff])
[    3.904611] pci_bus 0002:20: root bus resource [mem 0xf2200000-0xf2ffffff]
[    3.904624] pci_bus 0002:20: root bus resource [mem 0x980000000-0x9bfffffff pref]
[    3.904663] pci 0002:20:00.0: [1d87:3588] type 01 class 0x060400
[    3.904696] pci 0002:20:00.0: reg 0x38: [mem 0x00000000-0x0000ffff pref]
[    3.904764] pci 0002:20:00.0: supports D1 D2
[    3.904777] pci 0002:20:00.0: PME# supported from D0 D1 D3hot
[    3.915883] pci 0002:20:00.0: Primary bus is hard wired to 0
[    3.915905] pci 0002:20:00.0: bridge configuration invalid ([bus 01-ff]), reconfiguring
[    3.916105] pci 0002:21:00.0: [10ec:8125] type 00 class 0x020000
[    3.916175] pci 0002:21:00.0: reg 0x10: [io  0x0000-0x00ff]
[    3.916253] pci 0002:21:00.0: reg 0x18: [mem 0x00000000-0x0000ffff 64bit]
[    3.916307] pci 0002:21:00.0: reg 0x20: [mem 0x00000000-0x00003fff 64bit]
[    3.916693] pci 0002:21:00.0: supports D1 D2
[    3.916706] pci 0002:21:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    3.924361] pci_bus 0002:21: busn_res: [bus 21-2f] end is updated to 21
[    3.924428] pci 0002:20:00.0: BAR 8: assigned [mem 0xf2200000-0xf22fffff]
[    3.924457] pci 0002:20:00.0: BAR 6: assigned [mem 0xf2300000-0xf230ffff pref]
[    3.924484] pci 0002:20:00.0: BAR 7: assigned [io  0x200000-0x200fff]
[    3.924514] pci 0002:21:00.0: BAR 2: assigned [mem 0xf2200000-0xf220ffff 64bit]
[    3.924579] pci 0002:21:00.0: BAR 4: assigned [mem 0xf2210000-0xf2213fff 64bit]
[    3.924643] pci 0002:21:00.0: BAR 0: assigned [io  0x200000-0x2000ff]
[    3.924679] pci 0002:20:00.0: PCI bridge to [bus 21]
[    3.924702] pci 0002:20:00.0:   bridge window [io  0x200000-0x200fff]
[    3.924725] pci 0002:20:00.0:   bridge window [mem 0xf2200000-0xf22fffff]
[    3.928569] pcieport 0002:20:00.0: PME: Signaling with IRQ 162
[    3.961082] <<GTP-INF>>[gt1x_read_version:883] IC VERSION:GT_000000(Patch)_0000(Mask)_00(SensorID)
[    3.961117] <<GTP-INF>>[gt1x_init_panel:608] Config group0 used, length:239
[    3.961498] <<GTP-ERR>>[_do_i2c_read:392] I2c Transfer error! (-6)
[    3.961523] <<GTP-ERR>>[gt1x_init_panel:642] Failed to read CONFIG data, sensor_id 0
[    3.961537] <<GTP-ERR>>[gt1x_init:2392] Init panel failed.
[    3.961933] <<GTP-ERR>>[gt1x_ts_probe:573] GTP init failed!!!
[    3.961972] Goodix-TS-GT1X: probe of 4-0014 failed with error -2147483644
[    3.970364] Freeing unused kernel memory: 6464K
[    3.970584] Run /init as init process
[    3.974355] rk-pcie fe180000.pcie: PCIe Link up, LTSSM is 0x30011
[    3.974395] rk-pcie fe180000.pcie: PCIe Gen.1 x1 link up
[    3.974653] rk-pcie fe180000.pcie: PCI host bridge to bus 0003:30
[    3.974681] pci_bus 0003:30: root bus resource [bus 30-3f]
[    3.974709] pci_bus 0003:30: root bus resource [io  0x300000-0x3fffff] (bus address [0xf3100000-0xf31fffff])
[    3.974732] pci_bus 0003:30: root bus resource [mem 0xf3200000-0xf3ffffff]
[    3.974754] pci_bus 0003:30: root bus resource [mem 0x9c0000000-0x9ffffffff pref]
[    3.974814] pci 0003:30:00.0: [1d87:3588] type 01 class 0x060400
[    3.974864] pci 0003:30:00.0: reg 0x38: [mem 0x00000000-0x0000ffff pref]
[    3.974972] pci 0003:30:00.0: supports D1 D2
[    3.974993] pci 0003:30:00.0: PME# supported from D0 D1 D3hot
Loading, please wait...
[    3.992974] pci 0003:30:00.0: Primary bus is hard wired to 0
[    3.993012] pci 0003:30:00.0: bridge configuration invalid ([bus 01-ff]), reconfiguring
[    3.993317] pci 0003:31:00.0: [10ec:c822] type 00 class 0x028000
[    3.993428] pci 0003:31:00.0: reg 0x10: [io  0x0000-0x00ff]
[    3.993553] pci 0003:31:00.0: reg 0x18: [mem 0x00000000-0x0000ffff 64bit]
[    3.994115] pci 0003:31:00.0: supports D1 D2
[    3.994136] pci 0003:31:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    4.004492] pci_bus 0003:31: busn_res: [bus 31-3f] end is updated to 31
[    4.004564] pci 0003:30:00.0: BAR 8: assigned [mem 0xf3200000-0xf32fffff]
[    4.004594] pci 0003:30:00.0: BAR 6: assigned [mem 0xf3300000-0xf330ffff pref]
[    4.004621] pci 0003:30:00.0: BAR 7: assigned [io  0x300000-0x300fff]
[    4.004653] pci 0003:31:00.0: BAR 2: assigned [mem 0xf3200000-0xf320ffff 64bit]
[    4.004729] pci 0003:31:00.0: BAR 0: assigned [io  0x300000-0x3000ff]
[    4.004770] pci 0003:30:00.0: PCI bridge to [bus 31]
[    4.004792] pci 0003:30:00.0:   bridge window [io  0x300000-0x300fff]
[    4.004816] pci 0003:30:00.0:   bridge window [mem 0xf3200000-0xf32fffff]
[    4.008594] pcieport 0003:30:00.0: PME: Signaling with IRQ 172
Starting systemd-udevd version 255.4-1ubuntu8.4
[    4.457581] usb 4-1: new full-speed USB device number 2 using ohci-platform
[    4.683697] usb 4-1: New USB device found, idVendor=0bda, idProduct=c822, bcdDevice= 0.00
[    4.683760] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    4.683795] usb 4-1: Product: Bluetooth Radio
[    4.683825] usb 4-1: Manufacturer: Realtek
[    4.683855] usb 4-1: SerialNumber: 00e04c000001
[    4.808082] Freeing drm_logo memory: 3000K
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... Scanning for Btrfs filesystems
done.
[    5.284691] EXT4-fs (mmcblk2p8): mounted filesystem with ordered data mode. Quota mode: none.
Begin: Will now check userdata file system ... fsck from util-linux 2.39.3
[/usr/sbin/fsck.ext4 (1) -- /dev/mmcblk2p9] fsck.ext4 -a -C0 /dev/mmcblk2p9
userdata: recovering journal
userdata: clean, 287/11584000 files, 764125/59298811 blocks
done.
[    5.465594] EXT4-fs (mmcblk2p9): mounted filesystem with ordered data mode. Quota mode: none.
[    5.471563] EXT4-fs (mmcblk2p9): re-mounted. Quota mode: none.
[    5.475746] overlayfs: "xino" feature enabled using 32 upper inode bits.
done.
Begin: Running /scripts/local-bottom ... done.
Begin: Running /scripts/init-bottom ... [    5.485899] rk_hdmirx fdee0000.hdmirx-controller: hdmirx_cancel_cpu_limit_freq freq qos nod add
done.
[    5.513135] rk-pcie fe150000.pcie: PCIe Link Fail, LTSSM is 0x0, hw_retries=0
[    5.513187] rk-pcie fe150000.pcie: failed to initialize host

Welcome to Debian GNU/Linux 11 (bullseye)!

Configuration file /lib/systemd/system/rkaiq_3A.service is marked world-writable. Please remove world writability permission bits. Proceeding anyway.
/lib/systemd/system/bootanim.service:9: Unit configured to use KillMode=none. This is unsafe, as it disables systemd's process lifecycle management for the service. Please update your service to use a safer KillMode=, such as 'mixed' or 'control-group'. Support for KillMode=none is deprecated and will eventually be removed.
[  OK  ] Created slice system-getty.slice.
[  OK  ] Created slice system-modprobe.slice.
[  OK  ] Created slice system-serial\x2dgetty.slice.
[  OK  ] Created slice User and Session Slice.
[  OK  ] Started Dispatch Password …ts to Console Directory Watch.
[  OK  ] Started Forward Password R…uests to Wall Directory Watch.
[  OK  ] Set up automount Arbitrary…s File System Automount Point.
[  OK  ] Reached target Local Encrypted Volumes.
[  OK  ] Reached target Remote File Systems.
[  OK  ] Reached target Slices.
[  OK  ] Reached target Swap.
[  OK  ] Listening on Syslog Socket.
[  OK  ] Listening on initctl Compatibility Named Pipe.
[  OK  ] Listening on Journal Audit Socket.
[  OK  ] Listening on Journal Socket (/dev/log).
[  OK  ] Listening on Journal Socket.
[  OK  ] Listening on udev Control Socket.
[  OK  ] Listening on udev Kernel Socket.
         Mounting Huge Pages File System...
         Mounting POSIX Message Queue File System...
         Mounting Kernel Debug File System...
         Mounting Kernel Trace File System...
         Starting Set the console keyboard layout...
         Starting Create list of st…odes for the current kernel...
         Starting Load Kernel Module configfs...
         Starting Load Kernel Module drm...
         Starting Load Kernel Module fuse...
[  OK  ] Started Nameserver information manager.
[  OK  ] Reached target Network (Pre).
         Starting Enable Rockchip camera engine rkaiq...
         Starting Journal Service...
         Starting Load Kernel Modules...
         Starting Remount Root and Kernel File Systems...
         Starting Coldplug All udev Devices...
[  OK  ] Mounted Huge Pages File System.
[  OK  ] Mounted POSIX Message Queue File System.
[  OK  ] Mounted Kernel Debug File System.
[  OK  ] Mounted Kernel Trace File System.
[  OK  ] Finished Create list of st… nodes for the current kernel.
[  OK  ] Finished Load Kernel Module configfs.
[  OK  ] Finished Load Kernel Module drm.
[  OK  ] Finished Load Kernel Module fuse.
[  OK  ] Started Enable Rockchip camera engine rkaiq.
         Mounting FUSE Control File System...
         Mounting Kernel Configuration File System...
[  OK  ] Finished Remount Root and Kernel File Systems.
[  OK  ] Mounted FUSE Control File System.
         Starting Platform Persistent Storage Archival...
         Starting Load/Save Random Seed...
         Starting Create System Users...
[  OK  ] Mounted Kernel Configuration File System.
[    5.998746] r8125: loading out-of-tree module taints kernel.
[    6.000433] r8125 2.5Gigabit Ethernet driver 9.010.01-NAPI loaded
[    6.000513] r8125 0004:41:00.0: enabling device (0000 -> 0003)
[  OK  ] Finished Load/Save Random Seed.
[    6.018575] r8125: This product is covered by one or more of the following patents: US6,570,884, US6,115,776, and US6,327,625.
[  OK  ] Finished Create System Users.
[  OK  ] Finished Platform Persistent Storage Archival.
         Starting Create Static Device Nodes in /dev...
[    6.020607] r8125  Copyright (C) 2022 Realtek NIC software team <nicfae@realtek.com>
[    6.020607]  This program comes with ABSOLUTELY NO WARRANTY; for details, please see <http://www.gnu.org/licenses/>.
[    6.020607]  This is free software, and you are welcome to redistribute it under certain conditions; see <http://www.gnu.org/licenses/>.
[    6.020755] r8125 2.5Gigabit Ethernet driver 9.010.01-NAPI loaded
[    6.020812] r8125 0002:21:00.0: enabling device (0000 -> 0003)
[    6.039715] r8125: This product is covered by one or more of the following patents: US6,570,884, US6,115,776, and US6,327,625.
[    6.041745] r8125  Copyright (C) 2022 Realtek NIC software team <nicfae@realtek.com>
[    6.041745]  This program comes with ABSOLUTELY NO WARRANTY; for details, please see <http://www.gnu.org/licenses/>.
[  OK  ] Finished Load Kernel Modules.
[    6.041745]  This is free software, and you are welcome to redistribute it under certain conditions; see <http://www.gnu.org/licenses/>.
         Starting Apply Kernel Variables...
[  OK  ] Finished Create Static Device Nodes in /dev.
         Starting Rule-based Manage…for Device Events and Files...
[  OK  ] Finished Apply Kernel Variables.
[  OK  ] Started Rule-based Manager for Device Events and Files.
[  OK  ] Started Journal Service.
         Starting Flush Journal to Persistent Storage...
[    6.168758] systemd-journald[311]: Received client request to flush runtime journal.
[    6.175480] systemd-journald[311]: File /var/log/journal/215cc413b7d841ea9cc0c710aa1fd3ed/system.journal corrupted or uncleanly shut down, renaming and replacing.
[  OK  ] Finished Flush Journal to Persistent Storage.
[  OK  ] Finished Coldplug All udev Devices.
         Starting Helper to synchronize boot up for ifupdown...
[  OK  ] Finished Helper to synchronize boot up for ifupdown.
[    6.311641] RKNPU fdab0000.npu: Adding to iommu group 0
[    6.316515] RKNPU fdab0000.npu: RKNPU: rknpu iommu is enabled, using iommu mode
[    6.329074] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdab0000-0xfdabffff]
[    6.329099] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdac0000-0xfdacffff]
[    6.329107] RKNPU fdab0000.npu: can't request region for resource [mem 0xfdad0000-0xfdadffff]
[    6.347893] [drm] Initialized rknpu 0.9.8 20240828 for fdab0000.npu on minor 2
         Starting Enable Rockchip camera engine rkaiq...
[  OK  ] Started Enable Rockchip camera engine rkaiq.
[    6.371906] RKNPU fdab0000.npu: no pvtpll
[    6.373986] RKNPU fdab0000.npu: RKNPU: bin=0
[    6.374165] RKNPU fdab0000.npu: leakage=6
[    6.374535] debugfs: Directory 'fdab0000.npu-rknpu' with parent 'vdd_npu_s0' already present!
[    6.381250] RKNPU fdab0000.npu: pvtm=829
[    6.385454] RKNPU fdab0000.npu: pvtm-volt-sel=1
[    6.386315] debugfs: Directory 'fdab0000.npu-rknpu' with parent 'vdd_npu_s0' already present!
[    6.388039] RKNPU fdab0000.npu: avs=0
[    6.388420] cryptodev: driver 1.12 loaded.
[    6.398138] RKNPU fdab0000.npu: l=10000 h=85000 hyst=5000 l_limit=0 h_limit=800000000 h_table=0
[    6.399366] rk-crypto fe370000.crypto: invalid resource
[    6.401868] rk-crypto fe370000.crypto: register to cryptodev ok!
[    6.401895] rk-crypto fe370000.crypto: CRYPTO V2.0.0.0 Accelerator successfully registered
[    6.402182] usbcore: registered new interface driver btusb
[    6.402665] Bluetooth: hci0: RTL: examining hci_ver=0a hci_rev=000c lmp_ver=0a lmp_subver=8822
[    6.404649] Bluetooth: hci0: RTL: rom_version status=0 version=3
[    6.404655] Bluetooth: hci0: RTL: loading rtl_bt/rtl8822cu_fw.bin
[    6.406546] Bluetooth: hci0: RTL: loading rtl_bt/rtl8822cu_config.bin
[    6.406922] Bluetooth: hci0: RTL: cfg_sz 6, total sz 35990
[    6.441138] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    6.448707] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    6.450562] cfg80211: Loaded X.509 cert 'wens: 61c038651aabdcf94bd0ac7ff06c7248db18c600'
[    6.455024] at24 4-0050: supply vcc not found, using dummy regulator
[  OK  ] Found device /dev/ttyFIQ0.
[    6.489565] at24 6-0053: supply vcc not found, using dummy regulator
[  OK  ] Finished Set the console keyboard layout.
[    6.492688] stream_cif_mipi_id0: update sensor info failed -19
[    6.493387] rkcif_tools_id2: update sensor info failed -19
[    6.496164] rkcif_scale_ch1: update sensor info failed -19
[    6.516556] rtw88_8822ce: disagrees about version of symbol rtw8822c_hw_spec
[    6.516570] rtw88_8822ce: Unknown symbol rtw8822c_hw_spec (err -22)
[    6.539104] rtl88x2ce 0003:31:00.0: enabling device (0000 -> 0003)
[  OK  ] Created slice system-systemd\x2dbacklight.slice.
[  OK  ] Reached target Local File Systems (Pre).
[  OK  ] Reached target Local File Systems.
[  OK  ] Reached target Hardware activated USB gadget.
         Starting Boot time animation...
         Starting Set console font and keymap...
         Starting Raise network interfaces...
         Starting Enable Rockchip camera engine rkaiq...
         Starting Load/Save Screen … of backlight:pwm-backlight...
         Starting Enable support fo…l executable binary formats...
         Starting Create Volatile Files and Directories...
[  OK  ] Started Enable Rockchip camera engine rkaiq.
[  OK  ] Listening on Load/Save RF …itch Status /dev/rfkill Watch.
         Mounting Arbitrary Executable File Formats File System...
         Starting Load/Save RF Kill Switch Status...
[  OK  ] Mounted Arbitrary Executable File Formats File System.
[  OK  ] Finished Enable support fo…nal executable binary formats.
[  OK  ] Finished Load/Save Screen …ss of backlight:pwm-backlight.
[  OK  ] Started Boot time animation.
[  OK  ] Finished Create Volatile Files and Directories.
         Starting Update UTMP about System Boot/Shutdown...
         Starting Enable Rockchip camera engine rkaiq...
[  OK  ] Started Load/Save RF Kill Switch Status.
[  OK  ] Finished Update UTMP about System Boot/Shutdown.
[  OK  ] Started Enable Rockchip camera engine rkaiq.
[  OK  ] Reached target System Initialization.
[  OK  ] Started ACPI Events Check.
[  OK  ] Started Trigger anacron every hour.
[  OK  ] Started Daily apt download activities.
[  OK  ] Started Daily apt upgrade and clean activities.
[  OK  ] Started Periodic ext4 Onli…ata Check for All Filesystems.
[  OK  ] Started Discard unused blocks once a week.
[  OK  ] Started Daily man-db regeneration.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Reached target Paths.
[  OK  ] Reached target Timers.
[  OK  ] Listening on ACPID Listen Socket.
[  OK  ] Listening on D-Bus System Message Bus Socket.
[  OK  ] Listening on triggerhappy.socket.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
[  OK  ] Started ACPI event daemon.
         Starting Save/Restore Sound Card State...
[  OK  ] Started Run anacron jobs.
         Starting enable ASYNC for Debian Display...
         Starting Bluetooth management mechanism...
         Starting Bluetooth service...
[  OK  ] Started D-Bus System Message Bus.
         Starting Network Manager...
         Starting Remove Stale Onli…t4 Metadata Check Snapshots...
         Starting Init board...
         Starting Init Onboard LEDs...
[  OK  ] Started HDMI-force-ON.
         Starting LSB: Load kernel …d to enable cpufreq scaling...
         Starting LSB: Run /etc/rc.local if it exist...
         Starting System Logging Service...
         Starting User Login Management...
         Starting triggerhappy global hotkey daemon...
         Starting Disk Manager...
         Starting WPA supplicant...
[    6.700942] DRM setup:  Completed
[  OK  ] Finished Init board.
[  OK  ] Finished Save/Restore Sound Card State.
[  OK  ] Reached target Sound Card.
[  OK  ] Finished Raise network interfaces.
[  OK  ] Started triggerhappy global hotkey daemon.
[  OK  ] Finished Init Onboard LEDs.
[  OK  ] Started LSB: Run /etc/rc.local if it exist.
[  OK  ] Started System Logging Service.
[  OK  ] Started LSB: Load kernel m…ded to enable cpufreq scaling.
         Starting LSB: set CPUFreq kernel parameters...
[  OK  ] Finished Remove Stale Onli…ext4 Metadata Check Snapshots.
[  OK  ] Started User Login Management.
[  OK  ] Started Bluetooth service.
[  OK  ] Started WPA supplicant.
[  OK  ] Reached target Bluetooth.
[  OK  ] Started LSB: set CPUFreq kernel parameters.
[    6.841020] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[    6.841047] Bluetooth: BNEP filters: protocol multicast
[    6.841061] Bluetooth: BNEP socket layer initialized
         Starting Authorization Manager...
         Starting Hostname Service...
[  OK  ] Started Network Manager.
[  OK  ] Reached target Network.
[  OK  ] Reached target Network is Online.
[  OK  ] Started lcd2usb.
         Starting Network Time Service...
         Starting OpenVPN service...
         Starting /etc/rc.local Compatibility...
         Starting Sets network devices IRQ and RPS...
         Starting OpenBSD Secure Shell server...
[  OK  ] Started strongSwan IPsec I…IKEv2 daemon using ipsec.conf.
         Starting Permit User Sessions...
         Starting LSB: layer 2 tunelling protocol daemon...
[  OK  ] Finished OpenVPN service.
[  OK  ] Started /etc/rc.local Compatibility.
[  OK  ] Started Authorization Manager.
[  OK  ] Finished Permit User Sessions.
[  OK  ] Started Getty on tty1.
         Starting Light Display Manager...
[  OK  ] Started Serial Getty on ttyFIQ0.
[  OK  ] Reached target Login Prompts.
[  OK  ] Started Hostname Service.
[    6.925901] NET: Registered PF_PPPOX protocol family
[  OK  ] Started Network Time Service.
[    6.939061] l2tp_core: L2TP core driver, V2.0
[    6.940869] l2tp_netlink: L2TP netlink interface
[  OK  ] Started Light Display Manager.
[    6.943798] l2tp_ppp: PPPoL2TP kernel driver, V2.0
[  OK  ] Started LSB: layer 2 tunelling protocol daemon.
         Starting Network Manager Script Dispatcher Service...
[  OK  ] Started OpenBSD Secure Shell server.
[  OK  ] Started Network Manager Script Dispatcher Service.
[    7.009786] eth0: 0xffffffc00b800000, 0e:ec:20:98:a0:49, IRQ 173
[  OK  ] Started Disk Manager.
[    7.026722] Bluetooth: hci0: RTL: fw version 0x0cc6d2e3
[    7.060109] eth1: 0xffffffc00b820000, 12:ec:20:98:a0:49, IRQ 205
[    7.138713] Bluetooth: hci0: AOSP extensions version v1.00
[    7.138728] Bluetooth: hci0: AOSP quality report is supported
[    7.138857] Bluetooth: MGMT ver 1.22
[    7.145478] NET: Registered PF_ALG protocol family
[  OK  ] Started enable ASYNC for Debian Display.
[  OK  ] Started Setup rockchip platform environment.
[  OK  ] Started Bluetooth management mechanism.
[    7.457254] start_addr=(0x20000), end_addr=(0x40000), buffer_size=(0x20000), smp_number_max=(16384)
[  OK  ] Finished Set console font and keymap.
[  OK  ] Finished Sets network devices IRQ and RPS.
[  OK  ] Reached target Multi-User System.
[  OK  ] Reached target Graphical Interface.
         Starting Update UTMP about System Runlevel Changes...
[  OK  ] Finished Update UTMP about System Runlevel Changes.
[    7.990077] ttyFIQ ttyFIQ0: tty_port_close_start: tty->count = 1 port count = 2
[    8.366884] systemd-journald[311]: File /var/log/journal/215cc413b7d841ea9cc0c710aa1fd3ed/user-1000.journal corrupted or uncleanly shut down, renaming and replacing.
[    8.618651] r8125: eth0: link up
[    8.618700] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[    8.784418] rk_hdmirx fdee0000.hdmirx-controller: hdmirx_audio_startup: device is no connected or audio is off

Debian GNU/Linux 11 NanoPC-T6 ttyFIQ0

NanoPC-T6 login:

debain系统默认账号密码如下:

普通用户:
    用户名: pi
    密码: pi

Root用户:
    默认没有设置root密码,可通过sudo passwd root命令配置root密码
3.2.3 GPU内核日志

我们来查看panthor驱动是否生效:

pi@NanoPC-T6:~$ dmesg | grep gpu
pi@NanoPC-T6:~$ dmesg | grep gpu
[    3.237414] vdd_gpu_s0: supplied by vcc5v0_sys
[    3.237516] vdd_gpu_s0: No configuration
[    3.238319] vdd_gpu_s0: 550 <--> 950 mV at 750 mV at 6500 mA, enabled
[    3.842164] rockchip-pm-domain fd8d8000.power-management:power-controller: Looking up gpu-supply from device tree
[    3.842203] rockchip-pm-domain fd8d8000.power-management:power-controller: Looking up gpu-supply property in node /power-management@fd8d8000/power-controller failed
[    3.842467] panthor fb000000.gpu: [drm] clock rate = 198000000
[    3.842534] panthor fb000000.gpu: Looking up mali-supply from device tree
[    3.843640] panthor fb000000.gpu: Looking up sram-supply from device tree
[    3.843652] panthor fb000000.gpu: Looking up sram-supply property in node /gpu@fb000000 failed
[    3.844193] panthor fb000000.gpu: EM: OPP:400000 is inefficient
[    3.844204] panthor fb000000.gpu: EM: OPP:300000 is inefficient
[    3.844411] panthor fb000000.gpu: EM: created perf domain
[    3.845007] panthor fb000000.gpu: [drm] mali-g610 id 0xa867 major 0x0 minor 0x0 status 0x5
[    3.845026] panthor fb000000.gpu: [drm] Features: L2:0x7120306 Tiler:0x809 Mem:0x301 MMU:0x2830 AS:0xff
[    3.845042] panthor fb000000.gpu: [drm] shader_present=0x50005 l2_present=0x1 tiler_present=0x1
[    3.848104] panthor fb000000.gpu: [drm] Firmware protected mode entry not be supported, ignoring
[    3.848461] panthor fb000000.gpu: [drm] CSF FW v1.5.0, Features 0x0 Instrumentation features 0x71
[    3.849438] [drm] Initialized panthor 1.0.0 20230801 for fb000000.gpu on minor 1

可以看到GPU驱动已经从官方驱动(《Rockchip RK3588 - OpenCL环境搭建(官方GPU驱动)》)替换成了panthor

3.2.4 查看系统

查看系统:

pi@NanoPC-T6:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

更多有关debian系统设置可以参考《七、debain系统设置》。

3.3 单独烧录内核

在某些情况下,我们可能对内核源码做了修改,或者仅仅修改了设备树,如果按照前面的内核编译步骤,重新烧录一遍非常的耗时时间,那么有没有简单的方法呢?当然可以。

3.3.1 编译内核

首先,我们进行内核的编译:

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# make  CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi6-images -j$(nproc)
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# ll kernel.img
-rw-r--r-- 1 root root 36374548 11月  9 12:15 kernel.img
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# ll resource.img
-rw-r--r-- 1 root root 8283136 11月  9 12:07 resource.img

编译完会在./kernel-rk3588目录下生成kernel.imgresource.img文件 。

接着我们将这两个文件拷贝到debian-bullseye-desktop-arm64目录下;

root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp kernel.img ../debian-bullseye-desktop-arm64
root@ubuntu:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/kernel-rk3588# cp resource.img ../debian-bullseye-desktop-arm64
3.3.2 dd烧录

进入开发板系统,我们单独烧录resource.imgkernel.img到开发板,可以按照如下步骤;

pi@NanoPC-T6:/userdata$ sudo scp -r root@192.168.2.103:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64/kernel.img .
pi@NanoPC-T6:/userdata$ sudo dd if=kernel.img  of=/dev/mmcblk2p5 bs=1M

pi@NanoPC-T6:/userdata$ sudo scp -r root@192.168.2.103:/work/sambashare/rk3588/friendly/sd-fuse_rk3588/debian-bullseye-desktop-arm64/resource.img .
pi@NanoPC-T6:/userdata$ sudo dd if=resource.img  of=/dev/mmcblk2p4 bs=1M

其中:

  • 192.168.2.103是宿主机ubuntu系统的ip地址;
  • resource分区的序号为4,对应的设备节点为/dev/mmcblk2p4
  • kernel分区的序号为5,对应的设备节点为/dev/mmcblk2p5

四、Mesa 25.1.4安装

glmark2是一款比较出名的GPU benchmark测试程序,支持OpenGL 2.0OpenGL ES 2.0

进入debain桌面环境打开命令行终端,输入以下命令即可测试:

root@NanoPC-T6:~$ glmark2-es2
arm_release_ver: g13p0-01eac0, rk_so_ver: 10
Failed creating base context during opening of kernel driver.
Kernel module may not have been loaded
Error: eglInitialize() failed with error: 0x3001
Error: main: Could not initialize canvas

为什么出现错误了呢?这是因为我们只移植了内核层GPU驱动,但是并未移植用户空间驱动程序。

Panfrost用户空间驱动程序对ARM Mali v10 GPU的支持已合并到Mesa主流中。这里我们使用 Mesa 25.1.4 主流版本编译安装进行测试。

注意下面的操作都是使用root用户,安装参考《Mesa-25.1.8》。

4.1 安装依赖项

apt update
apt install byacc flex libxcb-randr0-dev libxcb-glx0-dev libxcb-present-dev libx11-xcb-dev libxcb-dri3-dev libxshmfence-dev libxxf86vm-dev python3-pkg-resources python3-pip python3-mako python3-yaml  
apt install autoconf libtool pkg-config libpciaccess-dev ninja-build

4.2 升级cmake 3.28.3

编译之前先升级CMake3.28.3+

apt install -y build-essential libssl-dev

# 下载 CMake 源码
wget https://github.com/Kitware/CMake/releases/download/v3.28.3/cmake-3.28.3.tar.gz
tar -xzf cmake-3.28.3.tar.gz
cd cmake-3.28.3

# 编译安装
./bootstrap --prefix=/usr/local
make -j$(nproc)
make install

# 更新链接
ln -sf /usr/local/bin/cmake /usr/bin/cmake

# 验证
cmake --version

4.3 安装rust 1.91.0

运行命令下载rustup工具并安装最新的稳定版rust

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
wget https://cdn.jsdelivr.net/gh/rust-lang-nursery/rustup.rs/rustup-init.sh --no-check-certificate
sh rustup-init.sh

rustup 是一个Rust版本管理和相关工具的命令行工具,包括编译器,包管理工具, 在安装的时候,会让你选择安装路径,我们输入 1 (默认安装)回车

安装大概需要2小时,耐心等待。

接下来,运行以下命令将rust工具链目录添加到PATH环境变量中:

source $HOME/.cargo/env

通过请求版本验证rust安装:

root@NanoPC-T6:/userdata# rustc --version
rustc 1.91.0 (f8297e351 2025-10-28)
root@NanoPC-T6:/userdata# cargo -V
cargo 1.91.0 (ea2d97820 2025-10-10)

# 安装 bindgen
cargo install bindgen-cli

4.4 安装meson 1.9.1pycparser 2.23

pip3 install meson
meson -v  # 1.9.1
pip3 install pycparser # pycparser-2.23

4.5 安装llvm 19clang 19

安装 llvm 19

apt install lsb-release wget software-properties-common gnupg

# 添加 LLVM 官方 APT 仓库
wget https://apt.llvm.org/llvm.sh 
chmod +x llvm.sh
./llvm.sh 19

# 安装完整的开发包
apt install -y libllvm-19-ocaml-dev libllvm19 llvm-19 llvm-19-dev llvm-19-doc llvm-19-examples llvm-19-runtime

安装clang

# 安装 Clang 开发包
apt install -y libclang-19-dev clang-19

查看安装的包:

root@NanoPC-T6:/userdata# dpkg -l | grep llvm
ii  libllvm-19-ocaml-dev                        1:19.1.7-3~deb11u1                 arm64        Modular compiler and toolchain technologies, OCaml bindings
ii  libllvm11:arm64                             1:11.0.1-2                         arm64        Modular compiler and toolchain technologies, runtime library
ii  libllvm19:arm64                             1:19.1.7-3~deb11u1                 arm64        Modular compiler and toolchain technologies, runtime library
ii  llvm-19                                     1:19.1.7-3~deb11u1                 arm64        Modular compiler and toolchain technologies
ii  llvm-19-dev                                 1:19.1.7-3~deb11u1                 arm64        Modular compiler and toolchain technologies, libraries and headers
ii  llvm-19-doc                                 1:19.1.7-3~deb11u1                 all          Modular compiler and toolchain technologies, documentation
ii  llvm-19-examples                            1:19.1.7-3~deb11u1                 all          Modular compiler and toolchain technologies, examples
ii  llvm-19-linker-tools                        1:19.1.7-3~deb11u1                 arm64        Modular compiler and toolchain technologies - Plugins
ii  llvm-19-runtime                             1:19.1.7-3~deb11u1                 arm64        Modular compiler and toolchain technologies, IR interpreter
ii  llvm-19-tools                               1:19.1.7-3~deb11u1                 arm64        Modular compiler and toolchain technologies, tools

root@NanoPC-T6:/userdata# dpkg -l | grep clang
ii  clang-19                                    1:19.1.7-3~deb11u1                 arm64        C, C++ and Objective-C compiler
ii  clangd-19                                   1:19.1.7-3~deb11u1                 arm64        Language server that provides IDE-like features to editors
ii  libclang-19-dev                             1:19.1.7-3~deb11u1                 arm64        Clang library - Development package
ii  libclang-common-19-dev:arm64                1:19.1.7-3~deb11u1                 arm64        Clang library - Common development package
ii  libclang-cpp19                              1:19.1.7-3~deb11u1                 arm64        C++ interface to the Clang library
ii  libclang1-19                                1:19.1.7-3~deb11u1                 arm64        C interface to the Clang library

4.6 安装SPIRV

4.6.1 安装SPIRV-Headers
git clone https://github.com/KhronosGroup/SPIRV-Headers.git 
cd SPIRV-Headers
# 进入build目录,编译
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local  
cmake install
4.6.2 安装SPIRV-LLVM-Translator
git clone -b llvm_release_190 https://github.com/KhronosGroup/SPIRV-LLVM-Translator.git
cd SPIRV-LLVM-Translator
# 进入build目录,编译
mkdir build && cd build
cmake .. -DLLVM_DIR=/usr/lib/llvm-19/lib/cmake/llvm -DCMAKE_INSTALL_PREFIX=/usr/local
make install
4.6.3 安装SPIRV-Tools

下载SPIRV-Tools编译;

git clone https://github.com/KhronosGroup/SPIRV-Tools.git
cd SPIRV-Tools
python3 utils/git-sync-deps
# 进入build目录,编译
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make install

这里耗时比较久,大概一个小时。

4.7 安装bindgen 0.72.1

配置源:

root@NanoPC-T6:/userdata/mesa-25.1.4# cd ~/.cargo
root@NanoPC-T6:~/.cargo# vim config
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"

replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

#replace-with = 'ustc'
#[source.ustc]
#registry = "git://mirrors.ustc.edu.cn/crates.io-index"

[net]
git-fetch-with-cli = true

下载:

root@NanoPC-T6:~/.cargo# cargo install bindgen-cli --version 0.62.0  # 花费20分钟左右
root@NanoPC-T6:~/.cargo# bindgen --version
bindgen 0.72.1
root@NanoPC-T6:~/.cargo#  ls bin
bindgen  cargo-clippy  cargo-miri     rls            rust-gdb     rust-lldb  rustdoc  rustup
cargo    cargo-fmt     clippy-driver  rust-analyzer  rust-gdbgui  rustc      rustfmt

4.8 安装glslang 15.4.0

required for Vulkan support:

root@NanoPC-T6:/userdata# wget https://github.com/KhronosGroup/glslang/archive/refs/tags/15.4.0.zip
root@NanoPC-T6:/userdata# unzip glslang-15.4.0.zip
root@NanoPC-T6:/userdata# cd glslang-15.4.0

root@NanoPC-T6:/userdata/glslang-15.4.0# ./update_glslang_sources.py  
root@NanoPC-T6:/userdata/glslang-15.4.0# cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" .
root@NanoPC-T6:/userdata/glslang-15.4.0# make -j4 install

root@NanoPC-T6:/userdata/glslang-15.4.0# mv install/bin/* /usr/local/bin/
root@NanoPC-T6:/userdata/glslang-15.4.0# mv install/lib/* /usr/local/lib/
root@NanoPC-T6:/userdata/glslang-15.4.0# mv install/include/* /usr/local/include/
root@NanoPC-T6:/userdata/glslang-15.4.0# cd ..
root@NanoPC-T6:/userdata/glslang-15.4.0# glslang -v
Glslang Version: 11:15.4.0
ESSL Version: OpenGL ES GLSL 3.20 glslang Khronos. 15.4.0
GLSL Version: 4.60 glslang Khronos. 15.4.0
SPIR-V Version 0x00010600, Revision 1
GLSL.std.450 Version 100, Revision 1
Khronos Tool ID 8
SPIR-V Generator Version 11
GL_KHR_vulkan_glsl version 100
ARB_GL_gl_spirv version 100

4.9 安装libdrm 2.4.118

下载源码:

wget https://dri.freedesktop.org/libdrm/libdrm-2.4.118.tar.xz
tar -xvf libdrm-2.4.118.tar.xz
mv libdrm-2.4.118 drm

编译和安装:

cd drm
meson build
ninja -C build install

头文件安装到/usr/local/include/libdrm,库文件安装到/usr/local/lib/aarch64-linux-gnu,这里不要去改动默认路径。

可以使用ldconfig -p | grep libdrm命令来查看系统中是否存在正确的libdrm库;

root@NanoPC-T6:/userdata/drm# ldconfig -p | grep libdrm
        libdrm_tegra.so.0 (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_tegra.so.0
        libdrm_tegra.so (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_tegra.so
        libdrm_radeon.so.1 (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_radeon.so.1
        libdrm_radeon.so (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_radeon.so
        libdrm_nouveau.so.2 (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_nouveau.so.2
        libdrm_nouveau.so (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_nouveau.so
        libdrm_freedreno.so.1 (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_freedreno.so.1
        libdrm_freedreno.so (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_freedreno.so
        libdrm_etnaviv.so.1 (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_etnaviv.so.1
        libdrm_etnaviv.so (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_etnaviv.so
        libdrm_amdgpu.so.1 (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_amdgpu.so.1
        libdrm_amdgpu.so (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm_amdgpu.so
        libdrm.so.2 (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm.so.2
        libdrm.so (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm.so
        libdrm-cursor.so.1 (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm-cursor.so.1
        libdrm-cursor.so (libc6,AArch64) => /lib/aarch64-linux-gnu/libdrm-cursor.so

4.10 安装OpenCL ICD Loader

ocl-icd-libopencl1ocl-icd-opencl-devOpenCL ICD Loader的包,用于在Linux系统中加载OpenCL平台。安装命令如下:

apt install opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev

其中:

  • opencl-headersOpenCL (Open Computing Language) header files
    • opencl-c-headersOpenCL (Open Computing Language) C header files,安装部分/usr/include/CL头文件;
    • opencl-clhpp-headersC++ headers for OpenCL development,安装部分/usr/include/CL头文件;
  • ocl-icd-libopencl1Generic OpenCL ICD Loader,安装/usr/lib/aarch64-linux-gnu/libOpenCL.so.1.0.0
  • ocl-icd-opencl-dev(依赖ocl-icd-libopencl1opencl-headers):OpenCL development files

查看安装路径:

root@NanoPC-T6:/userdata# ls -l /usr/lib/aarch64-linux-gnu/* | grep libOpenCL
lrwxrwxrwx  1 root root        18 Jan 11  2021 /usr/lib/aarch64-linux-gnu/libOpenCL.so -> libOpenCL.so.1.0.0
lrwxrwxrwx  1 root root        18 Jan 11  2021 /usr/lib/aarch64-linux-gnu/libOpenCL.so.1 -> libOpenCL.so.1.0.0
-rw-r--r--  1 root root     60856 Jan 11  2021 /usr/lib/aarch64-linux-gnu/libOpenCL.so.1.0.0

root@NanoPC-T6:/userdata# ls -l /usr/include/CL/
-rw-r--r-- 1 root root  81345 Dec  9  2020 cl.h
-rw-r--r-- 1 root root    786 Dec 10  2020 cl2.hpp
-rw-r--r-- 1 root root   4452 Dec  9  2020 cl_d3d10.h
-rw-r--r-- 1 root root   4446 Dec  9  2020 cl_d3d11.h
-rw-r--r-- 1 root root   4558 Dec  9  2020 cl_dx9_media_sharing.h
-rw-r--r-- 1 root root   6774 Dec  9  2020 cl_dx9_media_sharing_intel.h
-rw-r--r-- 1 root root   4486 Dec  9  2020 cl_egl.h
-rw-r--r-- 1 root root  37320 Jan  4  2021 cl_ext.h
-rw-r--r-- 1 root root  29129 Dec  9  2020 cl_ext_intel.h
-rw-r--r-- 1 root root   6474 Dec  9  2020 cl_gl.h
-rw-r--r-- 1 root root   1262 Dec  9  2020 cl_gl_ext.h
-rw-r--r-- 1 root root  10430 Dec  9  2020 cl_half.h
-rw-r--r-- 1 root root  54214 Dec  9  2020 cl_icd.h
-rw-r--r-- 1 root root  42146 Dec  9  2020 cl_platform.h
-rw-r--r-- 1 root root   6525 Dec  9  2020 cl_va_api_media_sharing_intel.h
-rw-r--r-- 1 root root   3125 Dec  9  2020 cl_version.h
-rw-r--r-- 1 root root    996 Dec  9  2020 opencl.h
-rw-r--r-- 1 root root 330523 Dec 10  2020 opencl.hpp

4.11 安装Mesa 25.1.4

4.11.1 安装依赖
apt install -y libclc-19-dev libclc-19

# 安装 XCB 相关开发包
apt install -y libxcb1-dev libxcb-keysyms1-dev libxcb-dri2-0-dev libxcb-dri3-dev libxcb-present-dev libxcb-sync-dev libxshmfence-dev libxcb-xfixes0-dev libxcb-render0-dev libxcb-shm0-dev libxcb-glx0-dev

# 安装其他可能的缺失包
apt install -y libx11-xcb-dev libxcb-util-dev libxcb-image0-dev libxcb-icccm4-dev libxcb-randr0-dev
    
# 安装所有解析器生成工具
apt install -y bison byacc flex

# 确保 bison 是默认的
update-alternatives --install /usr/bin/yacc yacc /usr/bin/bison 100
update-alternatives --install /usr/bin/yacc yacc /usr/bin/byacc 50
4.11.2 下载mesa
root@NanoPC-T6:/userdata# wget https://gitlab.freedesktop.org/mesa/mesa/-/archive/25.1.4/mesa-25.1.4.tar.gz?ref_type=heads
root@NanoPC-T6:/userdata# tar -zvxf mesa-25.1.4.tar.gz
root@NanoPC-T6:/userdata# cd mesa-25.1.4
4.11.3 配置mesa
root@NanoPC-T6:/userdata/mesa-25.1.4# meson setup build -Dopengl=true -Dgles1=enabled -Dgles2=enabled -Degl=enabled -Dplatforms=x11 -Dvulkan-drivers=panfrost -Dgallium-drivers=panfrost -Dgallium-rusticl=true -Dllvm=enabled  -Dgbm=enabled -Dprefix=/usr/local --buildtype=release
The Meson build system
Version: 1.9.1
Source dir: /userdata/mesa-25.1.4
Build dir: /userdata/mesa-25.1.4/build
Build type: native build
Project name: mesa
Project version: 25.1.4
......
mesa 25.1.4
......

其中:

  • -Dopengl=true :启用OpenGL核心API
  • -Dgles1=enabled:启用OpenGL ES 1.x(嵌入式桌面图形接口),编译安装libGLESv1相关库;
  • -Dgles2=enabled:启用OpenGL ES 2.x(嵌入式桌面图形接口),编译安装libGLESv2相关库;
  • -Degl=enabled:启用EGL(平台接口),编译安装libEGL相关库;
  • -Dplatforms=x11:支持显示平台;
  • -Dvulkan-drivers=panfrostList of vulkan drivers to build. If this is set to auto all drivers applicable to the target OS/architecture will be built,编译安装libvulkan相关库;
  • -Dgallium-drivers=panfrostList of gallium drivers to build. If this is set to auto all drivers applicable to the target OS/architecture will be built
  • -Dgallium-rusticl=truemesa gallium rusticl OpenCL ICD驱动程序实现库(OpenCL开源实现),编译安装libRusticlOpenCL相关库;
  • -Dllvm=enabledswrast依赖LLVMllvmpipe加速);
  • -Dgbm=enabled:启用GBMWayland/X11缓冲区管理);
  • -Dglvnd=enabled:显示启用GLVND,因为GLVND是现代Mesa的默认架构,负责生成GL的库和头文件;
  • -Dglx=auto:启用GLS,编译安装libGLX相关库;
  • -Dprefix=/usr/local:安装路径;
  • --buildtype=release: 此开关可确保构建过程完全优化,并禁用调试断言,否则在某些情况下库的运行速度会大幅降低。如果没有此开关,构建文件的大小可能会达到2 GB左右。
4.11.4 编译安装mesa
root@NanoPC-T6:/userdata/mesa-25.1.4# ninja -C build install -j6
4.11.5 更新动态链接库缓存
root@NanoPC-T6:/userdata/mesa-25.1.4# ldconfig
4.11.6 查看库路径

安装完成后,会将EGLGLGLESGLES2GLES3等头文件安装到${prefix}/include目录;

同时将OpenGLEGLOpenCLOpenGL ESdri等库安装到${prefix}/lib/aarch64-linux-gnu目录。

为了方便查看源码编译安装了哪些文件,我修改-Dprefix=/opt/mesa,重新完成之后,查看安装目录:

root@NanoPC-T6:/userdata/mesa-25.1.4# rm -rf build
root@NanoPC-T6:/userdata/mesa-25.1.4# meson setup build -Dopengl=true -Dgles1=enabled -Dgles2=enabled -Degl=enabled -Dplatforms=x11 -Dvulkan-drivers=panfrost -Dgallium-drivers=panfrost -Dgallium-rusticl=true -Dllvm=enabled -Dgbm=enabled -Dprefix=/opt/mesa --buildtype=release
root@NanoPC-T6:/userdata/mesa-25.1.4# ninja -C build install

root@NanoPC-T6:/userdata/mesa-25.1.4# apt install tree
root@NanoPC-T6:/userdata/mesa-25.1.4# tree /opt/mesa

这里dri目录下的内容是和平台相关的,比如:

  • ili9225intel的;
  • panfrostmali的;
  • 如果我们自己观察dri目录各个文件的大小,我们很容易发现,这些文件的大小是相同的,这主要是因为它们都是由/opt/mesa-22.0.0/builddir/src/gallium/targets/dri/libgallium_dri.so复制而来。

4.12 设置环境变量

由于当前我这个根文件系统之前安装了mesa 20.3.5-1 版本;

root@NanoPC-T6:/usr/include# dpkg -l | grep -i mesa
ii  libegl-mesa0:arm64                          20.3.5-1                           arm64        free implementation of the EGL API -- Mesa vendor library
ii  libegl1-mesa-dev:arm64                      20.3.5-1                           arm64        free implementation of the EGL API -- development files
ii  libgl1-mesa-dri:arm64                       20.3.5-1                           arm64        free implementation of the OpenGL API -- DRI modules
ii  libglapi-mesa:arm64                         20.3.5-1                           arm64        free implementation of the GL API -- shared library
ii  libglu1-mesa:arm64                          9.0.1-1                            arm64        Mesa OpenGL utility library (GLU)
ii  libglx-mesa0:arm64                          20.3.5-1                           arm64        free implementation of the OpenGL API -- GLX vendor library
ii  mesa-common-dev:arm64                       20.3.5-1                           arm64        Developer documentation for Mesa

这些库都被安装在了/usr/lib/aarch64-linux-gnu/目录下,具体可以参考《 查看头文件和库文件》。

设置正确的库路径:

export LD_LIBRARY_PATH=/usr/local/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH
export LIBGL_DRIVERS_PATH=/usr/local/lib/aarch64-linux-gnu/dri

4.13 OpenGL测试

如果需要编写OpenGL程序,首先需要安装GLEGLGLESGLES2GLES3头文件;

root@NanoPC-T6:/userdata/mesa-25.1.4# cd /usr/include
root@NanoPC-T6:/usr/include# ls GL EGL GLES GLES2 GLES3
EGL:
egl.h  eglext.h  eglextchromium.h  eglmesaext.h  eglplatform.h

GL:
gl.h  glcorearb.h  glext.h  glx.h  glxext.h  glxint.h  glxmd.h  glxproto.h  glxtokens.h  internal

GLES:
egl.h  gl.h  glext.h  glplatform.h

GLES2:
gl2.h  gl2ext.h  gl2platform.h

GLES3:
gl3.h  gl31.h  gl32.h  gl3ext.h  gl3platform.h

实际上友善提供的rootfs已经包含了这些头文件,因此我们不用单独安装了,否则需要执行;

root@NanoPC-T6:/usr/include# apt install libgl-dev libegl-dev libgles-dev x11proto-dev
3.5.1 glxinfo

使用glxinfo测试:

root@NanoPC-T6:/usr/include# export DISPLAY=:0.0; glxinfo -B
name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Mesa (0xffffffff)
    Device: llvmpipe (LLVM 19.1.7, 128 bits) (0xffffffff)
    Version: 25.1.4.7
    Accelerated: no
    Video memory: 15951MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 4.5
    Max compat profile version: 4.5
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
Memory info (GL_ATI_meminfo):
    VBO free memory - total: 0 MB, largest block: 0 MB
    VBO free aux. memory - total: 15241 MB, largest block: 15241 MB
    Texture free memory - total: 0 MB, largest block: 0 MB
    Texture free aux. memory - total: 15241 MB, largest block: 15241 MB
    Renderbuffer free memory - total: 0 MB, largest block: 0 MB
    Renderbuffer free aux. memory - total: 15241 MB, largest block: 15241 MB
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 4293781621 MB
    Total available memory: 4293797572 MB
    Currently available dedicated video memory: 0 MB
OpenGL vendor string: Mesa
OpenGL renderer string: llvmpipe (LLVM 19.1.7, 128 bits)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 25.1.4.7
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.5 (Compatibility Profile) Mesa 25.1.4.7
OpenGL shading language version string: 4.50
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 25.1.4.7
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

参考《OpenGL测试》。

3.6 OpenCL测试

参考《OpenCL测试》。

五、ArmSoM-Sige7 GPU驱动移植

5.1 准备工作

我们在《Rockchip RK3588 - Rockchip Linux SDK编译》介绍了如何编译适用于ArmSoM-Sige7开发板的固件。编译使用的SDK源码如下:

root@ubuntu:/work/sambashare/rk3588/armsom# git clone --depth=1 https://github.com/ArmSoM/armsom-rk3588-bsp.git

由于该SDK使用的Linux kernel版本是5.10版本,在这个版本如果去移植Panthor驱动,会存在各种问题。

原因呢?也很好理解,Panthor驱动是在linux 6.10版本才合并进来的,其适配的linux版本远远高于5.10版本,因此如何移植到Linux kernel 5.10中编译会出现各种错误。

将当前目录下的kernel命名为kernel-5.10

root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# mv kernel kernel-5.10
5.1.1 下载内核

为此呢,这里我们去下载6.1版本的内核;

root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# git clone --depth=1  https://github.com/armbian/linux-rockchip.git
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# mv linux-rockchip kernel-6.1

我们来看一下rk-6.1-rkr5.1分支的代码是否已经移植了Panthor源码,我们切换到目录drivers/gpu/drm目录查看是否存在子目录panthor,可以看到已经有了;

5.1.2 创建链接

创建符号链接:

root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ln -s kernel-6.1 kernel
root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ll
drwxr-xr-x 10 root      root       4096  6月  9  2024 app/
drwxr-xr-x 17 root      root       4096 11月  5 21:43 buildroot/
lrwxrwxrwx  1 root      root         39  6月  9  2024 build.sh -> device/rockchip/common/scripts/build.sh*
lrwxrwxrwx  1 root      root         22  6月 10  2024 common -> device/rockchip/common/
drwxr-xr-x  9 root      root       4096 11月  6 21:59 debian/
drwxr-xr-x  3 root      root       4096  6月  9  2024 device/
drwxr-xr-x  6 root      root       4096  6月  9  2024 docs/
drwxr-xr-x 28 root      root       4096  7月  7  2024 external/
drwxr-xr-x  8 root      root       4096  1月 20  2025 .git/
-rwxr-xr-x  1 root      root         27  6月 24  2024 http_server.sh*
lrwxrwxrwx  1 root      root         10 11月  6 22:29 kernel -> kernel-6.1
drwxr-xr-x 27 root      root       4096 11月  6 22:03 kernel-5.10/
drwxr-xr-x 28 root      root       4096 11月  9 15:15 linux-rockchip/
lrwxrwxrwx  1 root      root         31  6月  9  2024 Makefile -> device/rockchip/common/Makefile
drwxr-xr-x  6 root      root       4096 11月  6 23:24 output/
drwxr-xr-x  3 root      root       4096  6月  9  2024 prebuilts/
lrwxrwxrwx  1 root      root         32  6月 10  2024 README.md -> device/rockchip/common/README.md
drwxr-xr-x  9 root      root       4096  7月 19  2024 rkbin/
lrwxrwxrwx  1 root      root         41  6月  9  2024 rkflash.sh -> device/rockchip/common/scripts/rkflash.sh*
drwxr-xr-x  2 root      root       4096  6月 24  2024 rootfs/
-rw-r--r--  1 root      root      33555  1月  2  2025 test.log
drwxr-xr-x  5 root      root       4096  6月  9  2024 tools/
drwxr-xr-x 25 root      root       4096 11月  6 21:59 u-boot/
drwxr-xr-x  5 root      root       4096  6月  9  2024 uefi/
drwxr-xr-x  9 root      root       4096  6月  9  2024 yocto/
5.1.3 内核配置

ArmSoM-Sige7开发板内核编译使用的板级配置是rockchip_linux_defconfig,该文件位于arch/arm64/configs目录下;

root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/kernel# ll arch/arm64/configs/rockchip_linux_defconfig
-rw-r--r-- 1 root root 17781 11月  9 15:15 arch/arm64/configs/rockchip_linux_defconfig

此外还有一个芯片特定配置rk3588_linux.config

root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/kernel# cat arch/arm64/configs/rk3588_linux.config
# CONFIG_BCMDHD_SDIO=y is not set
CONFIG_BCMDHD_PCIE=y
CONFIG_MALI_CSF_SUPPORT=y

5.2 编译安装

5.2.1 板级配置和设备树

修改rockchip_rk3588_sige7_defconfig文件:

root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# vim ./device/rockchip/.chips/rk3588/rockchip_rk3588_sige7_defconfig

RK_YOCTO_CFG="rockchip-rk3588-evb"
#RK_KERNEL_VERSION="5.10"
RK_KERNEL_VERSION="6.1"
RK_KERNEL_DTS_NAME="rk3588-armsom-sige7"
RK_USE_FIT_IMG=y
RK_PACKAGE_FILE_CUSTOM=y

设备树位于:

root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ll kernel-6.1/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts
-rwxr-xr-x 1 root root 18379 11月  9 15:15 kernel-6.1/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts
5.2.2 清理

首先执行清理工作:

root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ./build.sh cleanall
Log saved at /work/sambashare/rk3588/armsom/armsom-rk3588-bsp/output/sessions/2025-11-06_21-58-28

make: Entering directory '/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/kernel-5.10'
  CLEAN   certs
  CLEAN   drivers/firmware/efi/libstub
  CLEAN   drivers/misc/lkdtm
  CLEAN   drivers/scsi
  CLEAN   drivers/tty/vt
  CLEAN   fs/unicode
  CLEAN   kernel
  CLEAN   lib
  ......
  CLEAN   scripts/kconfig
  CLEAN   include/config include/generated spl tpl
  CLEAN   .config .config.old include/autoconf.mk include/autoconf.mk.dep include/config.h
make: Leaving directory '/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/u-boot'
Running build.sh - cleanall succeeded.
5.2.3 编译内核

执行如下命令编译内核:

root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ./build.sh kernel
WARN: /work/sambashare/rk3588/armsom/armsom-rk3588-bsp/output/defconfig not exists
Pick a defconfig:

1. rockchip_defconfig
2. rockchip_rk3588_evb1_lp4_v10_defconfig
3. rockchip_rk3588_evb7_v11_defconfig
4. rockchip_rk3588_sige7_defconfig
5. rockchip_rk3588s_evb1_lp4x_v10_defconfig
Which would you like? [1]: 4

输出详情如下:

点击查看代码
Switching to defconfig: /work/sambashare/rk3588/armsom/armsom-rk3588-bsp/device/rockchip/.chip/rockchip_rk3588_sige7_defconfig
make: Entering directory '/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/device/rockchip/common'
......
make[1]: Leaving directory '/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/device/rockchip/common/kconfig'
#
# configuration written to /work/sambashare/rk3588/armsom/armsom-rk3588-bsp/output/.config
#
make: Leaving directory '/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/device/rockchip/common'

==========================================
          Final configs
==========================================
RK_BOOT_FIT_ITS=boot.its
RK_BOOT_IMG=boot.img
RK_BUILDROOT_CFG=rockchip_rk3588
RK_CHIP=rk3588
RK_CHIP_FAMILY=rk3588
RK_DEBIAN_ARCH=arm64
RK_DEBIAN_ARM64=y
RK_DEBIAN_VERSION=bullseye
RK_DEFCONFIG=/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/device/rockchip/.chips/rk3588/rockchip_rk3588_sige7_defconfig
RK_EXTRA_PARTITION_NUM=2
RK_EXTRA_PARTITION_STR=oem:oem:/oem:ext4:defaults:normal:auto:@userdata:userdata:/userdata:ext4:defaults:normal:auto:@@@
RK_KERNEL_ARCH=arm64
RK_KERNEL_ARM64=y
RK_KERNEL_CFG=rockchip_linux_defconfig
RK_KERNEL_CFG_FRAGMENTS=rk3588_linux.config
RK_KERNEL_DTB=kernel/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dtb
RK_KERNEL_DTS=kernel/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts
RK_KERNEL_IMG=kernel/arch/arm64/boot/Image
RK_KERNEL_KBUILD_ARCH=host
RK_KERNEL_KBUILD_HOST=y
RK_KERNEL_VERSION=6.1
RK_KERNEL_VERSION_REAL=6.1
RK_MISC=y
RK_MISC_BLANK=y
RK_PACKAGE_FILE=package-file
RK_PACKAGE_FILE_CUSTOM=y
RK_PARAMETER=parameter.txt
RK_PCBA_CFG=rockchip_rk3588_pcba
RK_RECOVERY_CFG=rockchip_rk3588_recovery
RK_RECOVERY_FIT_ITS=boot4recovery.its
RK_ROOTFS_IRQBALANCE=y
RK_ROOTFS_OVERLAY_DIRS=y
RK_ROOTFS_SYSTEM=buildroot
RK_ROOTFS_SYSTEM_BUILDROOT=y
RK_ROOTFS_TYPE=ext4
RK_ROOTFS_UDEV_RULES=y
RK_SAVE_TRACKED=y
RK_SESSION=2025-11-09_15-17-30
RK_UBOOT_ARCH=arm64
RK_UBOOT_ARM64=y
RK_UBOOT_CFG=rk3588
RK_UPDATE=y
RK_USB_ADBD=y
RK_USB_ADBD_BASH=y
RK_USB_ADBD_TCP_PORT=5555
RK_USE_FIT_IMG=y
RK_WIFIBT_CHIP=ALL_AP
RK_YOCTO_CFG=rockchip-rk3588-evb
RK_YOCTO_CHROMIUM=y
RK_YOCTO_DISPLAY_PLATFORM=wayland
RK_YOCTO_DISPLAY_PLATFORM_WAYLAND=y
RK_YOCTO_USBMOUNT=y

Toolchain for kernel:
/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-

==========================================
          Start building kernel
==========================================
+ make -C /work/sambashare/rk3588/armsom/armsom-rk3588-bsp/kernel/ -j7 CROSS_COMPILE=/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- ARCH=arm64 rockchip_linux_defconfig rk3588_linux.config
make: Entering directory '/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/kernel-6.1'
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
Using .config as base
Merging ./arch/arm64/configs/rk3588_linux.config
Value of CONFIG_BCMDHD_PCIE is redefined by fragment ./arch/arm64/configs/rk3588_linux.config:
Previous value: # CONFIG_BCMDHD_PCIE is not set
New value: CONFIG_BCMDHD_PCIE=y

Value of CONFIG_MALI_CSF_SUPPORT is redefined by fragment ./arch/arm64/configs/rk3588_linux.config:
Previous value: # CONFIG_MALI_CSF_SUPPORT is not set
New value: CONFIG_MALI_CSF_SUPPORT=y

#
# merged configuration written to .config (needs make)
#
.config:7862:warning: override: BCMDHD_PCIE changes choice state
#
# configuration written to .config
#
make: Leaving directory '/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/kernel-6.1'
+ make -C /work/sambashare/rk3588/armsom/armsom-rk3588-bsp/kernel/ -j7 CROSS_COMPILE=/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- ARCH=arm64 rk3588-armsom-sige7.img
make: Entering directory '/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/kernel-6.1'
  SYNC    include/config/auto.conf.cmd
  UPD     include/config/kernel.release
  HOSTCC  scripts/dtc/dtc.o
  HOSTCC  scripts/dtc/flattree.o
  HOSTCC  scripts/dtc/fstree.o
  HOSTCC  scripts/dtc/data.o
  HOSTCC  scripts/dtc/livetree.o
  HOSTCC  scripts/dtc/treesource.o
  WRAP    arch/arm64/include/generated/uapi/asm/kvm_para.h
  WRAP    arch/arm64/include/generated/uapi/asm/errno.h
  WRAP    arch/arm64/include/generated/uapi/asm/ioctl.h
......
  LD [M]  drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/bcmdhd.ko
  LD      vmlinux
  NM      System.map
  SORTTAB vmlinux
  OBJCOPY arch/arm64/boot/Image
  LZ4C    arch/arm64/boot/Image.lz4
  Image:  resource.img (with rk3588-armsom-sige7.dtb logo.bmp logo_kernel.bmp) is ready
  Image:  boot.img (with Image  resource.img) is ready
  Image:  zboot.img (with Image.lz4  resource.img) is ready
make: Leaving directory '/work/sambashare/rk3588/armsom/armsom-rk3588-bsp/kernel-6.1'
+ /work/sambashare/rk3588/armsom/armsom-rk3588-bsp/device/rockchip/common/scripts/mk-fitimage.sh kernel/boot.img boot.its k ernel/arch/arm64/boot/Image
FIT description: U-Boot FIT source file for arm
Created:         Sun Nov  9 15:25:11 2025
 Image 0 (fdt)
  Description:  unavailable
  Created:      Sun Nov  9 15:25:11 2025
  Type:         Flat Device Tree
  Compression:  uncompressed
  Data Size:    272425 Bytes = 266.04 KiB = 0.26 MiB
  Architecture: AArch64
  Load Address: 0xffffff00
  Hash algo:    sha256
  Hash value:   ec2780e746c5b0b61f6be6b89762af73fee13afaba8eabe309b99cba28441cf2
 Image 1 (kernel)
  Description:  unavailable
  Created:      Sun Nov  9 15:25:11 2025
  Type:         Kernel Image
  Compression:  uncompressed
  Data Size:    40155648 Bytes = 39214.50 KiB = 38.30 MiB
  Architecture: AArch64
  OS:           Linux
  Load Address: 0xffffff01
  Entry Point:  0xffffff01
  Hash algo:    sha256
  Hash value:   6dfb51c1362f7be153f6c1a67b59079b8d4758415e89ffa1770d4482d9653e24
 Image 2 (resource)
  Description:  unavailable
  Created:      Sun Nov  9 15:25:11 2025
  Type:         Multi-File Image
  Compression:  uncompressed
  Data Size:    310784 Bytes = 303.50 KiB = 0.30 MiB
  Hash algo:    sha256
  Hash value:   a89f740eb0140b3dadac4c6f53e9117c9d2bee9e7957899e03589da2b6512883
 Default Configuration: 'conf'
 Configuration 0 (conf)
  Description:  unavailable
  Kernel:       kernel
  FDT:          fdt
Not Found io-domains in kernel/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts
Running 10-kernel.sh - build_kernel succeeded.

编译生成boot.img

root@ubuntu:/work/sambashare/rk3588/armsom/armsom-rk3588-bsp# ll kernel/boot.img
-rw-r--r-- 1 root root 40742400 11月  9 15:25 kernel/boot.img

4.3 烧录测试

关于``ArmSoM-Sige7开发板的固件烧录可以参考《[4.2 Linux刷机](https://www.cnblogs.com/zyly/p/18239123#_label3_1)》,而有关Mesa安装以及测试参考NanopC T6`开发板部分,这里不做重复介绍了。

六、Panthor驱动源码分析

6.1 驱动入口

驱动入口文件在drivers/gpu/drm/panthor/panthor_drv.c,在该文件我们可以看到支持的GPU型号;

static const struct of_device_id dt_match[] = {
        { .compatible = "rockchip,rk3588-mali" },
        { .compatible = "arm,mali-valhall-csf" },
        {}
};

MODULE_DEVICE_TABLE(of, dt_match);

static DEFINE_RUNTIME_DEV_PM_OPS(panthor_pm_ops,
                                 panthor_device_suspend,
                                 panthor_device_resume,
                                 NULL);

static struct platform_driver panthor_driver = {
        .probe = panthor_probe,
        .remove_new = panthor_remove,
        .driver = {
                .name = "panthor",
                .pm = &panthor_pm_ops,
                .of_match_table = dt_match,
        },
};

6.2 gpu设备节点

arch/arm64/boot/dts/rockchip/rk3588s.dtsi中我们可以定位到gpu设备节点;

gpu: gpu@fb000000 {
	compatible = "rockchip,rk3588-mali", "arm,mali-valhall-csf";
	reg = <0x0 0xfb000000 0x0 0x200000>;
	interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>,
			 <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>,
			 <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
	interrupt-names = "job", "mmu", "gpu";

	clock-names = "core", "coregroup", "stacks";
	clocks = <&cru CLK_GPU>, <&cru CLK_GPU_COREGROUP>,
		 <&cru CLK_GPU_STACKS>;
	assigned-clocks = <&scmi_clk SCMI_CLK_GPU>;
	assigned-clock-rates = <200000000>;
	power-domains = <&power RK3588_PD_GPU>;
	operating-points-v2 = <&gpu_opp_table>;
	#cooling-cells = <2>; 
	dynamic-power-coefficient = <2982>;

	status = "disabled";
};

arch/arm64/boot/dts/rockchip/rk3588-nanopi6-common.dtsi中可以定位到:

&gpu {
        mali-supply = <&vdd_gpu_s0>;
        mem-supply = <&vdd_gpu_mem_s0>;
        upthreshold = <60>;
        downdifferential = <30>;
        status = "okay";
};

其中:

  • compatible:说明了设备兼容的驱动名称,即"rockchip,rk3588-mali";可以看到rockchip,rk3588-mali是和panfrost驱动相匹配的,因此会执行驱动的.probe函数,这里就不深入研究了;
  • reg:指定了寄存器的基地址和大小,即基地址0xfb000000,大小为0x200000
  • interruptsinterrupt-names:分别指定了该设备所使用的中断号和中断的名称;
  • clocks:指定了使用哪个时钟控制器(CRU)提供GPU时钟;
  • power-domains:用于指定设备所属的电源域,即RK3588_PD_GPU
  • mali-supply:指定了GPU设备使用的电源管脚;
  • status:指定GPU设备的状态("okay" 表示设备正常工作)。

参考文章:

[1] Rockchip RK3399 - Mali-T860 GPU驱动 (mesa+Panfrost)

[2] RK3588关于panthor驱动的移植

[3] ARM Mali GPU Upstream software, aka Lima/Panfrost

[4] https://github.com/jacobchencc/panthor

[5] https://github.com/jacobchencc/panthor-linux6.12

[6] Firefly Kernel 6.1 SDK supports Panthor & Panfrost + MESA 25.0.7. Support OpenGL and Vulkan

posted @ 2025-11-03 20:53  大奥特曼打小怪兽  阅读(83)  评论(0)    收藏  举报
如果有任何技术小问题,欢迎大家交流沟通,共同进步