本帖最后由 正点原子运营 于 2024-2-1 17:34 编辑
第九章 Linux图形界面的搭建 1)实验平台:正点原子 DFZU2EG_4EV MPSoC开发板
2) 章节摘自【正点原子】DFZU2EG_4EV MPSoC开发板之嵌入式Linux 驱动开发指南 V1.0
3)购买链接:https://detail.tmall.com/item.htm?id=692450874670
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz-MPSOC.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)Linux技术交流QQ群:887820935
一般我们使用Linux大多都是使用终端进行操作,也就是使用字符界面。其实Linux也是有图形界面的,比如我们使用的Ubuntu主机,默认就是GNOME图形界面。与Windows系统不同的是,Windows的图形界面是不可以更换和卸载的,而且图形界面崩溃了,整个系统基本就崩溃了,而Linux的图形界面只是一个应用程序,可以更换和卸载,常用的图形界面有GNOME、KDE、Xfce、LXDE等。本章我们讲解如何在DFZU2EG_4EVMPSoC开发板上搭建Linux图形界面。
1.1 简介在Windows系统下我们习惯了使用图形界面,不仅享受到了图形界面的操作方便,而且沉浸在图形界面的富娱乐化中,这与Windows长期主要定位于个人桌面端有关。而Linux系统由于开源、稳定的优点长期服务于服务器领域,而服务器领域对图形界面的要求不高,而且缺少商业化的运作,所以Linux的图形界面发展较为缓慢,当然了,现在情况不一样了,随着Linux系统这些年的发展,linux的图形界面做的越来越优秀了,像我们现在使用的18.04版本的Ubuntu发行版的图形界面跟Windows系统的图形界面风格相差无几了。 Linux的图形界面(以下简称桌面)有很多,如GNOME、KDE、XFCE、LXDE等,每个桌面都有属于自己的风格特点。与GNOME、KDE不同的是,XFCE、LXDE定位于轻量级的桌面,可用于硬件性能配置不高的电脑或嵌入式领域。因为图形界面对硬件性能还是有要求的,正因为如此,我们平常使用的电脑都带有GPU,当然了,嵌入式领域很少带GPU的,所以一般使用的是轻量级的桌面,或者用Qt搭建一个。 桌面对于Linux系统来说,只是一个应用程序,所以是可以移植的,由于我们的主要目的不是怎么移植桌面,所以没有必要把精力花费在这上面,当然了,有兴趣的可以尝试下。那我们怎么才能够使用桌面呢? 笔者对Matchbox也未有过太多的了解,本章使用Matchbox,一是因为Petalinux提供了这样一个轻量级的桌面,使用Petalinux搭建,顺便讲解Petalinux的一些功能;二是为以后使用其他的图形界面提供帮助或者说参考。 图形界面是存放在根文件系统中的,对于根文件系统的介绍可参考错误!未找到引用源。小节的错误!未找到引用源。。linux内核启动后通过加载根文件系统进入linux系统,linux系统看起来是什么样的,由根文件系统决定,比如对于安卓手机来说,都是运行在linux内核之上的,但各厂商安卓手机的界面是不一样的,这是由根文件系统决定的。根文件系统可以通过Petalinux编译得到,如本章;也可以使用其他开源的根文件系统,如Ubuntu、Debian等。当然了,不是所有的根文件系统都是通用的,每个根文件系统在产生时都有其适配的平台架构,由编译工具链决定的。对于我们的MPSoc开发板,适用于ARM64位的根文件系统基本上是可以使用的,但在某些细节上可能还需要进行适配。有兴趣的读者可以在完成本章后,阅读下9.8小节的拓展阅读。 下面我们讲解Petalinux与根文件系统相关的内容。
1.2 配置根文件系统类型进入到第六章Petalinux设计流程实战中创建的petalinux工程目录下,然后按照6.3.2小节设置Petalinux环境变量。 现在重新配置petalinux,重新设置根文件系统类型,命令如下: 在弹出的配置界面中,进入到“Image Packaging Configuration”菜单下的“Root filesystem type (INITRAMFS)”子菜单下,如下图所示: 图9.2.1 选择“EXT(SD/eMMC/QSPI/SATA/USB)” 选择“EXT (SD/eMMC/QSPI/SATA/USB)”,按键盘上的“Enter”键返回,结果如下图所示: 图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”,如下图所示: 图9.2.3 配置Device nodeof SD device” 第二种: 设置内核启动参数。 返回到配置主界面。进入到“DTG Settings”菜单下的“Kernel Bootargs”子菜单下,如下图所示: 默认参数如下: - earlycon console=ttyPS0,115200clk_ignore_unused root=/dev/mmcblk0p2 rw rootwait
- earlycon console=ttyPS0,115200 clk_ignore_unused
复制代码将其修改成如下: - earlyconconsole=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中。 不过这样改是不能生效的,如下图所示: 显示“NO EDIT!”,那怎么改呢? 首先取消“generate boot args automatically”,如下图所示: 图9.2.6 取消“generateboot args automatically” 然后设置“user set kernel bootargs”。移动到“user set kernel bootargs”,然后按键盘上的Enter键,进入下图所示界面,输入“earlycon console=ttyPS0,115200 clk_ignore_unusedroot=/dev/mmcblk1p2 rw rootwait”,如下图所示: 设置完成后如下图所示: 经过以上设置后,linux就可以准确的从SD卡的第二个分区,也就是ext4分区加载根文件系统。其他选项保持上一章的设置,现在保存配置并退出。 注:设置的“Kernel Bootargs”在当前工程的components/plnx_workspace/device-tree/device-tree/system-conf.dtsi中可以找到,如果没有或不对应的话,编译Petalinux工程就可以了。
1.3 定制根文件系统输入如下命令定制根文件系统: - petalinux-config -c rootfs
复制代码执行结果如下图所示: 关于该配置界面的介绍可参考错误!未找到引用源。小节的Petalinux构建根文件系统,下面我们定制本章需要的根文件系统。 1.3.1 添加多媒体库multimedia要想丰富根文件系统的多媒体显示功能,如图形界面等,需要添加多媒体库。添加多媒体库需要进行如下配置: - PetalinuxPackage Groups --->
- packagegroup-petalinux-multimedia --->
- packagegroup-petalinux-multimedia(Y)
复制代码结果如下图所示: 用< Help >可以看到packagegroup-petalinux-multimedia包含如下包: 本章我们使用的图形界面就是其中的matchbox。 1.3.2 配置自动登录之前我们在开发板上运行linux,linux系统启动后需要输入用户名和密码,在平时使用时比较麻烦,可以配置根文件系统让linux系统启动后自动登录,需要进行如下配置: - ImageFeatures --->
- debug-tweaks(Y)
复制代码结果如下图所示: 1.4 编译Petalinux工程配置完跟文件系统后,编译整个Petalinux工程,得到修改后的启动镜像文件和根文件系统。在终端输入如下命令: 执行结果如下图所示: 注:有一个警告,Petalinux版本的问题,不影响使用。 编译完成后,会在工程的images/linux生成相应的镜像文件和根文件系统(rootfs.tar.gz),如下图所示: 1.5 制作BOOT.BIN启动文件并复制到SD卡使用下面命令生成 BOOT文件: - petalinux-package --boot --fsbl --fpga --u-boot--force
复制代码执行结果如下图所示: 生成BOOT文件后,我们插入SD卡到Ubuntu虚拟机中,将该工程image/linux目录下的BOOT.BIN、image.ub文件拷贝到名为boot的分区也即/dev/sdc1分区中,如下图所示: 1.6 拷贝根文件系统到SD卡的ext4分区使用命令df -h可以看到已经将SD卡的ext4分区挂载到/media/cx/rootfs/下,如下图所示。之前我们一直未使用到该分区,现在终于派上用场了。 在Ubuntu主机终端中输入如下命令将本章编译得到的根文件系统解压到SD卡的rootfs分区并查看: - sudo tar -zxf rootfs.tar.gz -C /media/cx/rootfs/
- ls /media/cx/rootfs/
复制代码如下图所示: 图9.6.2 将根文件系统解压到SD卡的rootfs分区 可以看到解压完成后,SD卡的rootfs分区就有了根文件系统。当linux内核启动后从SD卡的rootfs分区加载根文件系统相应文件进入linux系统,此后就可以将修改或拷贝的文件保存到SD卡的rootfs分区中,而不是掉电丢失。 现在可以卸载SD卡了,特别注意要在终端中卸载,输入如下命令: - sync #同步
- cd #避免在SD卡挂载的目录中
- umount /dev/sdc*
复制代码/dev/sdc是笔者的SD卡所在目录,输入上面命令后,终端中弹出下一个提示符时才能拔出SD卡,如下图所示: 过早拔出SD卡会导致开发板上的Linux系统启动失败。 1.7 在开发板上启动Linux将SD卡插入开发板的SD卡槽(卡槽位于开发板背面),然后使用USB Type-C连接线将开发板的USB_UART接口与电脑连接,用于串口通信,连接miniDP线用于显示图形界面。接下来将开发板上的启动模式开关设置为从SD卡启动。最后连接开发板的电源线,开发板上电启动。 与开发板miniDP接口连接的显示器显示的内容如下图所示: 这就是轻量级的桌面Matchbox对应的图形界面,很简单。 串口终端显示如下图所示: 注:按下回车键才会显示“root@ALIENTEK-ZYNQ:~#”。 现在如果我们在开发板上接上鼠标和键盘,就可以使用图形界面了。图形界面的使用就不介绍了,有兴趣的读者可自行研究。 至此我们完成了Linux图形界面的使用。 注:输出中的Errors、Cant find、failure一类的信息可能是软件本身的某些问题,但不影响使用。 1.8 拓展阅读也就是说Xilinx以及树莓派是和生产Ubuntu的公司是有合作的,对应的,也应该有用于Xilinx和树莓派的Ubuntu系统镜像。 我们先看Xilinx,在Xilinx对应的页面下,有如下说明: 图9.8.2 用于MPSoc的Ubuntu桌面系统镜像 可以看到,有专用于Xilinx自家生产的ZCU102、ZCU104和ZCU106开发板的Ubuntu桌面系统镜像。无论是ZCU102还是ZCU104都属于ZYNQ UltraScale+ MPSoc系列,理论上也是可以通用于所有的ZYNQ UltraScale+ MPSoc系列的,因为同架构的处理器(PS相同)根文件系统一般是通用的,只需要替换FAT32分区的启动镜像即可。不过很遗憾的是,笔者没有成功的将其适配到我们使用的ZYNQUltraScale+ MPSoc开发板上,有兴趣的读者可以尝试一下。 树莓派的Ubuntu系统有桌面版和服务器版,其使用方式都有相应的教程,可以参考学习。 介绍了树莓派,也许有读者会问,树莓派的Ubuntu系统也可以用于我们的开发板么? 答案是可以的。我们看下树莓派的各版本参数,如下图所示(图片来源于百度百科): 可以看到3代B型以及B+型和CM3的树莓派使用的CPU都是4核ARM A53,与我们使用的2eg和4ev的开发板是相同的,而同型号的CPU可以使用相同的根文件系统,也就是SD卡EXT4分区的内容。根文件系统是运行在Linux内核之上的,与底层关联不大,只要内核使用我们自己开发板的,就可以使用树莓派的根文件系统。笔者尝试了一下,将服务器版的树莓派Ubuntu系统烧录到SD卡,然后替换SD卡FAT32分区的内容,启动后,不知为何密码不对(用户名和密码都是ubuntu),如下图所示: 由于时间原因,笔者没有过多的尝试,有兴趣的读者可自行尝试。 相关内容: |