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,一经查实,立即删除!

相关文章

河北微型计算机原理专接本,河北省专接本(微机原理与接口技术知识点总结)

它们的差别在于对负数的表示。第一章概述(1)原码一、计算机中的数制定义&#xff1a;1、无符号数的表示方法&#xff1a;符号位&#xff1a;0 表示正&#xff0c;1 表示负&#xff1b;(1)十进制计数的表示法数值位&#xff1a;真值的绝对值。特点&#xff1a;以十为底&#xff…

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;也许你忽略了这个问题&…

西工大计算机学院交流,2017西工大计算机交流+精贵资料

我是今年考得西北工业大学计算机图像与语音处理方向&#xff0c;这一年的考研路走的实在艰辛西工大今年的专业课和以往有了很大的不同&#xff0c;首先就是名词解释的取消&#xff0c;网络和操作系统的难度增大&#xff0c;但如果你仔细研读了历年期末考试题&#xff0c;都能看…

rstp 转hls_将RTSP流转为浏览器播放

最近在工作中接触到了一个需求&#xff0c;需要在网页上进行摄像头的实施直播。经过研究&#xff0c;决定采用FFmpeg转RTSP为RTMP流&#xff0c;然后通过SRS转发为HLS流供浏览器播放。前提条件Linux服务器一台(用于搭建SRS环境)FFmpeg(用于讲RTSP流转为RTMP流)SRS(用于将RTMP流…

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

运输层协议概述从通信和信息处理的角度看&#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;感兴趣的用户一…

foreach lambda写法_Java8新特性之forEach+Lambda 表达式遍历Map和List

这是Java8系列的第二篇&#xff0c;今天来说一下Java8中forEach的简单使用。我们使用对比的方式来看应该会看得更加清楚,更能理解&#xff1a;一、遍历MapJava8之前的方式Map items new HashMap<>();items.put("A", 10);items.put("B", 20);items.p…

吉大计算机学院刘淑芬,刘淑芬-吉林大学计算机科学与技术学院

学术论文&#xff1a;主要代表性学术论文&#xff1a;[1]Chi Meng, Liu Shufen, Hu Changhong. Self-adapting routing overlay network for frequently changing application traffic in content-based publish/subscribe system. Mathematical Problems in Engineering,2014 …

python与机械教育初探_Python公开课-机械学习之手写识别

授课讲师讲师尹强职务高级讲师、项目经理多年互联网开发经验与授课经验&#xff0c;曾参与某知名家具电商网站、车友商城、物流系统的开发设计&#xff0c;善于使用多种技术解决技术问题和优化网站的性能和提高网站速度&#xff0c;开发经验丰富。擅长学习方式的培养和锻炼&…

工业计算机远程控制,基于SOCKET技术的计算机远程控制实现

摘要&#xff1a;时至今日&#xff0c;计算机网络已经成为了人类社会生活中必不可少的组成部分&#xff0c;其中计算机的远程控制系统更是为整个社会的进步起到推动作用。除了在工业自动化生产之外&#xff0c;计算机远程控制系统还广泛的应用于办公、技术支持等方面。在本文中…

efi分区咋移动到c盘里_如何移动的EFI系统分区

如何安全找回丢失数据的方法1. 下载并安装B计划数据恢复软件。2. 运行恢复软件&#xff0c;点击“深度扫描”。深度扫描是绕过文件系统直接从硬盘、U盘、SD卡等设备底层恢复数据&#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…

exec go 重启_如何用 Go 实现热重启

热重启热重启(Zero Downtime)&#xff0c;指新老进程无缝切换&#xff0c;在替换过程中可保持对 client 的服务。原理父进程监听重启信号在收到重启信号后&#xff0c;父进程调用 fork &#xff0c;同时传递 socket 描述符给子进程子进程接收并监听父进程传递的 socket 描述符在…

计算机关闭窗口可以使用alt,禁止使用Alt+F4关闭窗口完整代码

声明&#xff1a;Private Declare Function GetSystemMenu Lib "user32" Alias "GetSystemMenu" (ByVal hwnd As Long, ByVal bRevert As Long) As LongPrivate Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPositio…

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

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