黑金ZYNQ7100配置HDMI驱动并测试

news2024/11/19 17:45:45

Linux系统移植系列

Linux系统移植专栏地址 https://blog.csdn.net/qq_41873311/category_12127932.html

一个写了五篇博客,成功在黑金ZYNQ7100搭建了属于我自己的Linux系统
但是缺少显示模块,所以本文就配置个HDMI驱动来完成图像的显示

环境

  1. hdf设计:vivado 2017.4套件
  2. 交叉编译环境: arm-linux-gnueabihf-
  3. 虚拟机Linux系统版本:ubuntu 16.04
  4. 开发板:ALINX AX7Z100 开发板(ZYNQ7100)
  5. 内核源码版本2017.4,版本4.9

资源文件下载

本文涉及的资源文件已上传至我的github仓库 https://github.com/Huge-Hammer/linux-system-porting/tree/main/Drivers/HDMI

配置clk-dglnt-dynclk

进入 /drivers/clk 目录下

复制驱动源码 clk-dglnt-dynclk.c

修改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.	

修改Makefile,在# hardware specific clock types下添加如下配置项

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

配置digilent_encoder

进入 /drivers/gpu/drm/xilinx 目录下

复制驱动源码 ax_7511_encoder.c 、digilent_encoder.c、ax_lcd_encoder.c

修改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.

config DRM_AX_LCD_ENCODER
   tristate "ALINX LCD DRM Encoder Driver"
   depends on DRM_XILINX
   help
     DRM slave encoder for alinx heijin LCD.     

config DRM_AX_7511_ENCODER
   tristate "ALINX 7511 Encoder Driver"
   depends on DRM_XILINX
   help
     ADV7511 encoder.

修改Makefile,在后面添加如下配置项

obj-$(CONFIG_DRM_DIGILENT_ENCODER) += digilent_encoder.o
obj-$(CONFIG_DRM_AX_LCD_ENCODER) += ax_lcd_encoder.o
obj-$(CONFIG_DRM_AX_7511_ENCODER) += ax_7511_encoder.o

配置并编译内核

执行 Linux系统移植三:移植Kernel生成zImage和dtb文件(非petalinux版)一文中 编译zImage 的脚本 zynq_kernel_gen.sh

./zynq_kernel_gen.sh

进入GUI内核配置界面进行配置

  1. 找到 Device Drivers–>Graphics support–>Xilinx DRM,选择 ALINX 7511 Encoder Driver,按 y

在这里插入图片描述

  1. 找到 Device Drivers–>Common Clock Framework,选择Digilent axi_dynclk Driver,按 y

在这里插入图片描述

  1. 找到 Device Drivers–>Console display drive support,enter进入,按空格取消 Framebuffer Console support
    即取消控制台在显示器显示支持,这一步根据个人需求配置

在这里插入图片描述

  1. 找到 Device Drivers–>Multimedia support–>Media USB Adapters,按y 选择,enter进入,按y 选择 USB Video Class (UVC)
    即添加UVC驱动,这一步根据个人需求配置

在这里插入图片描述

  1. 保存配置退出

接下来脚本会自动编译 zImagedtb 文件,然后拷贝文件到sd卡即可

测试HDMI驱动

连接HDMI和显示器,启动板子,插上鼠标和摄像头,启动板子

请添加图片描述

接下来跑程序试试效果,之前写过一个几个linux程序,本文主要用到的是 显示jpeg图片

源码和可执行文件在这里,可自行下载使用Linux Framebuffer显示demo——jpeg图像显示

在那之前先看看显示器的信息,新建文件 fb_info.c ,写入以下内容

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/fb.h>

int main(int argc, char *argv[])
{
    struct fb_fix_screeninfo fb_fix;
    struct fb_var_screeninfo fb_var;
    int fd;

    /* 打开framebuffer设备 */
    if (0 > (fd = open("/dev/fb0", O_WRONLY))) {
        perror("open error");
        exit(-1);
    }

    /* 获取参数信息 */
    ioctl(fd, FBIOGET_VSCREENINFO, &fb_var);
    ioctl(fd, FBIOGET_FSCREENINFO, &fb_fix);
    printf("分辨率: %d*%d\n"
        "像素深度bpp: %d\n"
        "一行的字节数: %d\n"
        "像素格式: R<%d %d> G<%d %d> B<%d %d>\n",
        fb_var.xres, fb_var.yres, fb_var.bits_per_pixel,
        fb_fix.line_length,
        fb_var.red.offset, fb_var.red.length,
        fb_var.green.offset, fb_var.green.length,
        fb_var.blue.offset, fb_var.blue.length);
        
    /* 关闭设备文件退出程序 */
    close(fd);
    exit(0);
}

交叉编译成可执行文件 fb_info ,然后用scp命令拷贝到板子上

arm-linux-gnueabihf-gcc -o fb_info fb_info.c

运行结果,可以看到分辨率是1680*1050

在这里插入图片描述

网上找一张分辨率是1680*1050的风景图片,运行 jpeg 显示程序

在这里插入图片描述

看一下显示器,显示成功,说明HDMI驱动配置成功

请添加图片描述

遇到的问题

usb 设备总是断开又重启,先记录着再说,留着解闷吧

在这里插入图片描述

参考文档

ZYNQ #1 - PL端模拟HDMI信号输出环境下的Linux界面显示
ZYNQ平台的HDMI驱动测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

N年后牛的数量

1、题目 第一年农场有 1 只成熟的母牛 A&#xff0c;往后的每年&#xff1a; 1&#xff09;每一只成熟的母牛都会生一只母牛 2&#xff09;每一只新出生的母牛都在出生的第三年成熟 3&#xff09;每一只母牛永远不会死 2、思路 举例说明&#xff1a; 可得到递推式为&…

文华财经期货量化策略抄底准确率高的指标公式,逃顶抄底精准共振起涨信号幅图指标

期货指标公式的万变不离...离均线远了就要往均线靠&#xff0c;这就是乖离。 做多的衰竭&#xff0c;做空的无力&#xff0c;也能根据乖离来判断。 量能的重要性不言而喻&#xff0c;他是一切做多做空的力量来源 摒弃了量能的趋势就是没有方向的车&#xff0c;金叉之后也可能突…

C++11 智能指针

文章目录1. 智能指针出现的意义1.1 内存泄漏1.2 智能指针初识2. C标准库中的智能指针2.1 auto_ptr2.2 std::unique_ptr2.3 std::shared_ptr2.4 std::weak_ptr3. 智能指针中的定制删除前言&#xff1a; 智能指针&#xff0c;它是指针嘛&#xff1f;它是一个类具有指针的功能&…

HTML期末学生大作业-拯救宠物网页作业html+css

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Redis主从复制与Cluster集群

目录 一.Redis集群模式 二、Redis 主从复制 2.1 主从复制介绍 2.2 主从复制的作用 2.3 主从复制流程&#xff1a; 三. Redis主从复制搭建 3.1 实验步骤 ​ 3.2 修改master节点配置文件 3.3 修改slave节点的配置文件 3.4 验证主从效果 3.4.1 主节点查看日志&#xff0…

数据图表-FineReport复选按钮控件

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.2 应用场景 1.2.1 填报控件 填报报表中可以通过该控件执行批量选中操作&#xff0c;如下图所示&#xff1a; 1.2.2 参数控件 参数面板处可以通过该控件执行查询操作&#xff0c;如下图所示&#xff1a; 1.3 如何添加…

APP上架需要的准备和流程

一上架iOS应用市场前的准备​ 1.选择适合自己的苹果开发者账号​ (1) 个人账号&#xff08;Individual&#xff09;&#xff1a;费用99美金一年, 该账号在App Store销售者只能显示个人的ID&#xff0c;比如zhitian zhang&#xff0c;单人使用。个人账号只能有一个开发者。100…

护眼灯护眼有效果吗?一文了解护眼灯到底有没有用

关于护眼灯是否对预防近视、保护眼睛有效&#xff0c;很多人都会有怀疑态度&#xff0c;会认为是智商税&#xff0c;其实这也因人而异&#xff0c;有的人眼睛天生不太敏感&#xff0c;所以对护眼灯的光线感知不强&#xff0c;很难体会到实际的作用&#xff1b;有的人也买到较差…

ccf寻宝!大冒险!python满分(敲开心~)

寻宝 大冒险 题目传送&#xff1a;http://118.190.20.162/view.page?gpidT147 思路及代码&#xff1a; 核心点就是哈希。 之前刷的是70分&#xff0c;找不到之前的代码了&#xff0c;大概是建了一个很大的表&#xff0c;然后一点点比较吧。 今天再刷&#xff0c;上来就是…

安装ADDIS

网状meta分析&#xff0c;安装ADDIS 下载ADDIS、java 百度网盘下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/15tqDxXUWZ2q3qOS2Fglvu 提取码&#xff1a;6fyw 配置java环境变量 双击系统变量中的Path 复制百度网盘下载后的jdk-11/bin的路径&#xff0c…

Apereo-cas 4.x反序列化漏洞复现

转载https://www.freebuf.com/vuls/226149.html 建议再查看https://xz.aliyun.com/t/7032#toc-7的 0x01 前言放假前看到很多文章对这个漏洞进行分析复现&#xff0c;又因为过年期间的特殊情况&#xff0c;实在是无聊至极&#xff0c;所以自己也来学习一下&#xff0c;顺便恶补一…

OceanBase-概述

文章目录背景产品家族分布式数据库社区版&#xff08;当前为V4.0&#xff09;企业版公有云总结核心功能适用场景工具体系迁移评估工具OMA迁移工具OMS开发工具ODC权限管理运维工具OCP生态产品图数据库时序数据库背景 前段时间学习了下tidb的体系架构&#xff0c;了解了其运行原…

vulhub中间件解析漏洞复现

vulhub中间件解析漏洞复现 &#x1f349; shell 此环境来自vulhub工程&#xff1a; https://github.com/vulhub/vulhub 以下测试环境为ubuntu 20.04 &#x1f349;目录vulhub中间件解析漏洞复现Apache HTTPD 换行解析漏洞&#xff08;CVE-2017-15715&#xff09;漏洞原理及…

Redis--高级篇 D4 Redis分片集群

1、分片集群的结构 2、搭建分片集群 2.1 分片集群结构 分片集群需要的节点数量较多&#xff0c;这里我们搭建一个最小的分片集群&#xff0c;包含3个master节点&#xff0c;每个master包含一个slave节点&#xff0c;结构如下&#xff1a; 这里我们会在同一台虚拟机中开启6个r…

Java多态详解

前言 多态是同一个行为具有多个不同的表现形态或形式的能力 比如&#xff1a; 小阿giao&#xff0c;他是一名主播&#xff0c;同样也是一个人&#xff1b; 小阿giao是一个对象&#xff1b; 这个对象既有主播形态&#xff0c;也有人类形态&#xff1b; 即&#xff1a;一个对象…

醛基-PEG-纤维二糖 Cellobiose-CHO 纤维二糖-醛基

醛基-PEG-纤维二糖 Cellobiose-CHO 纤维二糖-醛基 羰基中的一个共价键跟氢原子相连而组成的一价原子团&#xff0c;叫做醛基&#xff0c;醛基结构简式是-CHO&#xff0c;醛基是亲水基团&#xff0c;因此有醛基的有机物&#xff08;如乙醛等&#xff09;有一定的水溶性。 中…

Unity有哪些适合拿来练手的游戏项目?

首先推荐一篇文章&#xff0c;其中涵盖海量Unity和C#的书籍、demo等海量干货。 文章链接&#xff1a;Unity 高级程序员应该具备怎样的能力&#xff1f;要怎样成长为 Unity 高级程序员&#xff1f; Unity有哪些适合练手的游戏项目&#xff1f;还是老规矩&#xff0c;全文无付费…

【软件STM32cubeIDE下STM32F4xx使用DMA+定时器+推PWM+点亮灯带WS2812相关-进阶(全数据流版)】

2TOC &#xff08;1&#xff09;前言 &#xff08;1&#xff09;起源 最近作了有关ws2812灯带的后续测试&#xff0c;这源于一个简单的问题。 如果用STM32F4点灯带&#xff0c;每个DMA数据流都用上&#xff0c;那么可以点亮多少条灯带&#xff1f; 实际情况更加复杂些&#x…

JAVA EE,一文彻底聊明白

关于JAVA EE的论述&#xff0c;JAVA EE和Spring的论述在第二、三章节。 目录 1.JAVA的发展史 2.JAVA EE 3.JAVA EE和Spring 1.JAVA的发展史 JAVA语言于1995年面世&#xff0c;主要开发者为——James Gosline&#xff0c;后被称为JAVA语言之父。最早该语言叫Oak&#xff0c;…

写给Java应用开发看的Elasticsearch调优手册

随着数据量的增长&#xff0c;MySQL在很多场景下&#xff0c;似乎已经无能为力了&#xff0c;所以有不少应用的数据从MySQL迁移到了Elasticsearch&#xff0c;我们的应用就在其中。由于开发时间紧张&#xff0c;所以仅仅只是了解了下Elasticsearch的基本知识&#xff0c;随便写…