Linux with HDMI video output on the ZED, ZC702 and ZC706 boards
ADV7511 Xilinx Evaluation Boards Reference Design
Zynq & Altera SoC Quick Start Guide
analogdevicesinc/hdl
analogdevicesinc/linux
Linux_GUI加速(1)——GUI系统概述
Linux_GUI加速(2)——Linux中的DRM-KMS分析
2018.1/2 Zynq UltraScale+ MPSoC: Linux DRM driver does not need to update the plane for same framebuffer
linux-xlnx/drivers/gpu/drm下xilinx和xlnx这两个目录的区别
zynq-7000学习笔记(十一)——Linux下VDMA的使用
topic-embedded-products/adi_hdl
topic-embedded-products/kernel-module-vdmafb
ZedBoard Linux I2C Driver + VDMA使用
zynq-7000学习笔记(四)——Zedboard HDMI核的构建和输出显示测试(2017/6/9补充修改)
xilinx ZC706 在显示器上显示我们想显示的内容
【ZYNQ-7000开发之三】ZYNQ平台的HDMI驱动测试
FPGA+ADV7511实现HDMI显示
Zynq7020 在arm上跑hdmi驱动
zynq-7000学习笔记(九)——frame buffer图像显示编程
Building HDL
3. ZCU102 HDMI Demo工程修改【PCIE视频传输】
安装mingw,添加vivado工具到环境变量E:\Xilinx\Vivado\2015.2\bin
,执行make
,此次耗时较久,本以为卡住,敲了回车键才知道编译已经完成,
zc@DESKTOP-KVKC06A ~
$ cd /e/hdl-2015_r2/projects/adv7511/zc706
zc@DESKTOP-KVKC06A /e/hdl-2015_r2/projects/adv7511/zc706
$ ls
Makefile system_bd.tcl system_project.tcl system_top.v
zc@DESKTOP-KVKC06A /e/hdl-2015_r2/projects/adv7511/zc706
$ make
make -C ../../../library/axi_clkgen
make[1]: Entering directory `/e/hdl-2015_r2/library/axi_clkgen'
rm -rf *.cache *.data *.xpr *.log component.xml *.jou xgui .Xil
vivado -mode batch -source axi_clkgen_ip.tcl >> axi_clkgen_ip.log 2>&1
make[1]: Leaving directory `/e/hdl-2015_r2/library/axi_clkgen'
make -C ../../../library/axi_hdmi_tx
make[1]: Entering directory `/e/hdl-2015_r2/library/axi_hdmi_tx'
rm -rf *.cache *.data *.xpr *.log component.xml *.jou xgui .Xil
vivado -mode batch -source axi_hdmi_tx_ip.tcl >> axi_hdmi_tx_ip.log 2>&1
make[1]: Leaving directory `/e/hdl-2015_r2/library/axi_hdmi_tx'
make -C ../../../library/axi_spdif_tx
make[1]: Entering directory `/e/hdl-2015_r2/library/axi_spdif_tx'
rm -rf *.cache *.data *.xpr *.log component.xml *.jou xgui .Xil
vivado -mode batch -source axi_spdif_tx_ip.tcl >> axi_spdif_tx_ip.log 2>&1
make[1]: Leaving directory `/e/hdl-2015_r2/library/axi_spdif_tx'
rm -rf *.cache *.data *.xpr *.log *.jou xgui *.runs *.srcs *.sdk .Xil
vivado -mode batch -source system_project.tcl >> adv7511_zc706_vivado.log 2>&1
zc@DESKTOP-KVKC06A /e/hdl-2015_r2/projects/adv7511/zc706
$
可以看到,这个工程用到了三个库,
axi_clkgen
axi_hdmi_tx
axi_spdif_tx
参考ug954,ps的iic和pl的iic均可控制所有外设,
新建工程,添加源代码E:\no-OS-2015_R2\adv7511\zc706
,添加库E:\no-OS-2015_R2\adv7511\library\zc
,目录如下,刷新编译,
sdk2015.2.1好像有问题,在standalone模式下,头文件路径在这儿配置,
库目录在这儿配置,
输入0~6
可以改变分辨率,实际测试这个程序输出的屏幕在闪烁,需要改进,
********************************************************************
ADI HDMI Trasmitter Application Ver R1.1.1
HDMI-TX: ADV7511 Rev 0x14
Created: Aug 3 2019 At 11:13:28
********************************************************************
To change the video resolution press:
'0' - 640x480; '1' - 800x600; '2' - 1024x768; '3' - 1280x720
'4' - 1360x768; '5' - 1600x900; '6' - 1920x1080.
Mute audio and video.
Resolution was changed to 1920x1080
APP: Driver Enabled
HPD changed to HI
MSEN changed to HI
A new EDID segment was read.
HDMI device.
------------------------- EDID BLOCK 0 -------------------------
Edid Version 1.3
Mon Timing:
Pixel clock = 241.50 MHz
H Active = 2560
V Active = 1440
Progressive
No stereo
Separate sync = 3
-ve Vsync
+ve HSync
Mon Serial: NDY7355N1AWL
Mon Name: DELL P2416D
Mon Freq:
Min V Freq = 49 Hz
Max V Freq = 86 Hz
Min H Freq = 29 KHz
Max H Freq = 113 KHz
Edid extensions blocks: 1
========================= EDID BLOCK 1 =========================
CEA extension block revision 3
Underscan=Yes Audio=Yes YCbCr4:4:4=Yes YCbCr4:2:2=Yes
Data block collection information:
Video data block
* VIC=16
VIC=5
VIC=4
VIC=3
VIC=2
VIC=7
VIC=22
VIC=1
VIC=6
VIC=17
VIC=18
VIC=21
VIC=19
VIC=20
VIC=31
VIC=32
Audio data block
Format Code = 1 (Linear PCM)
Max. No. of Channels= 2
Sampling Freq. (KHz)= 32 44.1 48
Length (bits) = 16 20 24
VSDB data block
Speaker allocation data block
0x01
0x00
0x00
SPA location is at 0x9D, SPA = 1.0.0.0
Mon Timing:
Pixel clock = 148.50 MHz
H Active = 1920
V Active = 1080
Progressive
No stereo
Separate sync = 3
+ve VSync
+ve HSync
Mon Timing:
Pixel clock = 74.25 MHz
H Active = 1920
V Active = 540
Interlaced
No stereo
Separate sync = 3
+ve VSync
+ve HSync
Mon Timing:
Pixel clock = 74.25 MHz
H Active = 1280
V Active = 720
Progressive
No stereo
Separate sync = 3
+ve VSync
+ve HSync
Mon Timing:
Pixel clock = 27.0 MHz
H Active = 720
V Active = 480
Progressive
No stereo
Separate sync = 3
-ve Vsync
-ve HSync
Mon Timing:
Pixel clock = 197.0 MHz
H Active = 2048
V Active = 1152
Progressive
No stereo
Separate sync = 3
+ve VSync
-ve HSync
########################### EDID END ###########################
APP: Changed system mode to Transmitter
Un-mute audio and video.
Resolution was changed to 1024x768
Resolution was changed to 1600x900
Resolution was changed to 1920x1080
用到以下驱动,
compatible = "adi,adv7511";
,位于drivers\gpu\drm\i2c\adv7511.c
,xilinx官方有,但是版本不一样,使用ADIcompatible = "xlnx,axi-vdma";
,位于drivers\dma\xilinx_dma.c
,xilinx vdma驱动,在xilinx官方内核目录没有该文件,已经废弃或者是adi自己维护的,目前dma驱动位于位于drivers\dma\xilinx\xilinx_vdma.c
,使用ADI,使用Xilinx则drm驱动编译不过,DMA的头文件不一样,更改驱动注册的name解决和官方驱动的冲突,官方2015.2.1和ADI 2015_R2内核版本不一样,内核dma驱动的api修改了,编写device_control
完成device_config
,添加并修改Kconfig/Makefilecompatible = "adi,axi-clkgen-2.00.a";
,位于drivers\clk\clk-axi-clkgen.c
,xilinx官方有,但是版本不一样,使用Xilinxcompatible = "adi,axi-hdmi-tx-1.00.a";
,位于drivers\gpu\drm\adi_axi_hdmi\axi_hdmi_drv.c
,xilinx官方没有,使用ADI,添加并修改Kconfig/Makefile,注意修改include\drm\drm_edid.h
增加drm_connector_get_edid
函数compatible = "adi,axi-spdif-tx-1.00.a";
,位于sound\soc\adi\axi-spdif.c
,xilinx官方有,版本相同compatible = "adv7511-hdmi-snd";
,位于sound\soc\adi\adv7511_hdmi.c
,xilinx官方没有,使用ADI,添加并修改Kconfig/Makefile配置内核menuconfig,
> Device Drivers > Graphics support > Direct Rendering Manager > I2C encoder or helper chips > AV7511 encoder
> Device Drivers > Common Clock Framework > AXI clkgen driver
> Device Drivers > Graphics support > Direct Rendering Manager > AV7511 encoder
> Device Drivers > Graphics support > Direct Rendering Manager > DRM Support for Analog Devices HDMI FPGA platforms
> Device Drivers > Sound card support > Advanced Linux Sound Architecture > ALSA for SoC audio support > ADV7511 HDMI transmitter sound support
Linux开机打印,
...
[drm] Initialized drm 1.1.0 20060810
platform 70e00000.axi_hdmi_tx: Driver axi-hdmi requests probe deferral
...
adv7511-hdmi-snd amba_pl:adv7511_hdmi_snd: adv7511 <-> 75c00000.axi_spdif_tx mapping ok
...
Console: switching to colour frame buffer device 240x75
axi-hdmi 70e00000.axi_hdmi_tx: fb0: frame buffer device
axi-hdmi 70e00000.axi_hdmi_tx: registered panic notifier
[drm] Initialized axi_hdmi_drm 1.0.0 20120930 on minor 0
...
ALSA device list:
#0: HDMI monitor
这个时候可以在屏幕上看到串口的终端打印了,退出休眠
root@zynq:~# echo 1 > /sys/class/graphics/fb0/blank
root@zynq:~# echo -e "\033[9;0]" > /dev/tty0
注意ZC706的千兆网phy地址是7,需要检查u-boot和设备树是否正确。
官网下载image,拷入SD卡运行,xz文件用unxz解压,tar命令是不行的,
$ time unxz 2014_R2-2015_02_06.img.xz
$ sudo umount /dev/mmcblk0p1
$ time sudo dd if=2014_R2-2015_02_06.img of=/dev/mmcblk0 bs=4M
制作完后,SD卡包含两个分区,一个FAT32 BOOT分区,一个ext4根文件系统,重新插入PC,校验,
$ sudo fsck -y /dev/mmcblk0p1
$ sudo fsck -y /dev/mmcblk0p2
将SD卡对应板卡的BOOT.BIN等拷入BOOT分区,启动,可以看到adi定制的linaro桌面
>diskpart
Microsoft DiskPart version 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
On computer: RGETZ-L05
DISKPART> list disk
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 119 GB 0 B
Disk 1 Online 7580 MB 0 B
DISKPART> select disk 1
Disk 1 is now the selected disk.
DISKPART> clean
DiskPart succeeded in cleaning the disk.
DISKPART> exit
Leaving DiskPart...
>physdiskwrite.exe -u ..\2014_R2-2014_12_12.bin
physdiskwrite v0.5.2 by Manuel Kasper <[email protected]>
Searching for physical drives...
Information for \\.\PhysicalDrive0:
Windows: cyl: 15566
tpc: 255
spt: 63
Information for \\.\PhysicalDrive1:
Windows: cyl: 966
tpc: 255
spt: 63
Which disk do you want to write? (0..1) 1
WARNING: that disk is larger than 2 GB! Make sure you're not accidentally
overwriting your primary hard disk! Proceeding on your own risk...
About to overwrite the contents of disk 1 with new data. Proceed? (y/n) y
3653238784/4096 bytes written in total