如何在不使用 Yocto build 的情况下启用 etnaviv 驱动程序?

How to enable etnaviv drivers without using Yocto build?

我有带有内核 4.14 和 vivante 驱动程序 6.2.4p4.0(Freescale 的官方驱动程序)的定制板。 我想使用 mesa 驱动程序而不是 Freescale 来测试我的 Qt 应用程序。 我已经下载并手动编译并安装了 mesa 驱动程序,并启用了 kmsroetnaviv 驱动程序选项,但这些步骤似乎并没有够了。

安装 mesa 驱动程序后要执行哪些步骤才能启用它们?

我无法访问我的电路板的 Yocto 层,因此无法重建映像。

谢谢!

为了启用 etnaviv 内核模块,我执行了以下操作:

下载并编译内核源码v4.14,启用以下选项:

  • 设备驱动程序-> 图形支持-> [M]ETNAVIV
  • MXC 支持驱动程序-> MXC Vivante GPU 支持->[*]MXC Vivante GPU support

然后安装或编译MESA。如果您选择编译 MESA,请记住在 meson_options.txt 文件中启用选项 kmsroetnaviv

最后,要检查 etnaviv 是否已成功加载,请执行以下操作:

# dmesg | grep etnaviv

应该输出如下内容:

[    6.249793] etnaviv gpu-subsystem: bound 134000.gpu (ops gpu_ops [etnaviv])
[    6.249866] etnaviv gpu-subsystem: bound 130000.gpu (ops gpu_ops [etnaviv])
[    6.249919] etnaviv gpu-subsystem: bound 2204000.gpu (ops gpu_ops [etnaviv])
[    6.249934] etnaviv-gpu 134000.gpu: model: GC320, revision: 5007
[    6.332274] etnaviv-gpu 130000.gpu: model: GC2000, revision: 5108
[    6.402442] etnaviv-gpu 2204000.gpu: model: GC355, revision: 1215
[    6.402474] etnaviv-gpu 2204000.gpu: Ignoring GPU with VG and FE2.0
[    6.416880] [drm] Initialized etnaviv 1.1.0 20151214 for gpu-subsystem on minor 1

还要检查你的 dtb 文件是否正确初始化,我的有以下关于 gpu 的条目:

        gpu@00130000 {
            compatible = "vivante,gc";
            reg = <0x130000 0x4000>;
            interrupts = <0x0 0x9 0x4>;
            clocks = <0x2 0x1b 0x2 0x7a 0x2 0x4a>;
            clock-names = "bus", "core", "shader";
            power-domains = <0x9>;
            linux,phandle = <0x82>;
            phandle = <0x82>;
    };

    gpu@00134000 {
            compatible = "vivante,gc";
            reg = <0x134000 0x4000>;
            interrupts = <0x0 0xa 0x4>;
            clocks = <0x2 0x1a 0x2 0x79>;
            clock-names = "bus", "core";
            power-domains = <0x9>;
            linux,phandle = <0x81>;
            phandle = <0x81>;
    };

    gpu@02204000 {
        compatible = "vivante,gc";
        reg = <0x2204000 0x4000>;
        interrupts = <0x0 0xb 0x4>;
        clocks = <0x2 0x8f 0x2 0x79>;
        clock-names = "bus", "core";
        power-domains = <0x9>;
        linux,phandle = <0x83>;
        phandle = <0x83>;
    };

   gpu-subsystem {
        compatible = "fsl,imx-gpu-subsystem";
        cores = <0x81 0x82 0x83>;
    };

注意:如果您收到类似“命令缓冲区超出有效内存 window”的 dmesg 错误输出,则可能是您需要增加 cma被保留。你必须通过内核参数来完成,在我的例子中,我必须通过 uboot 设置以下内容:cma=256M@2G