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

news2024/9/27 7:21:08

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)”子菜单下,如下图所示:
在这里插入图片描述

图 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 node of SD device”
第二种:
设置内核启动参数。
返回到配置主界面。进入到“DTG Settings”菜单下的“Kernel Bootargs”子菜单下,如下图所示:
在这里插入图片描述

图 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中。
不过这样改是不能生效的,如下图所示:
在这里插入图片描述

图 9.2.5 NO EDIT
显示“NO EDIT!”,那怎么改呢?
首先取消“generate boot args automatically”,如下图所示:
在这里插入图片描述

图 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”,如下图所示:
在这里插入图片描述

图 9.2.7设置内核启动参数
设置完成后如下图所示:
在这里插入图片描述

图 9.2.8 设置结果在这里插入图片描述

经过以上设置后,linux就可以准确的从SD卡的第二个分区,也就是ext4分区加载根文件系统。其他选项保持上一章的设置,现在保存配置并退出。
注:设置的“Kernel Bootargs”在当前工程的components/plnx_workspace/device-tree/device-tree/system-conf.dtsi中可以找到,如果没有或不对应的话,编译Petalinux工程就可以了。
9.3定制根文件系统
输入如下命令定制根文件系统:
petalinux-config -c rootfs
执行结果如下图所示:
在这里插入图片描述

图 9.3.1 根文件系统配置界面
关于该配置界面的介绍可参考错误!未找到引用源。小节的Petalinux构建根文件系统,下面我们定制本章需要的根文件系统。
9.3.1添加多媒体库multimedia
要想丰富根文件系统的多媒体显示功能,如图形界面等,需要添加多媒体库。添加多媒体库需要进行如下配置:
Petalinux Package Groups —>
packagegroup-petalinux-multimedia —>
packagegroup-petalinux-multimedia(Y)
结果如下图所示:
在这里插入图片描述

图 9.3.2 添加多媒体库
用< Help >可以看到packagegroup-petalinux-multimedia包含如下包:
在这里插入图片描述

图 9.3.3包含的多媒体库
本章我们使用的图形界面就是其中的matchbox。
9.3.2配置自动登录
之前我们在开发板上运行linux,linux系统启动后需要输入用户名和密码,在平时使用时比较麻烦,可以配置根文件系统让linux系统启动后自动登录,需要进行如下配置:
Image Features —>
debug-tweaks(Y)
结果如下图所示:
在这里插入图片描述

图 9.3.4配置自动登录
9.4编译Petalinux工程
配置完跟文件系统后,编译整个Petalinux工程,得到修改后的启动镜像文件和根文件系统。在终端输入如下命令:
petalinux-build
执行结果如下图所示:
在这里插入图片描述

图 9.4.1 编译整个Petalinux工程
注:有一个警告,Petalinux版本的问题,不影响使用。
编译完成后,会在工程的images/linux生成相应的镜像文件和根文件系统(rootfs.tar.gz),如下图所示:
在这里插入图片描述

图 9.4.2 编译得到的根文件系统
9.5制作BOOT.BIN启动文件并复制到SD卡
使用下面命令生成 BOOT文件:
petalinux-package --boot --fsbl --fpga --u-boot --force
执行结果如下图所示:
在这里插入图片描述

图 9.5.1 生成 BOOT文件
生成BOOT文件后,我们插入SD卡到Ubuntu虚拟机中,将该工程image/linux目录下的BOOT.BIN、image.ub文件拷贝到名为boot的分区也即/dev/sdc1分区中,如下图所示:
在这里插入图片描述

图 9.5.2 复制启动镜像到sd卡
9.6拷贝根文件系统到SD卡的ext4分区
使用命令df -h可以看到已经将SD卡的ext4分区挂载到/media/cx/rootfs/下,如下图所示。之前我们一直未使用到该分区,现在终于派上用场了。
在这里插入图片描述

图 9.6.1挂载点
在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卡,如下图所示:
在这里插入图片描述

图 9.6.3 卸载SD卡
过早拔出SD卡会导致开发板上的Linux系统启动失败。
9.7在开发板上启动Linux
将SD卡插入开发板的SD卡槽(卡槽位于开发板背面),然后使用USB Type-C连接线将开发板的USB_UART接口与电脑连接,用于串口通信,连接miniDP线用于显示图形界面。接下来将开发板上的启动模式开关设置为从SD卡启动。最后连接开发板的电源线,开发板上电启动。
与开发板miniDP接口连接的显示器显示的内容如下图所示:
在这里插入图片描述

图 9.7.1根文件系统显示的桌面
这就是轻量级的桌面Matchbox对应的图形界面,很简单。
串口终端显示如下图所示:
在这里插入图片描述

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

图 9.8.1 Xilinx和树莓派
也就是说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分区的启动镜像即可。不过很遗憾的是,笔者没有成功的将其适配到我们使用的ZYNQ UltraScale+ MPSoc开发板上,有兴趣的读者可以尝试一下。
现在我们来看树莓派。对应网页https://cn.ubuntu.com/download/raspberry-pi,进入后,如下图所示:
在这里插入图片描述

图 9.8.3 适用于树莓派的Ubuntu系统
树莓派的Ubuntu系统有桌面版和服务器版,其使用方式都有相应的教程,可以参考学习。
介绍了树莓派,也许有读者会问,树莓派的Ubuntu系统也可以用于我们的开发板么?
答案是可以的。我们看下树莓派的各版本参数,如下图所示(图片来源于百度百科):
在这里插入图片描述

图 9.8.4 树莓派各版本参数
可以看到3代B型以及B+型和CM3的树莓派使用的CPU都是4核ARM A53,与我们使用的2eg和4ev的开发板是相同的,而同型号的CPU可以使用相同的根文件系统,也就是SD卡EXT4分区的内容。根文件系统是运行在Linux内核之上的,与底层关联不大,只要内核使用我们自己开发板的,就可以使用树莓派的根文件系统。笔者尝试了一下,将服务器版的树莓派Ubuntu系统烧录到SD卡,然后替换SD卡FAT32分区的内容,启动后,不知为何密码不对(用户名和密码都是ubuntu),如下图所示:
在这里插入图片描述

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

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

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

相关文章

单片机之震动传感器、继电器、433M无线发射接收等模块介绍及应用

目录 一、震动传感器模块 二、继电器介绍 三、433M无线发射接收模块 1、 无线控制报警器代码 2、电动车简易防盗器代码实现 一、震动传感器模块 单片机供电VCC GND接单片机 产品不震动&#xff0c;输出高电平、模块上的AO口 产品震动&#xff0c;输出低电平&#xff0c…

Python使用库(一)

Python使用库 库 就是是别人已经写好了的代码, 可以让我们直接拿来用. 荀子曰: “君子性非异也&#xff0c;善假于物也” 一个编程语言能不能流行起来, 一方面取决于语法是否简单方便容易学习, 一方面取决于生态是否完备. 所谓的 “生态” 指的就是语言是否有足够丰富的库, 来…

day11-分类和static

1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码过多的冗余,提高代码的复用性解决业务逻辑聚集紧密导致的可读性差,提高代码的可…

【python Turtle源码】教你如何画一只迎福虎将~

前言 大家早好、午好、晚好吖 ❤ ~ 代码展示 导入模块 from turtle import * import time因代码体量有点多 这里就给大家部分展示了&#xff0c;有需要的可以文章下方名片获取哦~ &#xff08;或者评论已点赞收藏&#xff0c;求代码&#xff0c;我私你呀&#xff09; COLO…

用Python实现童年小游戏贪吃蛇

贪吃蛇游戏是有史以来最受欢迎的街机游戏之一。在这个游戏中&#xff0c;玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果。在学习 Python 或 Pygame 时&#xff0c;可以将创建蛇游戏视为一项挑战。这是每个新手程序员都应该接受的最好的初学者友好项目之一。学习…

Glove模型的原理与代码

文章目录一、背景二、原理部分1.共现矩阵2. F值的获取3. Glove公式的获取4. 损失函数的获取三、代码部分1.词表映射2. 词嵌入3. 训练函数4. 输出结果总结一、背景 GloVe模型即Global Vectors模型&#xff0c;该模型认为语料库中单词出现的统计(共现矩阵) 是学习词向量表示的无监…

将博客系统部署到云服务器上(允许外网访问)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录访问链接测试部署简单回顾 部署普通小孩也要热爱生活&#xff01; 访问链接测试 个人博客系统 登录名&#xff1a;小小周 密码&#xff1a;xiaozhou 部署 在Linux上搭建一个Java部署环境&#xff0c;然后开始进行博…

声明式事务的属性之传播行为

声明式事务的属性之传播行为 ①介绍 当事务方法被另一个事务方法调用时&#xff0c;必须指定事务应该如何传播。例如&#xff1a;方法可能继续在现有事务中运行&#xff0c;也可能开启一个新事务&#xff0c;并在自己的事务中运行。 ②测试 Controller public class BookC…

望尘科技通过港交所聆讯:坚持深耕“体育游戏”的收获者

文|螳螂观察 作者|李永华 行将结束的2022年&#xff0c;体育大年&#xff0c;除了令人心跳加速的赛事&#xff0c;还有遍地的“黄金”。 各领域大大小小的厂商们使出浑身解数&#xff0c;掘金市场。 刚刚过去不久的世界杯&#xff0c;让这一过程到达了高潮。 广告代言、彩…

排序(完整版)

目录 一、基本概念 二、排序的分类 三、排序算法的好坏的衡量 四、五类内排序 插入排序 直接插入排序 演示&#xff1a; 关键代码&#xff1a; 完整代码 结果&#xff1a; 插入排序算法分析&#xff1a; 带哨兵的插入排序 举例&#xff1a; 关键代码 完整代码 折半…

365天深度学习训练营-第P4周:猴痘病识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 内部限免文章&#xff08;版权归 K同学啊 所有&#xff09;&#x1f366; 参考文章地址&#xff1a; &#x1f517;第P4周&#xff1a;猴痘病识别 | 365天深度学习训练营&#x1f356; 作者&#xff1a;K同学啊 | 接辅导…

Java 发送邮件

使用Java应用程序发送 E-mail 十分简单&#xff0c;但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) 。 您可以从 Java 网站下载最新版本的 JavaMail&#xff0c;打开网页右侧有个 Downloads 链接&#xff0c;点击它下载。您可以从 Java 网站…

从业10多年,我总结了这几款程序员必备实用工具

优秀程序员之所以优秀的原因并不一定是他写代码的速度比别人快&#xff0c;而是他解决事情的效率比别人高、副业渠道比别人广&#xff0c;所以提供工作效率的方法并不需要我们样样精通&#xff0c;提高副业收入的办法也不需要我们挖空心思&#xff0c;有时候使用好的工具就能帮…

微信小程序开发实战11_1 微信支付下单

微信支付流程图 微信支付存在多个业务流程&#xff0c;包括微信支付流程、退款流程等。本章节主要介绍微信的支付下单流程&#xff0c;图12-1是微信支付流程的交互图&#xff1a; 重点环节说明 步骤1&#xff1a;小程序端用户向商户服务器发起支付请求&#xff0c;重点是提供…

Appium基础 — webview操作(重点)

我们之前说过的所有操作&#xff0c;都是对原生页面的操作。 在手机APP中&#xff0c;除了原生页面&#xff0c;还是有webview页面&#xff08;也就是H5页面&#xff09;&#xff0c;下面我们就说说对webview页面的操作。 1、先了解什么是Hybrid&#xff08;混合&#xff09;…

【Web安全】Ysoserial 简单利用

Ysoserial 简单利用1. Java 反序列化特征2. Ysoserial 流量特征3. Ysoserial 攻击流程3.1 找到序列化接口3.2 漏洞利用3.2.1 常用命令3.2.2 使用案例4. Ysoserial 攻击原理问题参考1. Java 反序列化特征 在日志中&#xff0c;特征通常表现为 请求格式 Json、xml、soap、二进制…

拓扑排序的java代码实现过程详解

拓扑排序 在现实生活中&#xff0c;我们经常会同一时间接到很多任务去完成&#xff0c;但是这些任务的完成是有先后次序的。以我们学习java学科为例&#xff0c;我们需要学习很多知识&#xff0c;但是这些知识在学习的过程中是需要按照先后次序来完成的。从java基础&#xff0c…

中国电信携手鼎桥创新中心开展终端优选测评工作

近期&#xff0c;中国电信物联网开放实验室与鼎桥创新中心本着“优势互补、合作共赢、共同发展”的原则&#xff0c;携手联合开展了中国电信CTWing物联网市场终端优选测试&#xff0c;完成了多款行业智能终端的测评&#xff0c;为物联网市场上架产品的质量保驾护航&#xff0c;…

Node.js--》Express和路由模块的讲解使用

目录 Express Express的安装与使用 托管静态资源 nodemon Express路由 模块化路由 Express Express是基于Node.js平台&#xff0c;快速、开放、极简的Web开发框架。Express的作用和Node.js内置的http模块类似&#xff0c;是专门用来创建Web服务器的。Express的本质&…

cubeIDE开发, stm32独立看门狗IWDT的CubeMX配置及HAL库底层实现分析

一、STM32 的IWDT简介 2.1 看门狗原理 看门狗本质上就是一种计数器&#xff0c;和我们现实生活中一炷香现象、沙漏现象等是同理的&#xff0c;计数器一般有两种做法&#xff0c;一种是递增&#xff0c;超过固定阀值报警&#xff1b;一种是递减&#xff0c;通常值降到0时报警。后…