当前位置: 首页 > article >正文

qt移植到讯为rk3568,包含一些错误总结

qt移植到arm报错动态库找不到

error while loading shared libraries: libAlterManager.so.1: cannot open shared object file: No such file or directory
 

        通过设置环境变量 LD_LIBRARY_PATH就行了。

    LD_LIBRARY_PATH是一个用于指定动态链接器在运行时搜索共享库的路径的环境变量

例如:
前提:所有用到的文件包括库文件都在你程序目录下。
①在你程序目录下创建一个脚本文件test.sh
②编辑test.sh

export ARM_DIR=`pwd`
export APP_DIR=`pwd`
export LD_LIBRARY_PATH=$ARM_DIR/lib#lib是你的程序文件夹里面的库文件夹,名字根据自己的修改
$APP_DIR/exe(exe:你的arm程序)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在讯为给的资料中,一个是 etc/profile配置文件中,配置了

讯为提供的内核镜像 /etc/profile原版

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

if [ "$PS1" ]; then
        if [ "`id -u`" -eq 0 ]; then
                export PS1='[\u@\h:\w]# '
        else
                export PS1='[\u@\h:\w]$ '
        fi
fi

export PAGER='/bin/more '
export EDITOR='/bin/vi'

# Source configuration files from /etc/profile.d
for i in /etc/profile.d/*.sh ; do
        if [ -r "$i" ]; then
                . $i
        fi
        unset i
done
export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:
export LS_COLORS
resize

/*添加下面两种不同的 /etc/profile内容时,屏幕界面不正常显示,出来个格子界面,Mobaxter的串口通信界面显示堆栈错误*/

经过逐行排查 ,是倒数第三行的问题

# 设置Qt平台为linuxfb,并指定帧缓冲设备为/dev/fb0
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0

可以

  1. 指定正确的图形平台
    如果您的系统使用的是 X11,您应该设置 QT_QPA_PLATFORM 为 xcb

    export QT_QPA_PLATFORM=xcb

    如果您的系统使用的是 Wayland,则应该设置为 wayland

    export QT_QPA_PLATFORM=wayland

    请根据您的系统配置选择正确的平台。

Wayland是显示服务器与客户端通信的协议库。Weston是Wayland的参考实现,提供完整环境及测试程序。

   2. 杠掉,会自动用默认的

# 设置核心转储文件大小为0,并将标准输出和标准错误重定向到/dev/null,即丢弃所有输出
ulimit -S -c 0 > /dev/null 2>&1

# 获取当前用户的用户名,并将其存储在USER变量中
USER="`id -un`"

# 将LOGNAME变量设置为与USER变量相同的值
LOGNAME=$USER

# 设置PS1环境变量,定义命令行提示符的格式
# 这里的格式是:[用户名@主机名]:当前工作目录#
PS1='[$USER@$HOSTNAME]:$PWD# '

# 将PATH环境变量设置为其当前值(这里实际上是多余的,因为后面没有改变PATH的值)
PATH=$PATH

# 获取主机名,并将其存储在HOSTNAME变量中
HOSTNAME=`/bin/hostname`

# 导出USER, LOGNAME, PS1, PATH, HOSTNAME变量,使它们在当前shell会话及其子进程中可用
export USER LOGNAME PS1 PATH HOSTNAME

# 从/proc/bus/input/devices文件中查找包含'ft5x06'或'goodix-gt911'的行及其后4行
# 然后从这些行中提取第95个字符之前的字符串(实际上是取倒数第5到第10个字符,因为tail -n1取的是最后一行)
# 最后,使用cut命令从第13到第18个字符之间提取事件设备名称,存储在EVENT变量中
EVENT=$(cat /proc/bus/input/devices | grep -E 'ft5x06|goodix-gt911' -A4 | tail -n1 | head -c 95 | cut -c13-18)

# 设置tslib的根目录环境变量
export TSLIB_ROOT=/qt/opt/tslib1.4

# 设置Qt的根目录环境变量
export QT_ROOT=/qt/opt/qt5.15.2

# 设置触摸屏输入设备的环境变量,使用之前从/proc/bus/input/devices中提取的EVENT变量
export TSLIB_TSDEVICE=/dev/input/$EVENT

# 设置触摸屏事件类型的环境变量
export TSLIB_TSEVENTTYPE=input

# 设置tslib配置文件的环境变量
export TSLIB_CONFFILE=/qt/opt/tslib1.4/etc/ts.conf

# 设置tslib插件目录的环境变量
export TSLIB_PLUGINDIR=/qt/opt/tslib1.4/lib/ts

# 设置控制台设备为none,表示不使用控制台设备
export TSLIB_CONSOLEDEVICE=none

# 设置帧缓冲设备为/dev/fb0
export TSLIB_FBDEVICE=/dev/fb0

# 设置LD_PRELOAD环境变量,预加载tslib的库文件
export LD_PRELOAD=$TSLIB_ROOT/lib/libts.so

# 设置Qt的鼠标协议为tslib,并使用之前提取的EVENT变量指定输入设备
export QWS_MOUSE_PROTO=tslib:/dev/input/$EVENT

# 设置LD_LIBRARY_PATH环境变量,包含多个库目录,确保运行时能找到所需的库文件
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/

# 设置Qt平台插件目录的环境变量
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins

# 设置Qt平台为linuxfb,并指定帧缓冲设备为/dev/fb0
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0

# 设置Qt字体目录的环境变量
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts

# 设置Qt使用的通用插件为tslib
export QT_QPA_GENERIC_PLUGINS=tslib

export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM

#放入的tslib目录
export TS_ROOT=/usr/local/tslib    
export LD_LIBRARY_PATH=$TS_ROOT/lib:$LD_LIBRARY_PATH
export PATH=$TS_ROOT/bin:$PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=$TS_ROOT/etc/pointercal
export TSLIB_CONFFILE=$TS_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TS_ROOT/lib/ts
# qt
# 放入的qt目录
export QT_ROOT=/usr/local/qt   
export LD_LIBRARY_PATH=$QT_ROOT/lib/:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0:inverty
export QT_QPA_FB_TSLIB=1
export LD_PRELOAD=$TS_ROOT/lib/libts.so
 

报错

[root@topeet:/qt/opt]# ./tslib1.4/bin/ts_calibrate
fopen: No such file or directory
Couldnt load module linear
ts_config: No such file or directory
ts_setup: No such file or directory
 

解决

        将 ts.conf中的module linear那行直接注释掉即可

设置横屏

查看显示屏名称

        使用 ls /sys/class/drm/ 命令查看显示屏名称,如下图所示,

         可知我这里用的是DSI屏,DSI-1就是屏幕的名称。另外还有HDMI屏等。

修改weston.ini配置文件

        编辑 /etc/xdg/weston/weston.ini文件,在文件末尾增加以下语句,随后保存重启即可。

[output]  
name=HDMI-A-1  //设备名称
transform=90   //旋转角度为90度

我这里设置以后,重启,屏幕卡在kernel界面进不了桌面

参考文档,使用

echo "output:all:rotate90" > /tmp/.weston_drm.conf # 所有屏幕旋转90度

 解决。

        至于原因,参考设备树设置。官方文档或者其他博客都有介绍。

buildroot添加桌面应用

        添加桌面应用需要准备三个文件:

        桌面图标文件、xxx.desktop文件、可执行应用文件

矢量图 

        阿里巴巴矢量图网站进行下载,图标的尺寸为128x128

        https://www.iconfont.cn/

xx.desktop文件

[Desktop Entry]
Name=Touch                          # 应用名称
Exec=/usr/bin/Touch                 # 执行命令
Icon=/usr/share/icon/ico_touch.png  # 图标路径
Type=Application                    # 类型:应用程序



//我用的是
[Desktop Entry]
Name=Usart                         # 应用名称
Exec=/qt/opt/untitled2                 # 执行命令
Icon=/usr/share/icon/sdw.png  # 图标路径
Type=Application                    # 类型:应用程序

可执行应用文件

        交叉编译得到的 qt可执行程序。

开发板上的准备

        图标文件放到 /usr/share/icon

        应用程序 随便放,可以是 /usr/bin

        配置文件 .desktop放到 /usr/share/applications

然后重启开发板,就可以看到效果

可执行程序开机自启动

1. 使用init.d脚本

        对于使用Linux系统的RK3568开发板,可以通过在/etc/init.d/目录下添加一个自启动脚本,并设置其权限和启动顺序来实现开机自启动。

步骤:

        创建脚本:在/etc/init.d/目录下创建一个新的脚本文件,例如mystartup.sh。

        编辑脚本:在脚本文件中添加启动你的可执行程序的命令。例如:

#!/bin/sh                # 使用sh解释器执行此脚本
/usr/bin/myexecutable &  # 在后台启动myexecutable程序

        确保将/usr/bin/myexecutable替换为你的可执行程序的实际路径。

        重新加载systemd配置:使用systemctl daemon-reload命令重新加载systemd配置。

        启用服务:使用systemctl enable mystartup.service命令启用服务,使其在开机时自动启动。

2. 修改rcS文件(针对Buildroot系统)

        如果你的RK3568开发板使用的是Buildroot构建的系统,并且根文件系统是基于BusyBox的,你可以直接在/etc/init.d/rcS文件中添加启动命令。

步骤:

        编辑rcS文件:使用文本编辑器打开/etc/init.d/rcS文件。

        添加启动命令:在文件的末尾或其他合适的位置添加启动你的可执行程序的命令。例如

/usr/bin/myexecutable &


http://www.kler.cn/a/399367.html

相关文章:

  • 6.584-Lab1:MapReduce
  • 【windows】05-windows系统级深度隐藏文件方法
  • Minikube 上安装 Argo Workflow
  • aws中AcmClient.describeCertificate返回值中没有ResourceRecord
  • 单片机学习笔记 1. 点亮一个LED灯
  • SpringBoot配置相关的内容
  • 2024 - 超火的多模态深度学习公共数据纯生信5+思路分享
  • 卡牌对弈游戏策略-贪心算法
  • 基于Python的仓库管理系统设计与实现
  • Element-ui Select选择器自定义搜索方法
  • 游戏如何应对内存修改
  • 优惠券秒杀的背后原理
  • 贪心算法入门(三)
  • outline 分析
  • 深入探讨 .NET Core 3.0 浮点计算差异与解决方案
  • ollama+springboot ai+vue+elementUI整合
  • matlab 读取csv
  • 【C++ 算法进阶】算法提升十六
  • python语言基础-5 进阶语法-5.2 装饰器-5.2.2 简单装饰器
  • 2024年9月青少年软件编程(C语言/C++)等级考试试卷(六级)
  • JavaWeb后端开发知识储备1
  • 【HarmonyOS】鸿蒙系统在租房项目中的项目实战(一)
  • 从0开始深度学习(30)——语言模型和数据集
  • Comfy UI Manager 自定义节点管理
  • 基于卷积神经网络的航空发动机剩余寿命预测Matlab实现
  • [每周一更]-(第123期):模拟面试|消息队列面试思路解析