嵌入式linux fb_cursor
时间: 2023-05-29 10:01:18 浏览: 425
fb_cursor是Linux Framebuffer的一个软件光标实现,可以用来替代硬件光标。在嵌入式系统中,由于硬件资源的限制,很多系统都没有硬件光标,这时就需要使用软件光标。fb_cursor提供了一些API可以用来设置和控制光标的显示。
使用fb_cursor需要先安装libts-bin和fbcon-utils这两个软件包。在命令行中可以使用以下命令安装:
```
sudo apt-get install libts-bin fbcon-utils
```
安装完成后,可以使用以下命令开启fb_cursor功能:
```
sudo modprobe softcursor
```
然后使用以下命令来设置光标的大小和颜色:
```
fbsetcursor <x> <y> <color>
```
其中,x和y分别是光标的宽度和高度(单位为像素),color是光标的颜色,可选值为0(黑色)和1(白色)。
最后,可以使用以下命令来控制光标的显示:
```
echo 1 > /sys/class/graphics/fbcon/cursor_blink
echo 0 > /sys/class/graphics/fbcon/cursor_blink
```
第一条命令用来开启光标闪烁效果,第二条命令则用来关闭光标闪烁效果。
相关问题
cursor 嵌入式rules
### 嵌入式系统中 Cursor 和 Rules 的使用方法
在嵌入式系统开发过程中,鼠标光标的显示行为以及相关规则的配置是一个常见的需求。以下是关于如何处理 `cursor` 显示和隐藏的行为,以及可能遇到的相关问题及其解决方案。
#### 配置 Mouse Cursor 行为
当使用 Qt 开发嵌入式应用程序时,鼠标的可见性可以通过环境变量来控制。如果未设置特定的环境变量(如 `QT_QPA_EGLFS_HIDECURSOR` 或 `QT_QPA_FB_HIDECURSOR`),并且设备被检测到至少有一个可用的鼠标,则鼠标指针会默认显示[^1]。
对于基于 libudev 设备发现机制的情况,如果没有禁用鼠标支持或者显式通过环境变量关闭鼠标功能,那么即使是在无桌面环境中也会看到鼠标光标。
- **EGLFS 插件**: 如果希望强制隐藏鼠标,在启动程序前可以设置如下环境变量:
```bash
export QT_QPA_EGLFS_HIDECURSOR=1
```
- **LinuxFB 插件**: 同样地,也可以针对 Linux Framebuffer 设置相应的环境变量以达到相同效果:
```bash
export QT_QPA_FB_HIDECURSOR=1
```
如果不具备 libudev 支持的情况下,默认情况下仍然会尝试加载并展示鼠标图标除非明确指定上述参数将其屏蔽掉[^1]。
#### 实现自定义 Cursor 图像
除了简单的开启/关闭操作外,还可以进一步定制化游标的外观样式满足具体项目需求:
```cpp
#include <QApplication>
#include <QCursor>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QPixmap pixmap(":/path/to/custom_cursor.png");
QCursor cursor(pixmap);
qApp->setOverrideCursor(cursor);
return app.exec();
}
```
以上代码片段展示了如何创建一个新的 QCursor 对象并将它应用于整个应用程序之中[^2]。
#### 错误排查指南
尽管按照官方文档说明进行了相应调整但仍存在问题时可考虑以下几个方面进行调试分析:
1. 确认当前运行平台所使用的图形后端插件类型(eglf还是frame buffer),因为不同类型的插件对应不同的环境变量名;
2. 检查是否存在其他地方重新设置了覆盖原有设定值的可能性;
3. 使用 strace 工具跟踪进程调用链路找出实际生效与否的原因所在;
---
###
#!/bin/sh -e echo "start myir HMI 2.0... echo 82 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio82/direction echo 1 > /sys/class/gpio/gpio82/value echo139 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio139/direction echo 1 > /sys/class/gpio/gpio139/value export QT_QPA_EGLFS_ALWAYS_SET_MODE="1" export QT_QPA_EGLFS_KMS_ATOMIC='1' export QT_QPA_EGLFS_KMS_CoNFIG='/usr/share/qt5/cursor.json' mount /dev/mmcblk2p2 /boot export QT_QPA_PLATFORM='eglfs' /usr/bin/mxapp2 -platform eglfs & #export QT_QPA_PLATFORM='linuxfb' #/usr/bin/mxapp2 -platform linuxfb & exit 0 这个什么作用
<think>好的,我现在需要分析用户提供的这个shell脚本的作用。首先,我会逐行阅读代码,理解每个命令的功能,然后结合这些命令的作用,整体上理解脚本的用途。
脚本开始是#!/bin/sh -e,这表示使用/bin/sh作为解释器,并且启用-e选项,即一旦有任何命令执行失败,脚本就会立即退出。这有助于在出现错误时及时停止,避免后续命令可能带来的问题。
接下来是echo "start myir HMI 2.0...,这里应该是输出提示信息,告诉用户正在启动MYIR的HMI 2.0。不过注意到用户提供的代码中,这一行缺少了结束的引号,可能是个拼写错误,正确的应该是echo "start myir HMI 2.0...",这样才会正确输出字符串。不过可能在原脚本中是正确的,用户复制时可能遗漏了。
然后是关于GPIO的操作:首先将82导出到sysfs的GPIO接口,设置方向为输出,再将其值设为1。同样的操作对GPIO139也进行一遍。GPIO通常用于控制硬件设备,比如LED、继电器等。这里可能是通过这两个GPIO引脚输出高电平,来初始化某些硬件模块,例如开启电源或复位设备。
接下来是几个环境变量的设置:QT_QPA_EGLFS_ALWAYS_SET_MODE="1",QT_QPA_EGLFS_KMS_ATOMIC='1',QT_QPA_EGLFS_KMS_CONFIG='/usr/share/qt5/cursor.json'。这些环境变量都是和Qt应用程序的显示相关,特别是使用EGLFS(Embedded Linux Full Screen)平台时。EGLFS是Qt用于嵌入式Linux的一种平台插件,它直接使用EGL和OpenGL ES进行全屏渲染,适合没有X窗口系统的环境。设置这些变量可能是为了调整显示模式,启用原子模式(KMS atomic)以支持更现代的显示驱动,以及指定光标配置文件的位置。
然后执行mount /dev/mmcblk2p2 /boot,挂载MMC卡的分区到/boot目录。这通常是为了访问启动分区中的文件,可能是需要读取某些配置或内核文件。
接着设置QT_QPA_PLATFORM='eglfs',指定Qt应用程序使用eglfs平台插件。然后运行/usr/bin/mxapp2 -platform eglfs &,启动mxapp2程序,并在后台运行。这里-platform参数显式指定使用eglfs,可能与之前的环境变量设置一起确保程序正确使用图形后端。
注释掉的部分是使用linuxfb平台,可能作为备选方案,但当前脚本中使用的是eglfs。
最后exit 0正常退出脚本。
综合来看,这个脚本的主要作用是初始化硬件(通过GPIO),配置Qt应用程序的显示环境,挂载必要的文件系统,并启动一个名为mxapp2的Qt应用程序,用于HMI(人机界面)。可能用于嵌入式设备,如工业控制面板或触摸屏界面,需要图形显示和硬件控制。需要检查GPIO编号是否正确,以及挂载点是否存在,避免运行时错误。</think>这个脚本是用于启动嵌入式设备上基于Qt框架的HMI(人机界面)应用程序的初始化程序。以下是逐层解析:
---
### 一、基础解释器声明
```bash
#!/bin/sh -e
```
- `#!/bin/sh`:使用`sh`(Bourne Shell)作为解释器
- `-e`:任何命令执行失败立即终止脚本
---
### 二、GPIO硬件初始化
```bash
echo 82 > /sys/class/gpio/export # 激活GPIO82引脚
echo out > /sys/class/gpio/gpio82/direction # 设为输出模式
echo 1 > /sys/class/gpio/gpio82/value # 输出高电平
echo 139 > /sys/class/gpio/export # 激活GPIO139引脚
echo out > /sys/class/gpio/gpio139/direction
echo 1 > /sys/class/gpio/gpio139/value
```
- **作用**:通过Linux的sysfs接口控制GPIO引脚
- **典型场景**:初始化外部硬件(如屏幕背光、复位电路等)
---
### 三、Qt图形环境配置
```bash
export QT_QPA_EGLFS_ALWAYS_SET_MODE="1" # 强制设置显示模式
export QT_QPA_EGLFS_KMS_ATOMIC='1' # 启用KMS原子模式
export QT_QPA_EGLFS_KMS_CONFIG='/usr/share/qt5/cursor.json' # 光标配置文件
export QT_QPA_PLATFORM='eglfs' # 指定Qt使用EGLFS平台
```
- **EGLFS**:Qt的嵌入式全屏渲染后端,适用于无X11/Wayland的嵌入式系统
- **KMS原子模式**:提高显示驱动程序稳定性(需内核DRM驱动支持)
---
### 四、文件系统操作
```bash
mount /dev/mmcblk2p2 /boot # 挂载存储卡的第二分区到/boot目录
```
- **目的**:可能用于访问启动配置文件或内核镜像
---
### 五、启动应用程序
```bash
/usr/bin/mxapp2 -platform eglfs & # 后台启动Qt应用程序并指定渲染平台
```
- `mxapp2`:编译好的Qt可执行文件(推测是HMI主程序)
- `-platform eglfs`:显式指定使用EGLFS渲染
---
### 六、备选方案(已注释)
```bash
#export QT_QPA_PLATFORM='linuxfb'
#/usr/bin/mxapp2 -platform linuxfb &
```
- **LinuxFB**:Qt的帧缓冲后端(性能较差但兼容性更广)
---
### 整体作用总结
1. **硬件初始化**:通过GPIO控制外设电源/复位
2. **显示系统配置**:优化Qt在嵌入式Linux的图形渲染
3. **挂载必要存储**:确保系统文件可访问
4. **启动HMI程序**:运行基于Qt的图形界面应用程序
---
### 潜在问题排查点
1. GPIO编号是否正确(需查阅具体硬件手册)
2. `/dev/mmcblk2p2`分区是否存在
3. Qt配置文件的路径有效性(如`cursor.json`)
4. 图形驱动是否支持KMS原子模式
阅读全文
相关推荐















