为了启用 etnaviv 内核模块,我执行了以下操作:
下载并编译内核源 v4.14,启用以下选项:
- 设备驱动程序-> 图形支持->
[M]ETNAVIV
- MXC支持驱动->MXC Vivante GPU支持->
[*]MXC Vivante GPU support
然后安装或编译 MESA。如果您选择编译 MESA,请记住在 meson_options.txt 文件中启用选项 kmsro 和 etnaviv。
最后,要检查 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>;
};
注意:如果您收到类似“有效内存窗口之外的命令缓冲区”的 dmesg 错误输出,则可能是您需要增加保留的 cma。您必须通过内核参数来完成,在我的情况下,我必须通过 uboot 设置以下内容:cma=256M@2G