搜索
bottom↓
回复: 1

《STM32MP157快速体验》第五章ATK-STM32MP157文件系统简介

[复制链接]

出0入234汤圆

发表于 2021-6-3 10:10:41 | 显示全部楼层 |阅读模式

1)实验平台:正点原子STM32MP157开发板
2)  章节摘自【正点原子】《STM32MP157快速体验》
3)购买链接:https://item.taobao.com/item.htm?&id=629270721801
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/arm-linux/zdyzmp157.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)正点原子STM32MP157技术交流群:691905614
O1CN01abYcZO23XsL4ETed4_!!230947266.png

原子哥在线教育平台.jpg

152443zfu1nrzhhhh6wuc8.png

第五章ATK-STM32MP157文件系统简介



小节前言:
ATK-STM32MP157出厂Qt文件系统由Yocto项目编译及后期打包而成,Yocto项目过于复杂,编译经常会出错且要求计算机性能较高,新手不建议去接触,可直接使用我们的出厂系统进行学习与开发。或者根据正点原子STM32MP1Linux驱动开发指南使用buildroot简易文件系统进行学习。下面简单介绍用户在文件系统常用的知识点。
5.1 文件系统目录简介
ATK-STM32MP157出厂Qt文件系统目录简介:
51.png

5.2 文件系统Qt版本
文件系统的Qt版本为Qt5.14.2(2020.12.26日后由QT5.14.1更新为Qt5.14.2,日后长久使用此版本不再改动)。
5.3 如何创建systemd 自启动服务
想开机自启动程序,可以在/etc/profile.d/qt-eglfs.sh这个文件里添加启动程序的指令。也可以自己创建新的系统服务,让系统启动起来时自动执行。
我们先创建一个要启动的脚本
  1. <font size="4">vi auto_run_script.sh</font>
复制代码

在脚本里添加以下内容,脚本内容是打印信息到串口。
  1. <font size="4">#!/bin/bash</font>
  2. <font size="4">echo “Hello World!”> /dev/ttySTM0</font>
复制代码

赋予脚本可执行权限,执行下面的指令
  1. <font size="4">chmod +x auto_run_script.sh</font>
复制代码

我们进入/etc/systemd/system目录下,创建一个自启动服务auto_run_script.service。
  1. <font size="4">cd /etc/systemd/system</font>
  2. <font size="4">vi auto_run_script.service</font>
复制代码

在auto_run_script.service里添加以下内容
  1. <font size="4">[Unit]</font>
  2. <font size="4">Description=Run a Custom Script at Startup</font>
  3. <font size="4">After=default.target</font>

  4. <font size="4">[Service]</font>
  5. <font size="4">ExecStart=/home/root/auto_run_script.sh</font>

  6. <font size="4">[Install]</font>
  7. <font size="4">WantedBy=default.target</font>
复制代码

然后我们使用更新 systemd 配置文件,并建立符号链接关系
  1. <font size="4">systemctl daemon-reload</font>
  2. <font size="4">systemctl enable auto_run_script.service</font>
复制代码

第五章ATK1741.png

图5.1 1 更新配置文件,建立符号链接

再执行重启命令reboot
  1. <font size="4">sync;reboot</font>
复制代码

重启时看到打印该服务的描述信息及打印脚本的信息,表明已经执行了自启动脚本。
第五章ATK1851.png

图5.1 2 重启后,服务自启动打印的信

5.4 如何禁用Qt界面启动
在高版本的内核和高版本的Yocto里,所使用的文件系统早已经使用Systemd方式来用来启动守护进程,已成为大多数发行版的标准配置。如果你学习过Systemd,那么你将很容易理解正点原子所配置的Qt桌面服务启动。
正点原子STM32MP157配置了3种方式显示Qt桌面服务。默认开机以Linuxfb方式显示Qt,配置服务只能三种方式里选一种方式启动Qt。下面简单介绍一下这三种方式。
Linuxfb方式
Linuxfb方式,使用/dev/fb0设备,纯软件渲染,不使用硬件GPU加速,出厂默认使用此方式,在文件系统路径下/etc/systemd/system/atk-qtdesktop-linuxfb.service这个服务里,我们可以查看它的内容。主要看ExecStart=/opt/QDesktop-fb -platform linuxfb  >/dev/null 2>&1 &此行。配置了路径/opt/QDesktop-fb Qt应用程序使用linuxfb方式显示。若用户想使用linuxfb方式显示,则改ExecStart这个位置即可,指定自己的Qt应用程序即可。
Eglfs方式
对于有GPU的板卡来说,使用eglfs方式显示Qt是比较好的,如果你使用此方式显示Qt,可以明显的看到Qt界面的图片拖动时没有锯齿状态。正点原子也配置了此种方式,默认没有此项启动。此方式有个缺点,就是当我们使用触摸屏时,滑动屏幕是非常流畅的。但是如果用户使用此种方式使用了鼠标进行点击,就会觉得卡顿。Qt官方解释eglfs方式使用鼠标会性能不佳。对于正点原子STM32MP157的用户没有购买LCD屏,若使用此方式直接使用HDMI,用鼠标点击,体验感较差,卡顿。所以正点原子默认出厂配置了linuxfb方式显示,可解决鼠标卡顿的问题。如果想用此方式显示Qt则在文件系统路径下/etc/systemd/system/atk-qtdesktop-eglfs.service这个服务里找到ExecStart=/opt/QDesktop-egl -platform eglfs  >/dev/null 2>&1 &将/opt/QDesktop-egl改为个人的Qt应用程序即可!
Wayland方式
Qt使用wayland方式显示,需要启动weston桌面。Qt应用程序将以一个子程序嵌入到weston桌面里显示。就好像我们在电脑打开了一个窗口程序。Qt有wayland插件,支持Qt与weston桌面通信。与eglfs方式一样,此方式使用鼠标比较会卡顿。如果您也想将一个Qt应用程序嵌入到weston桌面,可在文件系统路径下/etc/systemd/system/atk-qtdesktop-wayland.service这个服务里找到ExecStart=/opt/QDesktop-egl -platform wayland  >/dev/null 2>&1 &将/opt/QDesktop-egl改为个人的Qt应用程序即可!
如何禁用正点原子Qt桌面启动呢?出厂默认是启动atk-qtdesktop-linuxfb.service这个服务。我们若不需要启动Qt桌面。那么我们执行下面的指令。停止Qt桌面或者关闭Qt桌面(如果关闭下次不会自动启动!)。
  1. <font size="4">systemctl stop atk-qtdesktop-linuxfb                // 暂时停止Qt桌面服务,重启服务用restart</font>
  2. <font size="4">systemctl disable atk-qtdesktop-linuxfb        // 执行此项关闭Qt桌面服务,下次启动不生效</font>
  3. <font size="4">若想切换到eglfs方式启动Qt桌面。</font>
  4. <font size="4">systemctl daemon-reload                                // 重新加载服务                        </font>
  5. <font size="4">systemctl enable atk-qtdesktop-eglfs.service // 开启Qt以eglfs方式启动的服务</font>
  6. <font size="4">reboot                                                                // 重启生效</font>
复制代码

若不需要启动Qt桌面服务。使用systemctl指令将此三种方式显示Qt的服务关闭。出厂默认启动atk-qtdesktop-linuxfb        服务。只需要关闭此项即可。
  1. <font size="4">systemctl disable atk-qtdesktop-linuxfb        // 执行此项关闭Qt桌面服务,下次启动不生效</font>
复制代码

若都关闭了正点原子的Qt桌面服务。怎么开启不需要启动服务来开启Qt应用程序呢?若关闭了正点原子的Qt桌面服务,开机启动以Weston桌面显示。我们可以使用下面的指令在Weston桌面上显示个人的Qt应用程序。因为Weston桌面启动了。只能够使用Wayland方式来显示Qt。执行下面的指令。
/opt/QDesktop-egl -platform wayland  >/dev/null 2>&1 & // QDesktop应用程序将在Weston桌面里出现
若想使用linuxfb或eglfs方式显示。首先我们得停止Weston桌面。
  1. <font size="4">systemctl stop </font><a href="mailto:weston@root.service" style="font-size: large;">weston@root.service</a><font size="4">                                // 停止Weston桌面服务</font>
  2. <font size="4">/opt/QDesktop-egl -platform eglfs  >/dev/null 2>&1 &        // eglfs方式显示</font>
  3. <font size="4">/opt/QDesktop-fb -platform linuxfb  >/dev/null 2>&1 &        // 或linuxfb方式显示</font>
复制代码

关于Qt运行的时需要的环境变量,在/etc/profile.d/目录下。可自由查看,这里不作解释了。或者在终端执行env查看Qt运行时所需的环境变量。
上面说的“服务”可以相对初学者来说比较复杂。需要一定的时间去磨合。文件系统的功能远远不止这些,需要个人自己发掘与探究。上面说的是使用方法,具体原理并非这个文档能解释清楚,先照瓢画葫芦做一遍再理解,再研究。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2021-6-3 10:21:38 | 显示全部楼层
st都可以跑linux,步伐跟不上
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-6 04:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表