cups源码下载 linux_【正点原子FPGA连载】第九章Linux显示设备的使用-领航者ZYNQ之linux开发指南...

1)实验平台:正点原子领航者ZYNQ开发板

2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761

3)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html

4)对正点原子FPGA感兴趣的同学可以加群讨论:876744900

5)关注正点原子公众号,获取最新资料

fd70fdf72d5e9738218bee79ef72027f.png

第九章Linux显示设备的使用


领航者开发板上有两个显示设备接口,分别为HDMI接口和LCD接口,这两个接口可以用来接HDMI显示器和正点原子的LCD液晶屏,使用图形界面的时候可以通过这两个接口分别显示在HDMI显示器和LCD液晶屏上。本章我们讲解如何使用Petalinux配置Linux内核和设备树来驱动HDMI显示器和LCD液晶屏。
9.1准备工作
HDMI的显示首先需要硬件层面的支持,在《领航者ZYNQ之嵌入式开发指南》的《SD卡读BMP图片HDMI显示实验》中我们实现了裸机驱动HDMI的显示,可见硬件层面是没有问题的。如果想实现Linux驱动HDMI的显示,除了需要该实验对应的Vivado工程的硬件平台支持外,还需要相应的Linux驱动程序,同样LCD的显示除了硬件层面的支持外也需要一个驱动。
Linux显示设备的驱动程序我们放在了提供的内核源码中。在我们提供的光盘资料:ZYNQ开发板资料盘(A盘)4_SourceCodeZYNQ_70203_Embedded_Linux资源文件kernel目录下有两个源码包,分别是linux-xlnx-xilinx-v2018.3.tar.gz和linux-4.14.0-atk-v2018.3.tar.gz,前者是Xilinx官方提供的Linux内核源码包,后者是我们定制的用于领航者开发板的Linux内核源码包,里面添加了适用于领航者开发板的驱动程序,该内核源码已托管到gitee网站:https://gitee.com/greatdream/linux,可从该网站获取最新的领航者开发板的linux内核源码。
我们将linux-4.14.0-atk-v2018.3.tar.gz解压到ubuntu系统的work/petalinux/目录下,或者从gitee网站clone到work/petalinux/目录下,推荐使用第二种方式,在终端输入命令如下:

  1. cd ~/work/petalinux/
  2. git clone <a href="https://gitee.com/greatdream/linux.git" target="_blank">https://gitee.com/greatdream/linux.git</a> linux-4.14


上面的命令实现的功能就是将托管到gitee上的Linux内核源码clone到linux-4.14目录下,clone完成后,进入到linux-4.14目录下,可看到linux内核源码已下载完成,如下图所示:

8f6342a86df2060028d33484b6427c46.png

图 20.1.1 linux内核源码目录


至此我们的准备工作就完成了,下面我们配置Petalinux工程和Linux内核以及设备树来驱动HDMI或LCD的显示。
9.2配置Petalinux工程
进入到第六章创建的Petalinux工程目录下,输入如下命令,设置Petalinux运行所需的环境变量,

  1. sptl
    或者
  2. source /opt/pkg/petalinux/2018.3/settings.sh


执行结果如下图所示:

18ca30394e9c297f3a31c61ef4ad0b38.png

图 20.2.1 设置Petalinux运行所需的环境变量


现在重新配置petalinux,重新设置Linux内核的来源,输入如下命令:

  1. petalinux-config


在弹出的配置窗口中,进入到“Linux Components Selection--->linux-kernel(linux-xlnx)”菜单下,配置Linux内核来源。此处选择“ext-local-src”,也就是本地存放的Linux内核源码,如下图所示:

dbd887cce4f60713b17ec51a34d0faa9.png

图 20.2.2 选择“ext-local-src”


也可以选择“remote”选项,将远程路径指向我们托管的gitee网站,此处以本地路径为例进行讲解。按键盘上的下方向键移到“ext-local-src”,然后按键盘上的“Enter“键确定,返回到上一界面,如下图所示:

02aca7673ef140d8137cec0199c089f7.png

图 20.2.3 返回到上一界面


进入“External linux-kernel local source settings”子菜单,如下图所示:

5c15b8fa11c14f7aae2d15adfc4abae8.png

图 20.2.4 “External linux-kernel local source settings”子菜单


按键盘上的“Enter”键配置“EXternal linux-kernel local source path”,如下图所示:

d8cda2cea42c2e5900f702ef7e458d02.png

图 20.2.5 填写Linux内核源码的本地路径


也就是填写Linux内核源码的本地路径,上一节我们将Linux内核源码clone到/home/zynq/work/petalinux/linux-4.14目录,所以此处填写该目录。填写完成后,按键盘上的“Enter”键完成配置,返回到上一界面,如下图所示:

7564895101049c791f5ff1d56a8568f2.png

图 20.2.6 填写内核路径完成后的界面


现在保存配置并退出,下一步,配置Linux内核。
9.3配置Linux内核
Linux内核默认都是配置好的,无需配置。下面我们看下进行了那些配置。在终端中输入如下命令:
petalinux-config -c kernel
弹出Linux内核的配置窗口。在内核配置窗口中,进入“Device Drivers”菜单下的“Graphics support”菜单下,

03b26e180e6e9f2f48a55e14d1291f96.png

图 20.3.1 “Graphics support”菜单


可以看到默认配置了“Xilinx LCD framebuffer driver support By Alientek”,该驱动可以用来驱动HDMI和LCD的显示。
在“Device Drivers”菜单下的“Common Clock Framework”菜单下,可以看到默认配置了“Digilent axi_dynclk Driver”,该驱动可以根据不同的分辨率输出不同的像素时钟。
至此,内核方面的配置也就完成了。保存并退出,进入下一步,配置设备树。
9.4配置设备树
编辑当前工程目录下的project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi文件。由于文件内容太长,此处就不全部粘贴了,主要讲解下在第6.2.7节的配置的基础上追加哪些内容,在beep后面追加视频时序,内容如下:

  1. 94 beep {
  2. 95 compatible = "gpio-beeper";
  3. 96 gpios = <&gpio0 57 GPIO_ACTIVE_HIGH>;
  4. 97 };
  5. 98
  6. 99 video_timings {
  7. 100 timing_4x3_480x272: timing0 {
  8. 101 clock-frequency = <9000000>;
  9. 102 hactive = <480>;
  10. 103 vactive = <272>;
  11. 104
  12. 105 hback-porch = <40>;
  13. 106 hsync-len = <20>;
  14. 107 hfront-porch = <5>;
  15. 108 vback-porch = <8>;
  16. 109 vsync-len = <3>;
  17. 110 vfront-porch = <8>;
  18. 111
  19. 112 hsync-active = <0>;
  20. 113 vsync-active = <0>;
  21. 114 de-active = <1>;
  22. 115 pixelclk-active = <0>;
  23. 116 };
  24. 117
  25. 118 timing_4x3_800x480: timing1 {
  26. 119 clock-frequency = <33000000>;
  27. 120 hactive = <800>;
  28. 121 vactive = <480>;
  29. 122
  30. 123 hback-porch = <88>;
  31. 124 hsync-len = <48>;
  32. 125 hfront-porch = <40>;
  33. 126 vback-porch = <32>;
  34. 127 vsync-len = <3>;
  35. 128 vfront-porch = <13>;
  36. 129
  37. 130 hsync-active = <0>;
  38. 131 vsync-active = <0>;
  39. 132 de-active = <1>;
  40. 133 pixelclk-active = <0>;
  41. 134 };
  42. 135
  43. 136 timing_7_800x480: timing2 {
  44. 137 clock-frequency = <33000000>;
  45. 138 hactive = <800>;
  46. 139 vactive = <480>;
  47. 140
  48. 141 hback-porch = <46>;
  49. 142 hsync-len = <20>;
  50. 143 hfront-porch = <210>;
  51. 144 vback-porch = <23>;
  52. 145 vsync-len = <3>;
  53. 146 vfront-porch = <22>;
  54. 147
  55. 148 hsync-active = <0>;
  56. 149 vsync-active = <0>;
  57. 150 de-active = <1>;
  58. 151 pixelclk-active = <0>;
  59. 152 };
  60. 153
  61. 154 timing_7_1024x600: timing3 {
  62. 155 clock-frequency = <51000000>;
  63. 156 hactive = <1024>;
  64. 157 vactive = <600>;
  65. 158
  66. 159 hback-porch = <140>;
  67. 160 hsync-len = <20>;
  68. 161 hfront-porch = <160>;
  69. 162 vback-porch = <20>;
  70. 163 vsync-len = <3>;
  71. 164 vfront-porch = <12>;
  72. 165
  73. 166 hsync-active = <0>;
  74. 167 vsync-active = <0>;
  75. 168 de-active = <1>;
  76. 169 pixelclk-active = <0>;
  77. 170 };
  78. 171
  79. 172 timing_10x1_1280x800: timing4 {
  80. 173 clock-frequency = <71100000>;
  81. 174 hactive = <1280>;
  82. 175 vactive = <800>;
  83. 176
  84. 177 hback-porch = <80>;
  85. 178 hsync-len = <10>;
  86. 179 hfront-porch = <70>;
  87. 180 vback-porch = <10>;
  88. 181 vsync-len = <3>;
  89. 182 vfront-porch = <10>;
  90. 183
  91. 184 hsync-active = <0>;
  92. 185 vsync-active = <0>;
  93. 186 de-active = <1>;
  94. 187 pixelclk-active = <1>;
  95. 188 };
  96. 189
  97. 190 timing_1920x1080: timing5 {
  98. 191 clock-frequency = <148500000>;
  99. 192 hactive = <1920>;
  100. 193 vactive = <1080>;
  101. 194
  102. 195 hback-porch = <148>;
  103. 196 hsync-len = <44>;
  104. 197 hfront-porch = <88>;
  105. 198 vback-porch = <36>;
  106. 199 vsync-len = <5>;
  107. 200 vfront-porch = <4>;
  108. 201
  109. 202 hsync-active = <0>;
  110. 203 vsync-active = <0>;
  111. 204 de-active = <1>;
  112. 205 pixelclk-active = <1>;
  113. 206 };
  114. 207 };


video_timings开始就是追加的内容,以timing_4x3_480x272为例,讲解下命名的格式,timing也就是时序,4x3对应的是4.3寸LCD液晶屏,480x272对应的是该液晶屏的分辨率为480x272,{}内的就是具体的驱动时序,需要说明的是timing_1920x1080对应的是HDMI分辨率为1920x1080的时序。
除了追加以上内容外,还需要在该文件的尾部追加以下内容:

  1. 231 &axi_dynclk_0 {
  2. 232 compatible = "digilent,axi-dynclk";
  3. 233 clocks = <&clkc 15>;
  4. 234 #clock-cells = <0>;
  5. 235 };
  6. 236
  7. 237 &v_tc_0 {
  8. 238 compatible = "xlnx,v-tc-5.01.a";
  9. 239 };
  10. 240
  11. 241 &amba_pl {
  12. 242 xlnx_vdma_hdmi {
  13. 243 compatible = "xilinx,vdmafb";
  14. 244 status = "okay";
  15. 245
  16. 246 xlnx,vtc = <&v_tc_0>;
  17. 247 clocks = <&axi_dynclk_0>;
  18. 248 clock-names = "hdmi_pclk";
  19. 249 dmas = <&axi_vdma_0 0>;
  20. 250 dma-names = "hdmi_vdma";
  21. 251
  22. 252 is-hdmi = <0x1>;
  23. 253
  24. 254 display-timings = <&timing_1920x1080>;
  25. 255 xlnx,pixel-format = "bgr888";
  26. 256 };
  27. 257 };


amba_pl配置的是HDMI的驱动,如果显示设备是LCD液晶屏,则需要将amba_pl修改成如下的内容:

  1. &amba_pl {
  2. xlnx_vdma_lcd {
  3. compatible = "xilinx,vdmafb";
  4. status = "okay";
  5. xlnx,vtc = <&v_tc_0>;
  6. clocks = <&axi_dynclk_0>;
  7. clock-names = "lcd_pclk";
  8. dmas = <&axi_vdma_0 0>;
  9. dma-names = "lcd_vdma";
  10. is-hdmi = <0x0>;
  11. rst-gpios = <&gpio0 62 GPIO_ACTIVE_LOW>;
  12. bl-gpios = <&gpio0 61 GPIO_ACTIVE_HIGH>;
  13. atk,lcd-id = <&axi_gpio_0 0 0 GPIO_ACTIVE_LOW
  14. &axi_gpio_0 1 0 GPIO_ACTIVE_LOW
  15. &axi_gpio_0 2 0 GPIO_ACTIVE_LOW>;
  16. display-timings = <&timing_4x3_480x272
  17. &timing_4x3_800x480
  18. &timing_7_800x480
  19. &timing_7_1024x600
  20. &timing_10x1_1280x800>;
  21. xlnx,pixel-format = "rgb888";
  22. };
  23. };


设备树配置内容已经放在我们提供的例程源码当中,路径为:“领航者ZYNQ开发板资料盘(A盘)4_SourceCodeZYNQ_70203_Embedded_Linuxzynq_petalinux2_linux_hdmisoftwarepetalinuxproject-specmeta-userrecipes-bspdevice-treefilessystem-user.dtsi”,可以打开这个文件将里面的内容拷贝到这个文件中,默认提供的是HDMI的驱动配置,LCD的驱动配置需要自行替换该文件中amba_pl的内容。
配置完了设备树之后,就是编译Petalinux工程了。
9.5编译Petalinux工程
现在我们编译整个Petalinux工程,在终端输入如下命令:

  1. petalinux-build


执行结果如下图所示:

33a499c9857481028b0238ac2368c87e.png

图 20.5.1 编译整个Petalinux工程


9.6制作BOOT.BIN启动文件并复制到SD卡
使用下面命令生成 BOOT文件:

  1. petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga --u-boot --force


执行结果如下图所示:

c74f2c1a196983af3aebc3d7bd806686.png

图 20.6.1 生成 BOOT文件


生成BOOT文件后,我们插入SD卡,将该工程image/linux目录下的BOOT.BIN和image.ub文件拷贝到名为BOOT的分区也即/dev/sdc1分区中,如下图所示:

7bab67240cc731e1422b73ee5ab413a7.png

图 20.6.2 拷贝启动镜像到第一个分区


本实验只需要这两个文件即可,现在可以卸载SD卡了。
9.7在开发板上启动Linux
将SD卡插入领航者开发板的SD卡槽(卡槽位于开发板背面),然后使用Mini USB连接线将开发板左侧的USB_UART接口与电脑连接,用于串口通信。接下来将领航者底板上的启动模式开关设置为从SD卡启动。最后连接开发板的电源线,并打开电源开关。
HDMI显示器显示的内容如下图所示:

eca04a62b01c26b0e6b30b59990bc137.png

图 20.7.1 HDMI显示器显示结果


此时如果在领航者开发板上插入键盘,就可以登录了,登录的用户名为:root,密码为:root。此处我们就不演示了。至此我们完成了Linux显示设备的驱动。

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

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

相关文章

java程序启动后就进行了7次younggc_程序员如何优化 Java GC

本文由CrowHawk翻译Sangmin Lee发表在Cubrid上的”Become a Java GC Expert”系列文章的第三篇《How to Tune Java Garbage Collection》,本文的作者是韩国人&#xff0c;写在JDK 1.8发布之前&#xff0c;虽然有些地方有些许过时&#xff0c;但整体内容还是非常有价值的。译者此…

html标签名都是小写,到底啥是w3c标准(示例代码)

W3C标准从两年前接触前端的时候&#xff0c;听说了 w3c 标准 &#xff0c;是w3c(World Wide Web Consortium-世界万维网联盟)组织提出的web标准&#xff0c;印象中这个标准就是&#xff0c;行为(js)、样式(css)、结构(html)&#xff0c;相分离。。。仅此而已一直也就是这么以为…

自加一运算_C语言i++、++i混合运算老手未必全掌握,看了你就明白了

C语言中的自增自减运算符&#xff08;i、i--、i、--i&#xff09;对于新手来说&#xff0c;通常感到困惑&#xff0c;说来容易算来难&#xff0c;如果涉及到混合运算&#xff0c;更是无法理解。甚至有些学了几年的老手&#xff0c;未必全掌握&#xff08;也许你忽略了这个问题&…

计算机网络运输层的概述,计算机网络_运输层

运输层协议概述从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时&#xff0c;只有位于网络…

ble 连接成功后找不到服务_闷声发大财的BLE芯片龙头

来源&#xff1a;内容由半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;原创&#xff0c;作者&#xff1a;邱丽婷&#xff0c;谢谢。你有多久没使用过蓝牙功能了&#xff1f;随着Wi-Fi和快传软件的普及&#xff0c;蓝牙&#xff08;Bluethooth&#xff09;这一每部…

计算机管理关机在哪,电脑点了关机为什么却关不了

近期&#xff0c;一些网友留言说明明电脑已经按照正常步骤关机&#xff0c;但显示屏却关了&#xff0c;但是主机似乎还在运行&#xff0c;这时该怎么办&#xff1f;针对此疑问&#xff0c;下面小编和大家详细说明一下电脑点了关机却关不了的处理方法&#xff0c;感兴趣的用户一…

东北农业大学考研计算机大纲,东北农业大学(专业学位)计算机技术研究生考试科目和考研参考书目...

考研真题资料优惠价原价选择东北农业大学(专业学位)计算机技术教材&#xff0c;也叫东北农业大学(专业学位)计算机技术考研参考书、指定书目等等&#xff0c;是考验专业课复习过程中最重要的资料。考研是一种针对性很强的考试项目&#xff0c;参考书目由报考院校的研究生院制定…

matlab 功率谱密度 汉宁窗_[振动与测试 2] 什么是PSD(功率谱密度)

上接前章&#xff08;数字信号处理的基本概念&#xff09;&#xff0c;今天给大家介绍下振动测试中最常见的一个概念PSD&#xff0c;即所谓的功率谱密度&#xff08;Power Spectral Density&#xff09;,以及其与Autopower&#xff08;自功率谱&#xff09;的区别。自功率谱现在…

gsm模块网站服务器,gsm模块是什么_gsm模块工作原理_gsm模块的应用

描述gsm模块是什么GSM模块&#xff0c;是将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上&#xff0c;具有独立的操作系统、GSM射频处理、基带处理并提供标准接口的功能模块。GSM模块具有发送SMS短信&#xff0c;语音通话&#xff0c;GPRS数据传输等基于GS…

df添加一行 python_Python为输出的数据绘制表格

在Python开发环境中&#xff0c;输出数据时没有表格、没有对齐&#xff0c;当数据较多的情况下看起来非常的凌乱&#xff0c;估计很多人像我一样为这个事情而烦恼。左图是我在PyCharm开发环境下输出的数据。下面我们通过Python的Texttable模块为数据添加表格框线&#xff0c;对…

echarts 折线上写数值_前端ECharts数据可视化图表案例与介绍

什么是ECharts&#xff1f;ECharts&#xff0c;一个使用 JavaScript 实现的开源可视化库&#xff0c;可以流畅的运行在 PC 和移动设备上&#xff0c;兼容当前绝大部分浏览器(IE8/9/10/11&#xff0c;Chrome&#xff0c;Firefox&#xff0c;Safari等)&#xff0c;底层依赖轻量级…

计算机里的及格率和有优秀率怎么算,excel表格计算优秀及格率的教程

Excel中的优秀率具体该如何计算呢?下面是由学习啦小编分享的excel表格计算优秀及格率的教程&#xff0c;以供大家阅读和学习。excel表格计算优秀及格率的教程计算优秀及格率步骤1&#xff1a;打开EXCEL软件&#xff0c;使用手动创建一些基础数据&#xff0c;如图。完成该函数的…

concat合并的数组会有顺序么_超全的JS常用数组方法整理

前言常用数组方法汇总方法解析1&#xff1a;concat();2&#xff1a;join();3&#xff1a;pop();4&#xff1a;shift();5&#xff1a;unshift();7&#xff1a;reverse();8&#xff1a;sort();9&#xff1a;slice();10&#xff1a;splice();11&#xff1a;toString();12&#xff…

in ms sql 集合参数传递_mybatis从入门到精通,第三篇《动态SQL》,干货满满

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼接时要确保不能忘记添加必要的空格&#xff0c;还要注意去掉列表最后一个列名的逗号。利用动态 SQL&#xff0c;可以彻底…

保存图像_06 - matplotlib中应知应会numpy存储、交换图像

matplotlib中应知应会numpy存储、交换图像numpy的ndarray是mpl官方推荐的输入数据结构mpl官方推荐绘图时&#xff0c;应以numpy的ndarray数据结构输入数据。虽然有时用pandas中的两个数据结构、python的list等数据结构也可以&#xff0c;但不能保证都能成功。这是因为numpy的nd…

css设置按钮竖直方向居中_如何借助伪元素实现垂直居中?

点击右上方红色按钮关注“小郑搞码事”&#xff0c;每天都能学到知识&#xff0c;搞懂一个问题&#xff01;今天给大家讲一种实现垂直居中的方法&#xff1a;伪元素法(::before/::after)一、vertical-align实现了什么&#xff1f;先来看一下vertical-align实现了什么&#xff0…

九年级数学解方程50道_【初中数学】北师大版九年级上册数学知识点总结

这里整理了一份【初中数学】北师大版九年级上册数学知识点总结其他版本的总结后面会更新资料有点多&#xff0c;建议先收藏完整版资料下载可搜【初中复习资料】回复【399】&#xff08;资料整理不易&#xff0c;可以收藏-转发支持一下吗&#xff09;资料有点多&#xff0c;建议…

小米9私密相册怎么找_“拼藏搜”,手机相册还能这么玩

发朋友圈九图不够看&#xff1f;私密照片不想被轻易看到&#xff1f;照片太多找半天太麻烦&#xff1f;别着急&#xff0c;学会这几招&#xff0c;成为“制片人”。第一招&#xff1a;“拼”成为“制片人”的第一步&#xff0c;当然是制作照片了&#xff01;拼出有feel的图就靠…

idea python工程zip打包_【面试划重点】-- Python常见知识点

分享工作中遇到的python知识点&#xff0c;估计很多人没太留意过这个知识点&#xff0c;但是对巩固很多基本语法和一些python中一些有用的方法很有帮助&#xff0c;工作中的问题我简化说下&#xff0c;大概就是下面需求&#xff1a;有3个python列表&#xff1a;分别是年龄&…

如何固定最小宽度_如何使用更新的HTML和CSS函数创建响应式设计

除了使用媒体查询和现代css布局(如flexbox和grid)来创建响应式网站外&#xff0c;我们还可以做好某些被忽视的事情来制作响应式网站。在本文中&#xff0c;我们将探讨许多可用的工具(围绕html和css)&#xff0c;从响应图像到相对较新的CSS函数&#xff0c;无论我们是否使用媒体…