麒麟系统v10服务器版本支持intel 12th集成显卡

背景

软硬件信息:

cpu:12th Gen Intel® Core™ i5-12400

gpu:00:02.0 VGA compatible controller: Intel Corporation Alder Lake-S GT1 [UHD Graphics 730] (rev 0c)

os:麒麟服务器操作系统v10 sp3 2403

kernel: 4.19

问题:

1.实际安装完操作系统后后通过设置界面发现只有一个显示器分辨率。

2.集成显卡的加速功能未正常使能。

1 问题分析

问题1:

麒麟v10操作系统默认使用的是4.19的内核,默认不支持intel 12+以上的cpu的集成显卡显卡,导致默认使用的显卡驱动是最原始的fbdev,可以通过查看启动后的/var/log/Xorg.0.log进行确认,实际并不是使用的xorg中默认的modesetting官方的通用ddx驱动而是fallback成了对应的fbdev,实际原因是因为默认内核中i915显卡驱动并未支持当前的显卡驱动。

问题2:

实际通过命令"glxgears -info" 查看到GL_RENDERER使用的是llvmpipe(cpu软渲染),出现该问题的时候实际集成显卡的3d加速并未用起来,初步怀疑是使用的mesa版本太旧导致的,默认的mesa版本是20.1.4版本,该版本实际的发布时间跟集成显卡来比太旧了但是还不支持。

2 问题解决

问题1解决方案:

默认麒麟的操作系统的内核版本是4.19,实际可以考虑使用更高版本的内核,比如5.x或者6.x肯定支持,后续考虑进行4.19的内核的i915驱动进行升级或者是进行intel-gpu-i915-backport进行适配,再不升级内核版本的情况下能够获得更好的i915的新的驱动的支持。

目前博主分几步走:

第一步:由于实际intel-gpu-i915-backport的分支中有相应的关于redhat的适配版本8.5/8.6/8.7/8.8/8.9等已经有针对对应的redhat适配过了的版本,所以优先考虑用最新的版本8.9版本,但是redhat的社区版本centos已经停服了,实际考虑相关的替代版本:AlmaLinux、Rocky Linux版本进行相关的适配工作。先简单的进行Rocky linux的内核版本进行升级。

第二步:参考intel-gpu-i915-backport(8.9)和对应kernel(4.18) rocky linux 内核进行适配,实际考虑不升级或者修改啮合的前提下适配对应的i915的backport版本,这块暂时不做详细的讨论。

rocky linux 实际内核下载的参考地址如下所示:

https://dl.rockylinux.org/vault/rocky/8.9/BaseOS/x86_64/os/Packages/k/

c 复制代码
kernel-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-core-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-devel-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-headers-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-modules-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-modules-extra-4.18.0-513.24.1.el8_9.x86_64.rpm

升级过程中碰到的问题:

  1. 通过rpm -ivh kernel-4.18.0-513.24.1.el8_9.x86_64.rpm kernel-core-4.18.0-513.24.1.el8_9.x86_64.rpm kernel-modules-4.18.0-513.24.1.el8_9.x86_64.rpm kernel-modules-extra-4.18.0-513.24.1.el8_9.x86_64.rpm --force
  2. 通过rpm -Uvh kernel-headers-4.18.0-513.24.1.el8_9.x86_64.rpm kernel-devel-4.18.0-513.24.1.el8_9.x86_64.rpm --force
    为什么一个是ivh一个是Uvh,因为实际我想保留原始的内核,怕实际升级的过程中会有问题,实际升级完发现操作系统一直在登录界面,通过启动原来的内核进行分析日志发现是/usr/bin/systemd有相关权限问题,跟selinut相关,最后通过修改/etc/selinux/config中的配置文件中的SELINUX=enforcing改成SELINUX=disabled(实际不改之前通过getenforce获取到的状态本身就是disabled,但是改了以后才能正常加载启动到登录session界面,怀疑selinux配置跟实际查询命令挂接存在兼容问题?)。

效果:

实际重新启动操作系统,通过查看驱动加载情况:

c 复制代码
$ lsmod | grep i915 #正常加载
$ xrandr #可以查看到多个显示分辨率了
$ vi /var/log/Xorg.0.log #可以看到生成了/dev/dri/card0的显卡节点,且从fbdev变成了modesetting的驱动了。

问题1:

实际i915驱动加载的过程中发现了几个问题,下图体现了实际加载i915的过程中会出现对应的加载固件会失败,

通过:

https://github.com/intel-gpu/intel-gpu-firmware.git

下载对应的固件放入到操作系统中,里面有一个README,但是实际发现重启还是有问题,为什么我放进去了还是机会有问题呢找不到,后面想到可能是因为i915驱动在initrd中,然后我没有做dracut -f导致刚才的固件在initrd加载i915的时候找不到,通过lsinitrd --unpack xxx.img查看确实没有对应的固件且有对应的i915.ko.xz,通过执行dracut -f更新initrd后消除该问题。

备注:fedora(最上游)-->redhat(商业)--->centos(开源版本,2021最后的版本8.5以后停服了,后面没有版本更新)。

问题2解决方案:

实际通过如下命令查看到使用的是cpu软渲染:

c 复制代码
glxgears -info #查看GL_RENDER是cpu的软渲染

解决思路:

  1. 尝试直接下载已经编译好的mesa的高版本的驱动进行升级,升级过程过程中发现如下错误:
c 复制代码
错误:依赖检测失败:
        libLLVM-17.so()(64bit) 被 mesa-dri-drivers-24.0.3-2.x86_64 需要
        libLLVM-17.so(LLVM_17)(64bit) 被 mesa-dri-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.26)(64bit) 被 mesa-dri-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.28)(64bit) 被 mesa-dri-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.29)(64bit) 被 mesa-dri-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.30)(64bit) 被 mesa-dri-drivers-24.0.3-2.x86_64 需要
        libLLVM-17.so()(64bit) 被 mesa-libd3d-24.0.3-2.x86_64 需要
        libLLVM-17.so(LLVM_17)(64bit) 被 mesa-libd3d-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.26)(64bit) 被 mesa-libd3d-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.28)(64bit) 被 mesa-libd3d-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.29)(64bit) 被 mesa-libd3d-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.30)(64bit) 被 mesa-libd3d-24.0.3-2.x86_64 需要
        libLLVM-17.so()(64bit) 被 mesa-libOSMesa-24.0.3-2.x86_64 需要
        libLLVM-17.so(LLVM_17)(64bit) 被 mesa-libOSMesa-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.29)(64bit) 被 mesa-libOSMesa-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.30)(64bit) 被 mesa-libOSMesa-24.0.3-2.x86_64 需要
        libLLVM-17.so()(64bit) 被 mesa-libxatracker-24.0.3-2.x86_64 需要
        libLLVM-17.so(LLVM_17)(64bit) 被 mesa-libxatracker-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.29)(64bit) 被 mesa-libxatracker-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.30)(64bit) 被 mesa-libxatracker-24.0.3-2.x86_64 需要
        libLLVM-17.so()(64bit) 被 mesa-omx-drivers-24.0.3-2.x86_64 需要
        libLLVM-17.so(LLVM_17)(64bit) 被 mesa-omx-drivers-24.0.3-2.x86_64 需要
        libomxil-bellagio.so.0()(64bit) 被 mesa-omx-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.26)(64bit) 被 mesa-omx-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.28)(64bit) 被 mesa-omx-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.29)(64bit) 被 mesa-omx-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.30)(64bit) 被 mesa-omx-drivers-24.0.3-2.x86_64 需要
        libLLVM-17.so()(64bit) 被 mesa-vdpau-drivers-24.0.3-2.x86_64 需要
        libLLVM-17.so(LLVM_17)(64bit) 被 mesa-vdpau-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.26)(64bit) 被 mesa-vdpau-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.28)(64bit) 被 mesa-vdpau-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.29)(64bit) 被 mesa-vdpau-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.30)(64bit) 被 mesa-vdpau-drivers-24.0.3-2.x86_64 需要
        libLLVM-17.so()(64bit) 被 mesa-vulkan-drivers-24.0.3-2.x86_64 需要
        libLLVM-17.so(LLVM_17)(64bit) 被 mesa-vulkan-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.26)(64bit) 被 mesa-vulkan-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.28)(64bit) 被 mesa-vulkan-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.29)(64bit) 被 mesa-vulkan-drivers-24.0.3-2.x86_64 需要
        libstdc++.so.6(GLIBCXX_3.4.30)(64bit) 被 mesa-vulkan-drivers-24.0.3-2.x86_64 需要

考虑到实际mesa的高版本24.03可能编译的环境不是当前的操作系统环境编译的(实际llvm和glibc的版本可能更高会导致有问题)。所以想着自己重新进行相关的编译工作。

  1. 参考openeuler中的高版本的mesa版本进行编译,考虑到如果mesa版本太高可能编译问题会更多问题(主要依赖问题)或者太低对于当前的gpu的支持情况,这边参考如下网址下载了mesa的21.3.1版本进行尝试编译工作。

https://archives.openeuler.openatom.cn/openEuler-22.09/source/Packages/

c 复制代码
$ rpm -ivh mesa-21.3.1-6.oe2203sp4.src.rpm
$ yum-builddep -y ~/rpmbuild/SPEC/mesa.spec #实际需要升级libdrm和手动编译安装ft_surface-devel包
$ rpmbuild -ba ~/rpmbuild/SPEC/mesa.spec

编译过程中碰到的问题:
错误1:

c 复制代码
meson.build:1691: WARNING: shared_llvm option "true" deprecated, please use "enabled" instead.
meson.build:1704: WARNING: llvm option "true" deprecated, please use "enabled" instead.
llvm-config found: NO found '10.0.1' but need '>= 11.0.0'
Run-time dependency LLVM found: NO (tried cmake and config-tool)
Looking for a fallback subproject for the dependency llvm

meson.build:1724:2: ERROR: Subproject directory not found and llvm.wrap file not found

A full log can be found at /root/rpmbuild/BUILD/mesa-21.3.1/x86_64-kylin-linux-gnu/meson-logs/meson-log.txt
错误:/var/tmp/rpm-tmp.vWBItY (%build) 退出状态不好


RPM 构建错误:
    /var/tmp/rpm-tmp.vWBItY (%build) 退出状态不好

操作系统llvm默认版本是10.0升级到11.0版本,解决该问题。

错误2:

c 复制代码
Using 'PKG_CONFIG_PATH' from environment with value: ':/usr/lib64/pkgconfig:/usr/share/pkgconfig'
Dependency wayland-client found: NO found 1.17.0 but need: '>=1.18'
Run-time dependency wayland-client found: NO (tried cmake)

meson.build:2011:2: ERROR: Invalid version of dependency, need 'wayland-client' ['>=1.18'] found '1.17.0'.

A full log can be found at /root/rpmbuild/BUILD/mesa-21.3.1/x86_64-kylin-linux-gnu/meson-logs/meson-log.txt
错误:/var/tmp/rpm-tmp.mFy1IJ (%build) 退出状态不好


RPM 构建错误:
    /var/tmp/rpm-tmp.mFy1IJ (%build) 退出状态不好

修改mesa.spec文件中的-Dplatforms=x11,wayland%{?with_ft:,ohos}改成只支持x11,实际当前的麒麟操作系统本身就不支持wayland,所以可以考虑移除对wayland平台的支持。

编译成功,升级对应的mesa包进行简单的测试,该版本只是为了演示实际升级mesa的一个过程。

c 复制代码
检查未打包文件:/usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/mesa-21.3.1-6.ky10.x86_64
已写至:/root/rpmbuild/SRPMS/mesa-21.3.1-6.ky10.src.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libGL-devel-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libgbm-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libgbm-devel-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libxatracker-devel-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libOSMesa-devel-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libglapi-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libEGL-devel-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-filesystem-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-vulkan-devel-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libEGL-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libGL-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libxatracker-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-libOSMesa-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-vdpau-drivers-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-vulkan-drivers-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-dri-drivers-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-debugsource-21.3.1-6.ky10.x86_64.rpm
已写至:/root/rpmbuild/RPMS/x86_64/mesa-debuginfo-21.3.1-6.ky10.x86_64.rpm
  1. 升级mesa版本进行测试验证
c 复制代码
[root@localhost mesa-21.3.1]# ls
mesa-dri-drivers-21.3.1-6.ky10.x86_64.rpm  mesa-libgbm-21.3.1-6.ky10.x86_64.rpm    mesa-libOSMesa-21.3.1-6.ky10.x86_64.rpm      mesa-vulkan-drivers-21.3.1-6.ky10.x86_64.rpm
mesa-filesystem-21.3.1-6.ky10.x86_64.rpm   mesa-libGL-21.3.1-6.ky10.x86_64.rpm     mesa-libxatracker-21.3.1-6.ky10.x86_64.rpm
mesa-libEGL-21.3.1-6.ky10.x86_64.rpm       mesa-libglapi-21.3.1-6.ky10.x86_64.rpm  mesa-vdpau-drivers-21.3.1-6.ky10.x86_64.rpm
[root@localhost mesa-21.3.1]# rpm -Uvh *.rpm --force
Verifying...                          ################################# [100%]
准备中...                          ################################# [100%]
正在升级/安装...
   1:mesa-libglapi-21.3.1-6.ky10      ################################# [  6%]
   2:mesa-filesystem-21.3.1-6.ky10    ################################# [ 11%]
   3:mesa-libgbm-21.3.1-6.ky10        ################################# [ 17%]
   4:mesa-libEGL-21.3.1-6.ky10        ################################# [ 22%]
   5:mesa-dri-drivers-21.3.1-6.ky10   ################################# [ 28%]
   6:mesa-vdpau-drivers-21.3.1-6.ky10 ################################# [ 33%]
   7:mesa-libGL-21.3.1-6.ky10         ################################# [ 39%]
   8:mesa-libOSMesa-21.3.1-6.ky10     ################################# [ 44%]
   9:mesa-vulkan-drivers-21.3.1-6.ky10################################# [ 50%]
  10:mesa-libxatracker-21.3.1-6.ky10  ################################# [ 56%]
正在清理/删除...
  11:mesa-libGL-20.1.4-3.p01.ky10     ################################# [ 61%]
  12:mesa-libEGL-20.1.4-3.p01.ky10    ################################# [ 67%]
  13:mesa-dri-drivers-20.1.4-3.p01.ky1################################# [ 72%]
  14:mesa-filesystem-20.1.4-3.p01.ky10################################# [ 78%]
  15:mesa-libglapi-20.1.4-3.p01.ky10  ################################# [ 83%]
  16:mesa-libgbm-20.1.4-3.p01.ky10    ################################# [ 89%]
  17:mesa-vulkan-drivers-20.1.4-3.p01.################################# [ 94%]
  18:mesa-libxatracker-20.1.4-3.p01.ky################################# [100%]

通过查看/var/log/Xorg.0.log查看glamor通过mesa进行3d转2d加速的情况。

通过glxgears -info 查看实际3D加速默认使能了。

备注:

相关推荐
@迷糊1 小时前
服务器电源扫盲
服务器
djBe17esS1 小时前
实战:Java 日志中打印服务器 IP,快速区分多服务器日志归属
java·服务器·tcp/ip
Jp7gnUWcI2 小时前
.NET Win32磁盘动态卷触发“函数不正确”问题排查
运维·服务器·.net
林姜泽樾2 小时前
linux入门第十八章,IP、主机名、域名解析
linux·服务器·tcp/ip
数智化管理手记10 小时前
精益生产中的TPM管理是什么?一文破解设备零故障的密码
服务器·网络·数据库·低代码·制造·源代码管理·精益工程
@insist12312 小时前
网络工程师-生成树协议(STP/RSTP/MSTP)核心原理与应用
服务器·开发语言·网络工程师·软考·软件水平考试
zzzsde14 小时前
【Linux】库的制作和使用(3)ELF&&动态链接
linux·运维·服务器
CQU_JIAKE14 小时前
4.3【A]
linux·运维·服务器
AI周红伟14 小时前
OpenClaw是什么?OpenClaw能做什么?OpenClaw详细介绍及保姆级部署教程-周红伟
大数据·运维·服务器·人工智能·微信·openclaw