如何将 ARM Chromebook 上的 panfrost 驱动程序从内核 5.15 向后移植到内核 5.4

如何将 ARM Chromebook 上的 panfrost 驱动程序从内核 5.15 向后移植到内核 5.4

我几乎已经完成了我的项目:在 ARM Chromebook 上使用 qemu-kvm 在 Linux 上虚拟化 FreeBSD。

一切都很好。甚至虚拟机上的网络。最后一项任务需要完成。

为了能够在我选择并配置了所有内容的 Linux 发行版上使用 panfrost 图形驱动程序:Devuan 5。

我想了解将 ARM Chromebook 上的 panfrost 驱动程序从 1.1 升级到 1.2 的完整过程是什么。

我现在所做的是为我正在使用的内核启用它(版本 5.4.257)。

如果你想问我,因为我不使用更高的内核版本,答案是从5.7版本开始,kvm已经在arm 32位的主线内核上被删除了,但是从内核版本开始。 5.4仍然部分支持,我决定使用它。因此,使用较新的内核并不是这里的解决方案。

为了启用它,我在内核配置文件中启用了以下参数:

# Graphics support

CONFIG_VGA_ARB=y
CONFIG_VGA_ARB_MAX_GPUS=16
CONFIG_DRM=y
CONFIG_DRM_MIPI_DSI=y
CONFIG_DRM_DP_AUX_CHARDEV=y 
CONFIG_DRM_KMS_HELPER=y 
CONFIG_DRM_KMS_FB_HELPER=y 
CONFIG_DRM_FBDEV_EMULATION=y 
CONFIG_DRM_FBDEV_OVERALLOC=100 
CONFIG_DRM_LOAD_EDID_FIRMWARE=y 
CONFIG_DRM_TTM=y 
CONFIG_DRM_VRAM_HELPER=y 
CONFIG_DRM_GEM_CMA_HELPER=y 
CONFIG_DRM_KMS_CMA_HELPER=y 
CONFIG_DRM_GEM_SHMEM_HELPER=y 
CONFIG_DRM_SCHED=y
#I2C encoder or helper chips

CONFIG_DRM_I2C_NXP_TDA998X=y
#end of I2C encoder or helper chips

CONFIG_DRM_VGEM=m CONFIG_DRM_EXYNOS=y

#CRTCs

CONFIG_DRM_EXYNOS_FIMD=y
CONFIG_DRM_EXYNOS_MIXER=y

#Encoders and Bridges

CONFIG_DRM_EXYNOS_DPI=y
CONFIG_DRM_EXYNOS_DSI=y 
CONFIG_DRM_EXYNOS_DP=y 
CONFIG_DRM_EXYNOS_HDMI=y

#Sub-drivers

CONFIG_DRM_CIRRUS_QEMU=m 
CONFIG_DRM_RCAR_LVDS=m 
CONFIG_DRM_QXL=y 
ONFIG_DRM_BOCHS=y 
CONFIG_DRM_VIRTIO_GPU=m 
CONFIG_DRM_PANEL=y

#Display Panels

CONFIG_DRM_PANEL_LVDS=m 
CONFIG_DRM_PANEL_SIMPLE=y
#end of Display Panels

CONFIG_DRM_BRIDGE=y 
CONFIG_DRM_PANEL_BRIDGE=y

#Display Interface Bridges

CONFIG_DRM_NXP_PTN3460=y 
CONFIG_DRM_PARADE_PS8622=m 
CONFIG_DRM_ANALOGIX_DP=y
#end of Display Interface Bridges

CONFIG_DRM_PL111=m 
CONFIG_DRM_PANFROST=y 
CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y

#Frame buffer Devices
CONFIG_FB_CMDLINE=y 
CONFIG_FB_NOTIFY=y 
CONFIG_FB=y 
CONFIG_FIRMWARE_EDID=y 
CONFIG_FB_CFB_FILLRECT=y 
CONFIG_FB_CFB_COPYAREA=y 
CONFIG_FB_CFB_IMAGEBLIT=y 
CONFIG_FB_CFB_REV_PIXELS_IN_BYTE=y 
CONFIG_FB_SYS_FILLRECT=y 
CONFIG_FB_SYS_COPYAREA=y 
CONFIG_FB_SYS_IMAGEBLIT=y 
CONFIG_FB_SYS_FOPS=y 
CONFIG_FB_DEFERRED_IO=y 
CONFIG_FB_BACKLIGHT=y 
CONFIG_FB_MODE_HELPERS=y 
CONFIG_FB_TILEBLITTING=y
#Frame buffer hardware drivers

CONFIG_FB_DA8XX=y 
CONFIG_FB_SIMPLE=y 
CONFIG_FB_SSD1307=y
#end of Frame buffer Devices

#Backlight & LCD device support
CONFIG_LCD_CLASS_DEVICE=y 
CONFIG_LCD_PLATFORM=y 
CONFIG_BACKLIGHT_CLASS_DEVICE=y 
CONFIG_BACKLIGHT_PWM=y 
CONFIG_VIDEOMODE_HELPERS=y 
CONFIG_HDMI=y

尽管存在一些 GPU 调节器错误,但它似乎可以工作:

# dmesg | grep panfrost

[0.378992] panfrost 11800000.gpu: clock rate = 533000000
[0.379769] panfrost 11800000.gpu: failed to get regulator: -517
[0.380517] panfrost 11800000.gpu: regulator init failed -517
[1.149575] panfrost 11800000.gpu: clock rate = 533000000
[1.150987] panfrost 11800000.gpu: mali-t600 id 0x600 major 0x0 minor 0x0 status 0x1
[1.152132] panfrost 11800000.gpu: features: 00000000,10206000, issues: 00000000,31b4dfff
[1.153271] panfrost 11800000.gpu: Features: L2:0x07110206 Shader:0x00000000 Tiler:0x00000809 Mem:0x1 MMU:0x00002830 AS:0xf JS:0x7
[1.154476] panfrost 11800000.gpu: shader_present=0xf l2_present=0x1
[1.158799] [drm] Initialized panfrost 1.1.0 20180908 for 11800000.gpu on minor 0

那有什么问题呢?驱动程序坚持 1.1,而如果使用的内核是 5.15.120,则为 1.2,如下所示。不幸的是我不能使用内核 5.15,但同时我想要 panfrost 驱动程序版本 1.2 :P

# dmesg | grep panfrost

[3.352617] panfrost 11800000.gpu: clock rate = 533000000
[3.354011] panfrost 11800000.gpu: mali-t600 id 0x600 major 0x0 minor 0x0 status 0x1
[3.354020] panfrost 11800000.gpu: features: 00000000,10206000, issues: 00000000,31b4dfff
[3.354027] panfrost 11800000.gpu: Features: L2:0x07110206 Shader:0x00000000 Tiler:0x00000809 Mem:0x1 MMU:0x00002830 AS:0xf JS:0x7
[3.354035] panfrost 11800000.gpu: shader_present=0xf l2_present=0x1
[3.355009] [drm] Initialized panfrost 1.2.0 20180908 for 11800000.gpu on minor 1

根据下面的教程,也许可以升级它:(或者至少我希望)

https://gist.github.com/tstellanova/6f7844379e358ee81b89cf6937ea8139

正如您所看到的,建议的参数如下:

# meson build/ -Dgallium-drivers=lima,panfrost,kmsro,swrast
-Dplatforms=x11,drm,surfaceless -Dvulkan-drivers= -Ddri-drivers= -Dllvm=false

但它们在我的系统上不起作用,因为出现以下错误:

meson.build:21:0: ERROR: Options "drm and surfaceless" are not in allowed 
choices: "auto, x11, wayland, haiku, android, windows"

如果我启用“-Dvulkan-drivers=enabled”,我会收到以下错误:

meson.build:21:0: ERROR: Options "enabled" are not in allowed choices:
"auto, amd, broadcom, freedreno, intel, intel_hasvk, panfrost, swrast, virtio, imagination-experimental, microsoft-experimental, nouveau-experimental"

所以我对它们做了一些修改,我发现了下面的参数,至少没有给出任何错误:

# apt install libxcb-glx0-dev libx11-xcb-dev libxcb-present-dev libxshmfence-dev libxxf86vm-dev 

# git clone https://gitlab.freedesktop.org/mesa/mesa

# cd mesa

meson setup build/ -Dgallium-drivers=lima,panfrost,kmsro,swrast -Dplatforms=x11 -Dvulkan-drivers= -Dllvm=disabled

The Meson build system Version: 1.0.1 
Source dir: /Dati/mesa 
Build dir: /Dati/mesa/build 
Build type: native build 
Project name: mesa 
Project version: 23.3.0-devel

C compiler for the host machine: cc (gcc 12.2.0 "cc (Debian 12.2.0-14) 12.2.0")

C linker for the host machine: cc ld.bfd 2.40

C++ compiler for the host machine: c++ (gcc 12.2.0 "c++ (Debian 12.2.0-14) 12.2.0")

C++ linker for the host machine: c++ ld.bfd 2.40

Host machine cpu family: arm

Host machine cpu: armv7l

Checking if "-mtls-dialect=gnu2" runs: YES

Dependency vdpau skipped: feature gallium-vdpau disabled

Program glslangValidator found: NO

Dependency libva skipped: feature gallium-va disabled

Program python3 found: YES (/usr/bin/python3)

Fetching value of define "ETIME" : 62

Checking for function "bswap32" : YES

Checking for function "bswap64" : YES

Checking for function "clz" : YES

Checking for function "clzll" : YES

Checking for function "ctz" : YES

Checking for function "expect" : YES

Checking for function "ffs" : YES

Checking for function "ffsll" : YES

Checking for function "popcount" : YES

Checking for function "popcountll" : YES

Checking for function "unreachable" : YES
Checking for function "types_compatible_p" : YES
Compiler for C supports function attribute const: YES
Compiler for C supports function attribute flatten: YES
Compiler for C supports function attribute malloc: YES
Compiler for C supports function attribute pure: YES
Compiler for C supports function attribute unused: YES
Compiler for C supports function attribute warn_unused_result: YES
Compiler for C supports function attribute weak: YES
Compiler for C supports function attribute format: YES
Compiler for C supports function attribute packed: YES
Compiler for C supports function attribute returns_nonnull: YES
Compiler for C supports function attribute alias: YES
Compiler for C supports function attribute noreturn: YES
Compiler for C supports function attribute visibility:hidden: YES
Checking if "__uint128_t" compiles: NO
Checking for function "reallocarray" : YES
Checking for function "fmemopen" : YES
Checking if "gc-sections" : links: YES
Compiler for C supports arguments -Werror=implicit-function-declaration: YES
Compiler for C supports arguments -Werror=missing-prototypes: YES
Compiler for C supports arguments -Werror=return-type: YES
Compiler for C supports arguments -Werror=empty-body: YES
Compiler for C supports arguments -Werror=incompatible-pointer-types: YES
Compiler for C supports arguments -Werror=int-conversion: YES
Compiler for C supports arguments -Wimplicit-fallthrough: YES
Compiler for C supports arguments -Wmisleading-indentation: YES
Compiler for C supports arguments -Wno-missing-field-initializers: YES
Compiler for C supports arguments -Wno-format-truncation: YES
Compiler for C supports arguments -Wno-nonnull-compare: YES
Compiler for C supports arguments -fno-math-errno: YES
Compiler for C supports arguments -fno-trapping-math: YES
Compiler for C supports arguments -Qunused-arguments: NO
Compiler for C supports arguments -fno-common: YES
Compiler for C supports arguments -Wno-microsoft-enum-value: NO
Compiler for C supports arguments -Wno-unused-function: YES
Compiler for C supports arguments -Werror=format: YES
Compiler for C supports arguments -Wformat-security: YES
Compiler for C supports arguments -Werror=thread-safety: NO
Compiler for C supports arguments -ffunction-sections: YES
Compiler for C supports arguments -fdata-sections: YES
Compiler for C++ supports arguments -Werror=return-type: YES
Compiler for C++ supports arguments -Werror=empty-body: YES
Compiler for C++ supports arguments -Wmisleading-indentation: YES
Compiler for C++ supports arguments -Wno-non-virtual-dtor: YES
Compiler for C++ supports arguments -Wno-missing-field-initializers: YES
Compiler for C++ supports arguments -Wno-format-truncation: YES
Compiler for C++ supports arguments -fno-math-errno: YES
Compiler for C++ supports arguments -fno-trapping-math: YES
Compiler for C++ supports arguments -Qunused-arguments: NO
Compiler for C++ supports arguments -flifetime-dse=1: YES
Compiler for C++ supports arguments -Wno-microsoft-enum-value: NO
Compiler for C++ supports arguments -Werror=format: YES
Compiler for C++ supports arguments -Wformat-security: YES
Compiler for C++ supports arguments -ffunction-sections: YES
Compiler for C++ supports arguments -fdata-sections: YES
Compiler for C supports arguments -Wno-override-init: YES
Compiler for C supports arguments -Wno-initializer-overrides: NO
Compiler for C supports arguments -Werror=pointer-arith: YES
Compiler for C supports arguments -Werror=vla: YES
Compiler for C supports arguments -Werror=gnu-empty-initializer: NO
Compiler for C++ supports arguments -Werror=pointer-arith: YES
Compiler for C++ supports arguments -Werror=vla: YES
Compiler for C++ supports arguments -Werror=gnu-empty-initializer: NO
Checking for function "__builtin_ia32_clflushopt" : NO
Checking if "GCC atomic builtins" compiles: YES
Checking if "GCC atomic builtins required -latomic" : links: YES
Checking if "GCC 64bit atomics" with dependency : links: YES
Library ws2_32 found: NO
Header "sys/sysmacros.h" has symbol "major" : YES
Header "sys/sysmacros.h" has symbol "minor" : YES
Header "sys/sysmacros.h" has symbol "makedev" : YES
Header "sys/mkdev.h" has symbol "major" : NO
Check usable header "sched.h" : YES
Checking for function "sched_getaffinity" : YES
Check usable header "xlocale.h" : NO
Check usable header "linux/futex.h" : YES
Check usable header "endian.h" : YES
Check usable header "dlfcn.h" : YES
Check usable header "sys/shm.h" : YES
Check usable header "cet.h" : NO
Check usable header "pthread_np.h" : NO
Check usable header "renderdoc_app.h" : NO
Check usable header "sys/inotify.h" : YES
Checking for function "strtof" : YES
Checking for function "mkostemp" : YES
Checking for function "memfd_create" : YES
Checking for function "random_r" : YES
Checking for function "flock" : YES
Checking for function "strtok_r" : YES
Checking for function "getrandom" : YES
Checking for function "qsort_s" : NO
Checking for function "posix_fallocate" : YES
Checking if "GNU qsort_r" : links: YES
Header "time.h" has symbol "struct timespec" : YES
Checking for function "thrd_create" : YES
Header "errno.h" has symbol "program_invocation_name" : YES
Header "math.h" has symbol "issignaling" : YES
Checking for function "posix_memalign" : YES
Checking whether type "struct dirent" has member "d_type" : YES
Checking if "strtod has locale support" : links: YES
Checking if "Bsymbolic" : links: YES
Checking if "version-script" : links: YES
Checking if "dynamic-list" : links: YES
Compiler for C supports link arguments -Wl,--build-id=sha1: YES
Checking for function "dlopen" : YES
Checking for function "dladdr" with dependency : YES
Checking for function "dl_iterate_phdr" : YES
Checking for function "clock_gettime" : YES
Found pkg-config: /usr/bin/pkg-config (1.8.1)
Run-time dependency zlib found: YES 1.2.13
Run-time dependency libzstd found: YES 1.5.4
Run-time dependency threads found: YES
Checking for function "pthread_setaffinity_np" with dependency threads: YES
Run-time dependency expat found: YES 2.5.0
Library m found: YES
Run-time dependency libdrm found: YES 2.4.114
Run-time dependency libudev found: YES 251
Run-time dependency libelf found: YES 0.188
Run-time dependency valgrind found: NO (tried pkgconfig)
Program bison found: YES (/usr/bin/bison)
Program bison found: YES 3.8.2 (/usr/bin/bison)
Program flex found: YES (/usr/bin/flex)
Run-time dependency libunwind found: YES 1.6.2
Run-time dependency x11 found: YES 1.8.4
Run-time dependency xext found: YES 1.3.4
Run-time dependency xfixes found: YES 6.0.0
Run-time dependency xcb-glx found: YES 1.15
Run-time dependency xcb-shm found: YES 1.15
Run-time dependency xcb found: YES 1.15
Found CMake: /usr/bin/cmake (3.25.1)
Run-time dependency xcb-keysyms found: NO (tried pkgconfig and cmake)
Run-time dependency x11-xcb found: YES 1.8.4
Run-time dependency xcb-dri2 found: YES 1.15
Run-time dependency xcb-dri3 found: YES 1.15
Run-time dependency xcb-present found: YES 1.15
Dependency xcb-shm found: YES 1.15 (cached)
Run-time dependency xcb-sync found: YES 1.15
Run-time dependency xshmfence found: YES 1.3
Run-time dependency glproto found: YES 1.4.17
Run-time dependency dri2proto found: YES 2.8
Run-time dependency xxf86vm found: YES 1.1.4
Run-time dependency xcb-xfixes found: YES 1.15
Run-time dependency xcb-randr found: YES 1.15
Run-time dependency xrandr found: YES 1.5.2

Library sensors found: NO
Program nm found: YES (/usr/bin/nm)

Program symbols-check.py found: YES (/usr/bin/python3 /Dati/mesa/bin/symbols- check.py)

Program install_megadrivers.py found: YES (/usr/bin/python3 /Dati/mesa /bin/install_megadrivers.py)

Program decode.py found: YES (/Dati/mesa/src/compiler/isaspec/decode.py)

Program encode.py found: YES (/Dati/mesa/src/compiler/isaspec/encode.py)

Program ln found: YES (/bin/ln) Checking for function "mincore" : YES

Build targets in project: 214

mesa 23.3.0-devel

Directories 
prefix                       : /usr/local 
libdir                       : lib/arm-linux-gnueabihf 
includedir                   : include 
Common C and C++ arguments
c_cpp_args                   : -mtls-dialect=gnu2


OpenGL

OpenGL                       : YES 
ES1                          : YES 
ES2                          : YES 
Shared glapi                 : YES 
GLVND                        : NO

DRI 

Platform                     : drm 
Driver dir                   : /usr/local/lib/arm-linux-gnueabihf/dri

GLX 

Enabled                      : YES 
Provider                     : dri

EGL Enabled                  : YES 
Drivers                      : builtin:egl_dri2 builtin:egl_dri3 
Platforms                    : x11 surfaceless drm xcb

GBM 

Enabled                      : YES 
Backends path                : /usr/local/lib/arm-linux-gnueabihf/gbm
Vulkan Drivers               : NO 
Video Codecs                 : NO 
APIs                         : NO
LLVM Enabled                 : NO 
Gallium Enabled              : YES 
Drivers                      : lima panfrost kmsro swrast 
Platforms                    : x11 surfaceless drm xcb 
Frontends                    : mesa 
Off-screen rendering (OSMesa): NO 
HUD lm-sensors               : NO
Perfetto Enabled             : NO

User defined options

gallium-drivers              : lima,panfrost,kmsro,swrast 
llvm                         : disabled 
platforms                    : x11 
vulkan-drivers               :

Found ninja-1.11.1 at /usr/bin/ninja

但 panfrost 驱动程序仍然停留在 1.1 版本:

[drm] Initialized panfrost 1.1.0 20180908 for 11800000.gpu on minor 0

我尝试将 panfrost 驱动程序反向移植到内核 5.4(通过将内核 5.15 上存储 panfrost 源代码的文件夹复制到内核 5.4 上 panfrost 源代码所在的文件夹,并且我启动了命令:

make zImage modules dtbs uImage LOADADDR=0x42004000

不幸的是,在 C++ 代码中存在一些我不知道如何修复的错误:

............
CC [M]  drivers/gpu/drm/panfrost/panfrost_drv.o
drivers/gpu/drm/panfrost/panfrost_drv.c: In function ‘panfrost_ioctl_get_param’:
drivers/gpu/drm/panfrost/panfrost_drv.c:35:14: error:
‘DRM_PANFROST_PARAM_AFBC_FEATURES’ undeclared (first use in this function); did y
ou mean ‘DRM_PANFROST_PARAM_MMU_FEATURES’?
  35 |         case DRM_PANFROST_PARAM_ ## name:               \
     |              ^~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/panfrost/panfrost_drv.c:66:17: note: in expansion of macro
‘PANFROST_FEATURE’
  66 |                 PANFROST_FEATURE(AFBC_FEATURES, afbc_features);
     |                 ^~~~~~~~~~~~~~~~
drivers/gpu/drm/panfrost/panfrost_drv.c:35:14: note: each undeclared identifier is
reported only once for each function it appears in
  35 |         case DRM_PANFROST_PARAM_ ## name:               \
     |              ^~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/panfrost/panfrost_drv.c:66:17: note: in expansion of macro
‘PANFROST_FEATURE’
  66 |                 PANFROST_FEATURE(AFBC_FEATURES, afbc_features);
     |                 ^~~~~~~~~~~~~~~~
drivers/gpu/drm/panfrost/panfrost_drv.c: In function ‘panfrost_ioctl_wait_bo’:
drivers/gpu/drm/panfrost/panfrost_drv.c:319:15: error: implicit declaration of
function ‘dma_resv_wait_timeout’; did you mean ‘dma_resv
_wait_timeout_rcu’? [-Werror=implicit-function-declaration]
 319 |         ret = dma_resv_wait_timeout(gem_obj->resv, true, true, timeout);
     |               ^~~~~~~~~~~~~~~~~~~~~
     |               dma_resv_wait_timeout_rcu
drivers/gpu/drm/panfrost/panfrost_drv.c: In function ‘panfrost_ioctl_madvise’:
drivers/gpu/drm/panfrost/panfrost_drv.c:430:48: error: passing argument 1 of
‘drm_gem_shmem_madvise’ from incompatible pointer type [-Werror=incompatible-
pointer-types]
 430 |         args->retained = drm_gem_shmem_madvise(&bo->base, args->madv);
     |                                                ^~~~~~~~~
     |                                                |
     |                                                struct drm_gem_shmem_object *
In file included from drivers/gpu/drm/panfrost/panfrost_gem.h:7,
                from drivers/gpu/drm/panfrost/panfrost_drv.c:17:
./include/drm/drm_gem_shmem_helper.h:140:50: note: expected ‘struct drm_gem_object
*’ but argument is of type ‘struct drm_gem_shmem_obj
ect *’
 140 | int drm_gem_shmem_madvise(struct drm_gem_object *obj, int madv);
     |                           ~~~~~~~~~~~~~~~~~~~~~~~^~~
drivers/gpu/drm/panfrost/panfrost_drv.c: In function ‘panfrost_probe’:
drivers/gpu/drm/panfrost/panfrost_drv.c:566:30: warning: passing argument 1 of
‘drm_dev_alloc’ discards ‘const’ qualifier from pointer
target type [-Wdiscarded-qualifiers]
 566 |         ddev = drm_dev_alloc(&panfrost_drm_driver, &pdev->dev);
     |                              ^~~~~~~~~~~~~~~~~~~~
In file included from drivers/gpu/drm/panfrost/panfrost_drv.c:11:
./include/drm/drm_drv.h:791:53: note: expected ‘struct drm_driver *’ but argument is
of type ‘const struct drm_driver *’
 791 | struct drm_device *drm_dev_alloc(struct drm_driver *driver,
     |                                  ~~~~~~~~~~~~~~~~~~~^~~~~~
cc1: some warnings being treated as errors
make[4]: *** [scripts/Makefile.build:262: drivers/gpu/drm/panfrost/panfrost_drv.o]
Errore 1
make[3]: *** [scripts/Makefile.build:497: drivers/gpu/drm/panfrost] Errore 2
make[2]: *** [scripts/Makefile.build:497: drivers/gpu/drm] Errore 2
make[1]: *** [scripts/Makefile.build:497: drivers/gpu] Errore 2
make: *** [Makefile:1750: drivers] Errore 2

答案1

嗯。你在这里看到的是两件事:

  1. 您复制了需要复制到旧内核的部分内容:您正在尝试获取尚不存在的符号:
rivers/gpu/drm/panfrost/panfrost_drv.c: In function ‘panfrost_ioctl_get_param’:
drivers/gpu/drm/panfrost/panfrost_drv.c:35:14: error:
‘DRM_PANFROST_PARAM_AFBC_FEATURES’ undeclared (first use in this function); did y
ou mean ‘DRM_PANFROST_PARAM_MMU_FEATURES’?
  35 |         case DRM_PANFROST_PARAM_ ## name:               \
     |              ^~~~~~~~~~~~~~~~~~~
  1. 您尝试使用 5.4 下与 5.15 下不同的 API:
drivers/gpu/drm/panfrost/panfrost_drv.c: In function ‘panfrost_ioctl_madvise’:
drivers/gpu/drm/panfrost/panfrost_drv.c:430:48: error: passing argument 1 of
‘drm_gem_shmem_madvise’ from incompatible pointer type [-Werror=incompatible-
pointer-types]
 430 |         args->retained = drm_gem_shmem_madvise(&bo->base, args->madv);
     |                                                ^~~~~~~~~
     |                                                |
     |                                                struct drm_gem_shmem_object *
In file included from drivers/gpu/drm/panfrost/panfrost_gem.h:7,
                from drivers/gpu/drm/panfrost/panfrost_drv.c:17:
./include/drm/drm_gem_shmem_helper.h:140:50: note: expected ‘struct drm_gem_object
*’ but argument is of type ‘struct drm_gem_shmem_obj
ect *’

两者都很好地说明了为什么“我刚刚复制了这个子文件夹”通常不是向后移植的方式(你没有得到你需要的所有内容,并且零保证你正在使用的内部 API 没有改变。所以这将不起作用,但很难调试。)

你需要做的是,首先,在 git 历史记录中找到最终添加了你想要的 panfrost 驱动程序的变更集,其次找到你当前内核与该内核之间的共同祖先,然后cherry-picki DRM 驱动程序中的所有相关更改从分支点到内核头部的基础设施。

这里诚实的问题是为什么你要使用旧内核,因为坦率地说,无论是什么让你使用 5.4,它可能更容易,向前移植 5.15 比向后移植最现代的 DRM 驱动程序之一更有用。

好消息是情况也许并非如此可怕的。点击 OFTC 上的 #panfrost IRC 频道,询问他们。你的一个实时且运行良好的 LTS 版本,所以也许已经有人了完成了大部分工作。

相关内容