欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 基于zynq在linux下的HDMI实战

基于zynq在linux下的HDMI实战

2025/5/1 17:49:01 来源:https://blog.csdn.net/qq_45521099/article/details/144759803  浏览:    关键词:基于zynq在linux下的HDMI实战

ZYNQ系列文章目录

第一章:基于zynq在linux下的phy调试记录
第二章:qemu制作ubuntu文件系统
第三章:基于zynq在linux下的AXI-CAN实战
第四章:基于zynq在linux下的HDMI实战


文章目录

  • ZYNQ系列文章目录
  • 前言
  • 一、vivado中HDMI的配置
    • 1.1 IP核准备
    • 1.2 vivado Diagram配置
    • 1.3 SDK配置
  • 二、petalinux中HDMI的配置
    • 2.1 内核驱动准备
    • 2.2 内核驱动添加
    • 2.3 内核配置
    • 2.4 设备树配置
  • 三、petalinux下HDMI测试
    • 1、LINUX控制台在显示屏上的展示
    • 2、LINUIX应用层编码展示自定义图片
  • 总结


前言

记录zynq调试:

从petalinux的搭建,到uboot、kernel、rootfs的适配、移植、SDK构建及优化


提示:以下是本篇文章正文内容,下面案例可供参考

一、vivado中HDMI的配置

基于4.14的内核适配HDMI,无需进行内核驱动的修改,全程无缝替换。
但是基于5.10因为DRM整个框架的改动,相关IP核的驱动需要修改。

1.1 IP核准备

需要两个关键性的得捷IP核,点击直接下载
RGB TO DVI
DYNAMIC CLOCK

1.2 vivado Diagram配置

首先将1.1中准备好的2个IP核放入指定目录,然后导入至vivado中

在这里插入图片描述

Diagram配置如下

在这里插入图片描述

XDC中TVDS及HDMI-IIC自行根据个人硬件IO进行配置 建议直接在菜单导航栏中点击该选项中的 “Open Elaborated Design ”。然后在菜单栏中点击 Layout ,在下拉列表中选择 I/O Planning 以打开 I/O Ports 窗口。我们将在 I/O Ports 窗口中对hdmi-iic、tmds 引出的接口进行管脚分配。

在这里插入图片描述

保存后会自行生成XDC

在这里插入图片描述

最后点击Generate Bitstream生成system.bit

1.3 SDK配置

1、使用fsbl官方例程生成fsbl.elf,给petalinux生成BOOT.BIN使用。
2、生成pl.dtsi,给内核中设备树当头文件使用
在这里插入图片描述
在这里插入图片描述

二、petalinux中HDMI的配置

2.1 内核驱动准备

clk-dglnt-dynclk.c
digilent_encoder.c

2.2 内核驱动添加

将2.1中两个驱动文件分别放入/kernel/drivers/gpu/drm/xilinx/及kernel/drivers/clk中
在这里插入图片描述
下一步进行digilent_encoder.c的修改
先修改/kernel/drivers/gpu/drm/xilinx/kconfig 在最后一行加上

config DRM_DIGILENT_ENCODERtristate "Digilent VGA/HDMI DRM Encoder Driver"depends on DRM_XILINXhelpDRM slave encoder for Video-out on Digilent boards.

在这里插入图片描述
修改/kernel/drivers/gpu/drm/xilinx/makefile 添加相关源码编译链接

obj-$(CONFIG_DRM_DIGILENT_ENCODER) += digilent_encoder.o

在这里插入图片描述
开始进行clk-dglnt-dynclk.c的修改
先修改/kernel/drivers/clk/kconfig ,其中加上

config COMMON_CLK_DGLNT_DYNCLKtristate "Digilent axi_dynclk Driver"depends on ARCH_ZYNQ || MICROBLAZEhelp---help---Support for the Digilent AXI Dynamic Clock core for XilinxFPGAs.

在这里插入图片描述
修改/kernel/drivers/clk/makefile ,其中加上

obj-$(CONFIG_COMMON_CLK_DGLNT_DYNCLK)	+=	clk-dglnt-dynclk.o

在这里插入图片描述

2.3 内核配置

kernel目录终端执行

make menuconfig ARCH =arm CROSS_COMPILE=arm-linux-gnueabihf

配置xiilinx自己的DRM驱动及CLK驱动

在这里插入图片描述
在这里插入图片描述

2.4 设备树配置

前提:所有节点的寄存器属性都依赖于pl.dtsi中生成的节点及属性
打开system-top.dts

&amba_pl {hdmi_encoder_0:hdmi_encoder {status = "okay";compatible = "digilent,drm-encoder";// digilent,edid-i2c = <&i2c1>;digilent,hpref = <1920>;digilent,vpref = <1080>;};xilinx_drm {status = "okay";compatible = "xlnx,drm";xlnx,vtc = <&v_tc_0>;xlnx,connector-type = "HDMIA";xlnx,encoder-slave = <&hdmi_encoder_0>;clocks = <&axi_dynclk_0>;dglnt,edid-i2c = <&i2c1>;planes {xlnx,pixel-format = "rgb888";plane0 {dmas = <&axi_vdma_0 0>;dma-names = "dma";};};};
};&axi_dynclk_0 {status = "okay";compatible = "digilent,axi-dynclk";#clock-cells = <0>;clocks = <&clkc 15>;
};&v_tc_0 {status = "okay";compatible = "xlnx,v-tc-5.01.a";
};

不要问1:为什么我的v_tc_0 compatible 属性是5.01.a,因为下面截图是事实真相。
compatible 属性在设备树中的作用是确保内核能够根据硬件的描述正确地识别和驱动硬件设备,它是设备树与设备驱动程序之间的桥梁
在这里插入图片描述
不要问2:HDMI的iic注释掉是因为当前的板子分辨率自适应失败了,导致drm驱动后面没起来,无赖之举直接将分辨率写成固定值。

三、petalinux下HDMI测试

1、LINUX控制台在显示屏上的展示

在这里插入图片描述

2、LINUIX应用层编码展示自定义图片

总结

这里对文章进行总结:
本次要讲述的zynq的hdmi驱动加载小知识就说到这里了,兄弟萌要有什么指导意见或疑问可以在评论区留下"足迹"。

version1.0:初稿,下个版本会补充linux应用显示自定义图片

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词