【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

时间:2022-12-31 13:57:01

1)实验平台:正点原子MPSoC开发板
2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html

第九章Linux图形界面的搭建

一般我们使用Linux大多都是使用终端进行操作,也就是使用字符界面。其实Linux也是有图形界面的,比如我们使用的Ubuntu主机,默认就是GNOME图形界面。与Windows系统不同的是,Windows的图形界面是不可以更换和卸载的,而且图形界面崩溃了,整个系统基本就崩溃了,而Linux的图形界面只是一个应用程序,可以更换和卸载,常用的图形界面有GNOME、KDE、Xfce、LXDE等。本章我们讲解如何在DFZU2EG_4EV MPSoC开发板上搭建Linux图形界面。

9.1简介
在Windows系统下我们习惯了使用图形界面,不仅享受到了图形界面的操作方便,而且沉浸在图形界面的富娱乐化中,这与Windows长期主要定位于个人桌面端有关。而Linux系统由于开源、稳定的优点长期服务于服务器领域,而服务器领域对图形界面的要求不高,而且缺少商业化的运作,所以Linux的图形界面发展较为缓慢,当然了,现在情况不一样了,随着Linux系统这些年的发展,linux的图形界面做的越来越优秀了,像我们现在使用的18.04版本的Ubuntu发行版的图形界面跟Windows系统的图形界面风格相差无几了。
Linux的图形界面(以下简称桌面)有很多,如GNOME、KDE、XFCE、LXDE等,每个桌面都有属于自己的风格特点。与GNOME、KDE不同的是,XFCE、LXDE定位于轻量级的桌面,可用于硬件性能配置不高的电脑或嵌入式领域。因为图形界面对硬件性能还是有要求的,正因为如此,我们平常使用的电脑都带有GPU,当然了,嵌入式领域很少带GPU的,所以一般使用的是轻量级的桌面,或者用Qt搭建一个。
桌面对于Linux系统来说,只是一个应用程序,所以是可以移植的,由于我们的主要目的不是怎么移植桌面,所以没有必要把精力花费在这上面,当然了,有兴趣的可以尝试下。那我们怎么才能够使用桌面呢?
其实我们用Petalinux就可以搭建一个轻量级的桌面。Petalinux提供的轻量级的桌面为Matchbox,也是一个窗口管理器。关于Matchbox的介绍可访问:https://www.yoctoproject.org/software-item/matchbox/,也可参考CSDN的一篇博客:https://blog.csdn.net/chungle2011/article/details/104880893。
笔者对Matchbox也未有过太多的了解,本章使用Matchbox,一是因为Petalinux提供了这样一个轻量级的桌面,使用Petalinux搭建,顺便讲解Petalinux的一些功能;二是为以后使用其他的图形界面提供帮助或者说参考。
图形界面是存放在根文件系统中的,对于根文件系统的介绍可参考错误!未找到引用源。小节的错误!未找到引用源。。linux内核启动后通过加载根文件系统进入linux系统,linux系统看起来是什么样的,由根文件系统决定,比如对于安卓手机来说,都是运行在linux内核之上的,但各厂商安卓手机的界面是不一样的,这是由根文件系统决定的。根文件系统可以通过Petalinux编译得到,如本章;也可以使用其他开源的根文件系统,如Ubuntu、Debian等。当然了,不是所有的根文件系统都是通用的,每个根文件系统在产生时都有其适配的平台架构,由编译工具链决定的。对于我们的MPSoc开发板,适用于ARM64位的根文件系统基本上是可以使用的,但在某些细节上可能还需要进行适配。有兴趣的读者可以在完成本章后,阅读下9.8小节的拓展阅读。
下面我们讲解Petalinux与根文件系统相关的内容。
9.2配置根文件系统类型
进入到第六章Petalinux设计流程实战中创建的petalinux工程目录下,然后按照6.3.2小节设置Petalinux环境变量。
现在重新配置petalinux,重新设置根文件系统类型,命令如下:
petalinux-config
在弹出的配置界面中,进入到“Image Packaging Configuration”菜单下的“Root filesystem type (INITRAMFS)”子菜单下,如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.2.1 选择“EXT (SD/eMMC/QSPI/SATA/USB)”
选择“EXT (SD/eMMC/QSPI/SATA/USB)”,按键盘上的“Enter”键返回,结果如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.2.2 Root filesystem type最终配置
将根文件系统类型(root filesystem type)设置为“EXT (SD/eMMC/QSPI/SATA/USB)”,也就是根文件系统在EXT外部,可能是在SD、eMMC、QSPI等中,而不是像INITRD类型那样存放在image.ub中。现在又有一个新问题,内核怎么知道根文件系统放哪儿呢,是在SD、eMMC、QSPI等哪一个里面呢?有两种方式可以解决。
第一种:
配置“Device node of SD device”,也就是SD设备的设备节点,一般都是将根文件系统放到SD卡中,所以用SD device代表存放根文件系统的设备,默认是“/dev/mmcblk0p2”,代表着第一个mmc设备/dev/mmcblk0的第二个分区,对应开发板的eMMC的第二个分区。笔者是将根文件系统放到SD卡的第二个分区中,也就是SD卡的ext4分区,所以将其设置为“/dev/mmcblk1p2”,如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.2.3 配置Device node of SD device”
第二种:
设置内核启动参数。
返回到配置主界面。进入到“DTG Settings”菜单下的“Kernel Bootargs”子菜单下,如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.2.4设置内核启动参数
默认参数如下:
earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/mmcblk0p2 rw rootwait
earlycon console=ttyPS0,115200 clk_ignore_unused
将其修改成如下:
earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/mmcblk1p2 rw rootwait
也就是将“root=/dev/mmcblk0p2”改成“root=/dev/mmcblk1p2”,/dev/mmcblk1p2对应SD卡的ext4分区,“root=/dev/mmcblk1p2”表示根文件系统存放在/dev/mmcblk1p2中。
不过这样改是不能生效的,如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.2.5 NO EDIT
显示“NO EDIT!”,那怎么改呢?
首先取消“generate boot args automatically”,如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.2.6 取消“generate boot args automatically”
然后设置“user set kernel bootargs”。移动到“user set kernel bootargs”,然后按键盘上的Enter键,进入下图所示界面,输入“earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/mmcblk1p2 rw rootwait”,如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.2.7设置内核启动参数
设置完成后如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.2.8 设置结果【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

经过以上设置后,linux就可以准确的从SD卡的第二个分区,也就是ext4分区加载根文件系统。其他选项保持上一章的设置,现在保存配置并退出。
注:设置的“Kernel Bootargs”在当前工程的components/plnx_workspace/device-tree/device-tree/system-conf.dtsi中可以找到,如果没有或不对应的话,编译Petalinux工程就可以了。
9.3定制根文件系统
输入如下命令定制根文件系统:
petalinux-config -c rootfs
执行结果如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.3.1 根文件系统配置界面
关于该配置界面的介绍可参考错误!未找到引用源。小节的Petalinux构建根文件系统,下面我们定制本章需要的根文件系统。
9.3.1添加多媒体库multimedia
要想丰富根文件系统的多媒体显示功能,如图形界面等,需要添加多媒体库。添加多媒体库需要进行如下配置:
Petalinux Package Groups —>
packagegroup-petalinux-multimedia —>
packagegroup-petalinux-multimedia(Y)
结果如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.3.2 添加多媒体库
用< Help >可以看到packagegroup-petalinux-multimedia包含如下包:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.3.3包含的多媒体库
本章我们使用的图形界面就是其中的matchbox。
9.3.2配置自动登录
之前我们在开发板上运行linux,linux系统启动后需要输入用户名和密码,在平时使用时比较麻烦,可以配置根文件系统让linux系统启动后自动登录,需要进行如下配置:
Image Features —>
debug-tweaks(Y)
结果如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.3.4配置自动登录
9.4编译Petalinux工程
配置完跟文件系统后,编译整个Petalinux工程,得到修改后的启动镜像文件和根文件系统。在终端输入如下命令:
petalinux-build
执行结果如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.4.1 编译整个Petalinux工程
注:有一个警告,Petalinux版本的问题,不影响使用。
编译完成后,会在工程的images/linux生成相应的镜像文件和根文件系统(rootfs.tar.gz),如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.4.2 编译得到的根文件系统
9.5制作BOOT.BIN启动文件并复制到SD卡
使用下面命令生成 BOOT文件:
petalinux-package --boot --fsbl --fpga --u-boot --force
执行结果如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.5.1 生成 BOOT文件
生成BOOT文件后,我们插入SD卡到Ubuntu虚拟机中,将该工程image/linux目录下的BOOT.BIN、image.ub文件拷贝到名为boot的分区也即/dev/sdc1分区中,如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.5.2 复制启动镜像到sd卡
9.6拷贝根文件系统到SD卡的ext4分区
使用命令df -h可以看到已经将SD卡的ext4分区挂载到/media/cx/rootfs/下,如下图所示。之前我们一直未使用到该分区,现在终于派上用场了。
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.6.1挂载点
在Ubuntu主机终端中输入如下命令将本章编译得到的根文件系统解压到SD卡的rootfs分区并查看:
sudo tar -zxf rootfs.tar.gz -C /media/cx/rootfs/
ls /media/cx/rootfs/
如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.6.2 将根文件系统解压到SD卡的rootfs分区
可以看到解压完成后,SD卡的rootfs分区就有了根文件系统。当linux内核启动后从SD卡的rootfs分区加载根文件系统相应文件进入linux系统,此后就可以将修改或拷贝的文件保存到SD卡的rootfs分区中,而不是掉电丢失。
现在可以卸载SD卡了,特别注意要在终端中卸载,输入如下命令:
sync #同步
cd #避免在SD卡挂载的目录中
umount /dev/sdc*
/dev/sdc是笔者的SD卡所在目录,输入上面命令后,终端中弹出下一个提示符时才能拔出SD卡,如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.6.3 卸载SD卡
过早拔出SD卡会导致开发板上的Linux系统启动失败。
9.7在开发板上启动Linux
将SD卡插入开发板的SD卡槽(卡槽位于开发板背面),然后使用USB Type-C连接线将开发板的USB_UART接口与电脑连接,用于串口通信,连接miniDP线用于显示图形界面。接下来将开发板上的启动模式开关设置为从SD卡启动。最后连接开发板的电源线,开发板上电启动。
与开发板miniDP接口连接的显示器显示的内容如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.7.1根文件系统显示的桌面
这就是轻量级的桌面Matchbox对应的图形界面,很简单。
串口终端显示如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.7.2 串口终端
注:按下回车键才会显示“root@ALIENTEK-ZYNQ:~#”。
现在如果我们在开发板上接上鼠标和键盘,就可以使用图形界面了。图形界面的使用就不介绍了,有兴趣的读者可自行研究。
至此我们完成了Linux图形界面的使用。
注:输出中的Errors、Cant find、failure一类的信息可能是软件本身的某些问题,但不影响使用。
9.8拓展阅读
我们进入Ubuntu的官方网页https://ubuntu.com/download/xilinx,进入后可以看到Xilinx和树莓派,如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.8.1 Xilinx和树莓派
也就是说Xilinx以及树莓派是和生产Ubuntu的公司是有合作的,对应的,也应该有用于Xilinx和树莓派的Ubuntu系统镜像。
我们先看Xilinx,在Xilinx对应的页面下,有如下说明:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.8.2 用于MPSoc的Ubuntu桌面系统镜像
可以看到,有专用于Xilinx自家生产的ZCU102、ZCU104和ZCU106开发板的Ubuntu桌面系统镜像。无论是ZCU102还是ZCU104都属于ZYNQ UltraScale+ MPSoc系列,理论上也是可以通用于所有的ZYNQ UltraScale+ MPSoc系列的,因为同架构的处理器(PS相同)根文件系统一般是通用的,只需要替换FAT32分区的启动镜像即可。不过很遗憾的是,笔者没有成功的将其适配到我们使用的ZYNQ UltraScale+ MPSoc开发板上,有兴趣的读者可以尝试一下。
现在我们来看树莓派。对应网页https://cn.ubuntu.com/download/raspberry-pi,进入后,如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.8.3 适用于树莓派的Ubuntu系统
树莓派的Ubuntu系统有桌面版和服务器版,其使用方式都有相应的教程,可以参考学习。
介绍了树莓派,也许有读者会问,树莓派的Ubuntu系统也可以用于我们的开发板么?
答案是可以的。我们看下树莓派的各版本参数,如下图所示(图片来源于百度百科):
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.8.4 树莓派各版本参数
可以看到3代B型以及B+型和CM3的树莓派使用的CPU都是4核ARM A53,与我们使用的2eg和4ev的开发板是相同的,而同型号的CPU可以使用相同的根文件系统,也就是SD卡EXT4分区的内容。根文件系统是运行在Linux内核之上的,与底层关联不大,只要内核使用我们自己开发板的,就可以使用树莓派的根文件系统。笔者尝试了一下,将服务器版的树莓派Ubuntu系统烧录到SD卡,然后替换SD卡FAT32分区的内容,启动后,不知为何密码不对(用户名和密码都是ubuntu),如下图所示:
【正点原子FPGA连载】第九章Linux图形界面的搭建摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

图 9.8.5 用户名与密码不对应
由于时间原因,笔者没有过多的尝试,有兴趣的读者可自行尝试。
相关内容:
1)烧录Ubuntu镜像:https://ubuntu.com/download/iot/installation-media
2)Ubuntu系统网络配置:https://ubuntu.com/server/docs/network-configuration