当前位置: 首页 > article >正文

基于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_ENCODER
	tristate "Digilent VGA/HDMI DRM Encoder Driver"
	depends on DRM_XILINX
	help
	  DRM 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_DYNCLK
	tristate "Digilent axi_dynclk Driver"
	depends on ARCH_ZYNQ || MICROBLAZE
	help
	---help---
	  Support for the Digilent AXI Dynamic Clock core for Xilinx
	  FPGAs.

在这里插入图片描述
修改/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应用显示自定义图片

http://www.kler.cn/a/460333.html

相关文章:

  • Linux -- 单例模式
  • el-table 实现纵向多级表头
  • 大带宽服务器和普通服务器相比较的优势
  • 注入少量可学习的向量参数: 注入适配器IA3
  • Python中的闭包和装饰器
  • leetcode 149. 直线上最多的点数
  • labelme2yolov8-seg 草稿()
  • 头歌python:多进程和多线程
  • 年会头投票小游戏
  • 强化学习(1)
  • filament的材质系统
  • io多路复用, select, poll, epoll
  • 计算机因进程结束导致白屏
  • MySQL的多表查询与事务
  • node.js之---EventEmitter 类
  • 数据结构(哈希表)
  • 如何在TikTok上成功推广国际品牌?
  • HTML——20 自定义属性
  • 改进爬山算法之七:动态邻域爬山法(Dynamic Neighborhood Hill Climbing,DNHC)
  • 【项目实战】Apache JMeter HTTP 接口测试
  • CP AUTOSAR标准之FlexRayDriver(AUTOSAR_SWS_FlexRayDriver)(更新中……)
  • ROS2+OpenCV综合应用--9. AprilTag标签码识别
  • 深度学习中的迁移学习:如何利用现有模型加速训练?
  • Rust语言的数据库编程
  • 按照人们阅读Excel习惯来格式化BigDecimal
  • 头歌实训数据结构与算法-二叉树及其应用(第9关:二叉树的顺序存储及基本操作)