参考链接
博客:PL端模拟HDMI信号输出环境下的Linux界面显示
Xilinx 内核:下载相应的内核源码
根据网上说法,Digilent的HDMI驱动只支持4.x的内核版本,而20开始内核已经是5字头了。Vivado18.3 我也在用,但是太旧了,五年前的东西!!!而且硬件编译确实不如ML的高版本快,对应的petalinux18.3只能安装于Ubuntu16,这可是7年前的东西,关键我Ubuntu16一卡一卡的,不知道怎么回事,终端都打不开,听说现在Ubuntu18也退役了。
所以作为新时代青年,怎么能用这么老的东西呢?
软件版本
- Vivado 2022.2
- Ubuntu 18.04
- Petalinux 19.2
- Linux内核 4.19
有人就要问了,怎么vivado版本和petalinux版本不对应????
既然都是 .xsa文件,何不试试看呢?
我试过21.1和22.2,实际上完全可以用,没有任何阻碍。
硬件平台
开发板:Z7-NANO(微相科技)
芯片:XC7Z020
参考步骤
Vivado硬件平台
- VDMA的HDMI显示,直接按黑金教程来,可以Vitis上裸机检验一下,看是否能用,所以你最好会裸机的HDMI。
- 图中AXI GPIO与HDMI显示无关。
- 我打开了这些外设,可以只开一个串口和IIC,IIC大概是用来HDMI检测分辨率的,如果没开,驱动会以默认的分辨率运行。
下载Linux内核源码
git clone -b xlnx_rebase_v4.19_2019.2 https://github.com/Xilinx/linux-xlnx.git
修改内核
- 根据文章开头的参考博客修改内核源码,我已经修改好了,可以直接使用,链接如下:
修改好的内核:Xilinx-xlnx-4.19
(GitHub有点问题):百度网盘,提取码:6aa7
或者 git clone https://github.com/xiaoyunt/Personal-source-for-Zynq.git
- 需要修改设备数,路径:project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi,额外添加了USB:
/include/ "system-conf.dtsi"
/ {
model = "Zynq ALINX Development Board";
compatible = "alinx,zynq", "xlnx,zynq-7000";
usb_phy0: usb_phy@0 {
compatible = "ulpi-phy";
#phy-cells = <0>;
reg = <0xe0002000 0x1000>;
view-port = <0x0170>;
drv-vbus;
};
};
&i2c0 {
clock-frequency = <100000>;
};
&usb0 {
dr_mode = "host";
usb-phy = <&usb_phy0>;
};
&amba_pl {
hdmi_encoder_0:hdmi_encoder {
compatible = "digilent,drm-encoder";
digilent,edid-i2c = <&i2c0>;
};
xilinx_drm {
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 = <&i2c0>;
planes {
xlnx,pixel-format = "rgb888";
plane0 {
dmas = <&axi_vdma_0 0>;
dma-names = "dma";
};
};
};
};
&axi_dynclk_0 {
compatible = "digilent,axi-dynclk";
#clock-cells = <0>;
clocks = <&clkc 15>;
};
&v_tc_0 {
compatible = "xlnx,v-tc-5.01.a";
};
Petalinux配置内核
petalinux-config -c kernel
- 包括打包等等,本文不再赘述
运行验证
没有拍照,反正就是成功啦