1)实验平台:正点原子领航者V2 ZYNQ开发板
2) 章节摘自【正点原子】《领航者ZYNQ之嵌入式Linux开发指南_V2.0》
3)购买链接:https://detail.tmall.com/item.htm?id=609032204975
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-329957-1-1.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)正点原子FPGA技术交流QQ群:90562473
第九章 Linux显示设备的使用
领航者开发板上有两个显示设备接口,分别为HDMI接口和LCD接口,这两个接口可以用来接HDMI显示器和正点原子的LCD液晶屏,使用图形界面的时候可以通过这两个接口分别显示在HDMI显示器或LCD液晶屏上。本章我们讲解如何使用Petalinux配置Linux内核和设备树来驱动HDMI显示器和LCD液晶屏。
1.1准备工作
LCD或者HDMI的显示首先需要硬件层面的支持,也就是需要搭建对应的vivado工程,在第六章当中我们统一使用了正点原子为领航者开发板所配置vivado工程,同样该工程也是开发板出厂时烧录的系统中所使用的工程,对于领航者7020来说,正点原子提供的vivado工程支持LCD和HDMI,但是对于领航者7010来说,其提供的工程不支持HDMI,原因在于7010 PL端逻辑资源较少,为了其它外设能够配置上,故而取消了HDMI。
除了需要该实验对应的Vivado工程的硬件平台支持外,还需要相应的Linux驱动程序,LCD和HDMI显示设备的驱动程序我们放在了提供的内核源码中。在我们提供的光盘资料:ZYNQ开发板资料盘(A盘)\4_SourceCode\3_Embedded_Linux\资源文件\kernel目录下有两个内核源码包,分别是linux-xlnx-xilinx-v2018.3.tar.gz和alientek-linux-4.14.0-xlnx-v2018.3.tar.gz,前者是Xilinx官方提供的Linux内核源码包,后者是正点原子针对于领航者开发板进行移植、修改的Linux内核源码包,里面添加了适用于领航者开发板的驱动程序。
我们将alientek-linux-4.14.0-xlnx-v2018.3.tar.gz拷贝到ubuntu系统中,如下所示:
图 9.1.1 将Linux源码拷贝到Ubuntu系统
接下来将其解压,对应的解压目录就是内核源码目录,这个解压目录大家可以自己设置,笔者这里选择将其解压到用户家目录下的work/linux-4.14目录中:
- mkdir -p ~/work/linux-4.14 //创建目录
- tar -xzf alientek-linux-4.14.0-xlnx-v2018.3.tar.gz -C ~/work/linux-4.14/ //解压
- sync //同步
- rm -rf alientek-linux-4.14.0-xlnx-v2018.3.tar.gz //删除压缩包文件
复制代码
图 9.1.2 解压Linux内核源码
解压完成后,进入到work/linux-4.14目录下,可看到linux内核源码目录结构,如下图所示:
图 9.1.3 linux内核源码目录
接下来再将U-Boot源码拷贝到Ubuntu系统中,同样这里也是使用正点原子针对于领航者开发板进行移植、修改过的U-Boot源码包,而不再使用petalinux默认的U-Boot源码,在开发板资料包:ZYNQ开发板资料盘(A盘)\4_SourceCode\3_Embedded_Linux\资源文件\uboot目录下也有两个U-Boot源码压缩包文件,分别是u-boot-xlnx-xilinx-v2018.3.tar.gz和alientek-uboot-2018.01-xlnx-v2018.3.tar.gz,同理u-boot-xlnx-xilinx-v2018.3.tar.gz是Xilinx官方提供的原版U-Boot源码包,而alientek-uboot-2018.01-xlnx-v2018.3.tar.gz便是正点原子针对于领航者开发板进修改过的U-Boot源码包,这里我们将alientek-uboot-2018.01-xlnx-v2018.3.tar.gz压缩包文件拷贝到Ubuntu系统中,如下所示:
图 9.1.4 将U-Boot源码拷贝到Ubuntu系统
接下来将其解压,对应的解压目录就是U-Boot源码目录,这个解压目录大家可以自己设置,笔者这里选择将其解压到用户家目录下的work/uboot-2018.01目录中:
- mkdir ~/work/uboot-2018.01
- tar -xzf alientek-uboot-2018.01-xlnx-v2018.3.tar.gz -C ~/work/uboot-2018.01/
- sync
- rm -rf alientek-uboot-2018.01-xlnx-v2018.3.tar.gz
复制代码
图 9.1.5 解压U-Boot源码包
解压完成后,进入到work/uboot-2018.01目录下,可看到U-Boot源码目录结构,如下图所示:
图 9.1.6 U-Boot源码目录结构
至此我们准备工作就已经完成了,接下来需要对petalinux工程进行配置。
1.2配置Petalinux工程
进入到第六章创建的Petalinux工程目录下,输入如下命令,设置Petalinux运行所需的环境变量
- source /opt/pkg/petalinux/2018.3/settings.sh
复制代码 大家根据自己的安装路径修改settings.sh脚本文件的路径信息,如果当前终端已经source了该脚本文件,则无需再次source。
现在重新配置petalinux,重新设置Linux内核的来源,输入如下命令:
在弹出的配置窗口中,进入到“Linux Components Selection--->linux-kernel(linux-xlnx)”菜单下,配置Linux内核来源。此处选择“ext-local-src”,也就是本地存放的Linux内核源码,如下图所示:
图 9.2.1 选择“ext-local-src”
按键盘上的下方向键移到“ext-local-src”,然后按键盘上的“Enter“键确定,返回到上一界面,如下图所示:
图 9.2.2 返回到上一界面
进入“External linux-kernel local source settings”子菜单,如下图所示:
图 9.2.3 “External linux-kernel local source settings”子菜单
按键盘上的“Enter”键配置“EXternal linux-kernel local source path”,如下图所示:
图 9.2.4 填写Linux内核源码的本地路径
也就是填写Linux内核源码的本地路径,上一节我们将Linux内核源码解压到了Ubuntu系统/home/zynq/work/linux-4.14目录,所以此处填写该目录,大家根据自己的路径填写即可,填写完成后,按键盘上的“Enter”键完成配置,返回到上一界面,如下图所示:
图 9.2.5 本地内核源码配置完成
Linux内核源码来源配置完成之后,接着配置U-Boot源码来源,连按两次ESC键回到上一级菜单,选择“u-boot (u-boot-xlnx) --->”配置项,按回车设置U-Boot源码来源,同样这里我们也是选择“ext-local-src”,也就是本地存放的U-Boot源码,如下所示:
图 9.2.6 选择“ext-local-src”
按键盘上的下方向键移到“ext-local-src”,然后按键盘上的“Enter“键确定,返回到上一界面,如下图所示:
图 9.2.7 返回上一级菜单
进入“External u-boot local source settings”子菜单,如下图所示:
图 9.2.8 “External u-boot local source settings”子菜单
按键盘上的“Enter”键配置“EXternal u-boot local source path”,如下图所示:
图 9.2.9 配置本地U-Boot源码路径
这里填写本地U-Boot源码路径,上一节我们将U-Boot源码解压到了Ubuntu系统/home/zynq/work/uboot-2018.01目录,所以此处填写该目录,大家根据自己的路径填写即可,填写完成后,按键盘上的“Enter”键完成配置,返回到上一界面,如下图所示:
图 9.2.10 配置完成
至此我们就配置完成了,接下来保存petalinux工程配置信息,退出配置界面即可。
1.3配置Linux内核
正点原子提供的Linux内核默认都是配置好的,无需配置。这里给大家找一下该内核源码中对应的LCD或HDMI驱动模块配置项,在终端中输入如下命令:
- petalinux-config -c kernel
复制代码 弹出Linux内核的配置窗口。在内核配置窗口中,进入“Device Drivers”菜单下的“Graphics support”菜单下,
图 9.3.1 “Graphics support”菜单
可以看到默认配置了“Xilinx LCD framebuffer driver support By Alientek”,该驱动可以用来驱动HDMI和LCD的显示。
在“Device Drivers”菜单下的“Common Clock Framework”菜单下,可以看到默认配置了“Digilent axi_dynclk Driver”,该驱动可以根据不同的分辨率输出不同的像素时钟。
至此,内核方面的配置也就完成了。保存并退出,进入下一步,配置设备树。
1.4配置设备树
编辑当前工程目录下的project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi文件。由于修改后system-user.dtsi文件内容太长,此处就不全部粘贴了,下面给大家粘贴出在第6.2.7小节配置的基础上追加的内容。
对于领航者7010来说,正点原子配置的vivado工程并不支持HDMI,原因前面已经给大家解释过了,所以不需要添加HDMI相关的配置信息,所以领航者7010来说,对应需要添加的配置信息如下:
如果大家用的开发板是领航者7010,则直接将上面内容copy出来粘贴到system-user.dtsi设备树文件原有内容的最后面即可,也就是在原有内容的基础上追加以上内容。
对于领航者7020来说,对应需要添加的配置信息如下:
如果大家用的开发板是领航者7020,则直接将上面内容copy出来粘贴到system-user.dtsi设备树文件原有内容的最后面即可,也就是在原有内容的基础上追加以上内容。
领航者7010开发板和领航者7020开发板所需要添加的设备树配置信息不一样,其主要在于领航者7010没有支持HDMI,所以设备树当中自然也就没有添加对应的配置信息。在上面添加的内容当中可以看到有很多timing节点,这些其实就是对应的LCD屏或HDMI的时序参数信息,譬如timing_4342表示正点原子4.3寸480*272屏幕所对应的时序参数,其它的timing节点同样也是如此。支持的LCD屏包括正点原子推出的4.3寸800*480和4.3寸480*272、7寸800*480、7寸1024*600以及10.1寸1280*800。
配置完了设备树之后,保存退出,接下来就编译Petalinux工程了。
1.5编译Petalinux工程
现在我们编译整个Petalinux工程,在终端输入如下命令:
执行结果如下图所示:
图 9.5.1 编译petalinux工程
1.6制作BOOT.BIN启动文件并复制到SD卡
使用下面命令生成 BOOT文件:
- petalinux-package --boot --fsbl --fpga --u-boot --force
复制代码 执行结果如下图所示:
图 9.6.1 生成BOOT文件
将image/linux目录下的BOOT.BIN和image.ub文件拷贝到SD启动卡的第一个分区,也就是FAT32分区,如下图所示:
图 9.6.2 拷贝镜像文件到SD卡
拷贝完成之后,现在可以卸载SD卡了。
1.7在开发板上启动Linux
将SD卡插入领航者开发板的SD卡槽,然后通过USB Type-C连接线将开发板USB调试串口与电脑USB口相连,连接电源线、设置开发板启动模式为SD Card,使用软排线将LCD屏连接到开发板,接下来打开电源开关、启动开发板,连接串口终端,打印信息如下所示:
图 9.7.1 内核启动打印信息
启动成功之后,LCD屏将会作为终端出现用户登录提示信息:
图 9.7.2 LCD屏显示信息
此时可以在领航者开发板USB HOST接口上连接一副USB键盘,使用键盘输入用户名和密码就可以登录Linux系统了(登录的用户名为root,密码为:root),登录成功之后大家就可以通过LCD终端来进行相关的操作了,譬如输入Linux命令、执行Linux命令并打印显示Linux命令运行结果,此处我们就不演示了。
至此我们完成了本章的内容。
|