目录:
1、Qt for QNX 编译命令
2、qnx 提示 fontconfig 报错,qnx提示 libqqnx.so 文件无法加载、把 Qt 程序指定到QNX的特定 Screen 上显示
一、设置qnx环境变量
source yourQnxPath/qnxsdp-env.sh
二、编译
./configure -opensource -confirm-license -release -xplatform qnx-aarch64le-qcc -no-rpath -reduce-exports -system-sqlite -continue -no-openssl -nomake examples -nomake tests -force-debug-info -separate-debug-info -shared -prefix edit_build --recheck-all
三、打包Qt库到target,然后设置环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apps/Qt/Qt5.15.6/lib:/apps/Qt/lib
export QT_PLUGIN_PATH=/apps/Qt/Qt5.15.6/plugins
export QML2_IMPORT_PATH=/apps/Qt/Qt5.15.6/qml
四、错误解决
如果提示 QQNX_PHYSICAL_SCREEN_SIZE 没有设置,则需要设置如下环境变量:
export QQNX_PHYSICAL_SCREEN_SIZE=1920,720
如果运行报错,则开启调试信息提示:
export QT_DEBUG_PLUGINS=1
如果提示 Fontconfig error: Cannot load default config file 错误:
Step1:
# /mnt/etc/fontconfig/fonts.conf 是你的fontconfig的配置文件路径
export FONTCONFIG_FILE=/mnt/etc/fontconfig/fonts.conf
Step2:
编辑 fonts.conf 并把自己的font路径添加相对应的xml节点上
也可以这样(没有测试过):
export FONTCONFIG_PATH=/etc/fonts
如何解决 qt.qpa.plugin: Could not load the Qt platform plugin "qnx" in "" even though it was found. 报错:
Step1:
首先确认Qt环境变量是否成功设置,并且路径正确
Step2:
环境变量确认没有问题后,开启调试信息,查看 libqqnx.so 这个库是否加载成功
Step3:
如果提示加载成功,运行程序还是出现无法找到这个库文件,请使用 ldd 命令确认 libqqnx.so 库的依赖是否完整,cmd:
ldd yourPath/libqqnx.so
一般情况下是由于 libfontconfig.so.23 和 libfreetype.so 缺失导致,拷贝这两个库在可执行程序相同路径即可
除了上述情况以外:还有可能是解压过去的文件所属的用户组不对,需要修改为root用户所有
cmd: chown -R -h root:root QtPath
如何指定Qt程序到QNX特定的Screen上:
Step1:
在运行程序的相对位置创建 graphics.conf 配置文件
Step2: 设置环境变量:
export QT_QPA_QNX_DISPLAY_CONFIG=./graphics.conf
Step3: 修改配置文件内容
{
"displayOrder": [ 2, 1 ]
}
# Note: 配置文件格式必须是上述json格式,后面的数组表述候选屏幕ID
# 这个 ID 是 BSP 虚拟出来给应用层的,并不是真正意义上的screenID
# BSP 可以通过映射,将 2 3 4 screen 的内容,映射在同一个物理屏幕
# 上,也可以映射到不同的屏幕,取决于QNX的配置
编译 qtquickcontrols2 提示找不到 quick 模块:
1、首先确定使用的qmake是安装目录下的qmake,而不是qtbase源码目录下bin文件夹的qmake;
2、qnx编译后比较特殊,默认安装目录下的qmake可能无法正常工作,需要把qtbase源码目录下bin文件夹的qmake覆盖安装目录下的qmake;
3、安装目录下还需要修改 qt.conf 文件(是为了能后让qmake正确识别到路径),参考如下:
[EffectivePaths]
Prefix=..
[DevicePaths]
Prefix=..
[Paths]
Prefix=..
HostPrefix=..
Sysroot=
SysrootifyPrefix=false
TargetSpec=qnx-aarch64le-qcc
HostSpec=linux-g++
4、使用安装目录下的qmake去编译即可;
如何使用QNX SDP7.1 编译 Qt 6.5.1:
1. ubuntu 安装ninja工具:
sudo apt install ninja-build
2. 在 home 目录下创建 qnx.cmake 文件,用于指定生成 qnx 平台配置:
set(CMAKE_SYSTEM_NAME QNX)
set(arch gcc_ntoarmv7le)
set(CMAKE_C_COMPILER qcc)
set(CMAKE_C_COMPILER_TARGET ${arch})
set(CMAKE_CXX_COMPILER q++)
set(CMAKE_CXX_COMPILER_TARGET ${arch})
set(CMAKE_SYSROOT $ENV{QNX_TARGET})
# The arch variable can be set to either gcc_ntoarmv7le, gcc_ntoaarch64le or gcc_ntox86_64
# depending on your target architecture.
3. source qnx 环境变量,使能qcc q++ 编译工具;
4. qtbase 源码目录执行如下命令:
cmake -GNinja -DCMAKE_TOOLCHAIN_FILE=$HOME/qnx.cmake \
-DQT_HOST_PATH=$HOME/qt_host \
-DCMAKE_INSTALL_PREFIX=$HOME/qnx_install \
$HOME/qt
# QT_HOST_PATH = $HOME/qt_host , QT_HOST_PATH 实际上指向的是 Qt-PC 版本的安装路径
# 如:/home/zhangh/Qt/6.2.4/gcc_64 和 Qt5 安装 qt5-default 一样,Qt6 手动指定
# CMAKE_INSTALL_PREFIX=$HOME/qnx_install 指定一个 Qt 的安装路径
# $HOME/qt 为源码路径,可以使用 . 来代替
ep:
cmake . -GNinja -DCMAKE_TOOLCHAIN_FILE=$HOME/qnx.cmake -DQT_HOST_PATH=/home/zhangh/Qt/6.5.1/gcc_64 -DCMAKE_INSTALL_PREFIX=edit_build
5. 编译安装:
cmake --build . --parallel
cmake --install .
6. 编译其它模块:
/home/zhangh/Desktop/Qt6.5.1/qtbase-everywhere-src-6.5.1/edit_build/bin/qt-cmake . -DCMAKE_INSTALL_PREFIX=/home/zhangh/Desktop/Qt6.5.1/qtbase-everywhere-src-6.5.1/edit_build
五、QNX 常见调试命令
1. 通过pidin命令,查看hmi进程的线程状态,参考命令:
pidin -F "%-20I %-30N %-28h %-10J %-30B %-20j %-12F %-10f %l %26K %u %v %z %R" -v |grep 进程名
pidin命令相关参考:- pidin (qnx.com) 打印出的线程生命周期参考:- Thread life cycle (qnx.com)
2. 查看gpu load:qnx 串口执行,通过slog信息查看gpu负载:
echo gpu_perf_governor 1 > /dev/kgsl-control
echo gpu_set_log_level 4 > /dev/kgsl-control
echo gpubusystats 2000 > /dev/kgsl-control
slog2info -b KGSL -w | grep percentage
3. 抓取trace分析
echo 0 > /dev/pdbg/watchdog/trace_status
tracelogger -w -b6000 -k4096 -s8 -f /usr/nfs_share/qlog/kerneltrace-abnormal.kev
4. 主动触发获取进程core,通过pidin先获取进程pid,再执行命令:
dumper -p $pid -d /usr/nfs_share/qlog/
5. 如何查看程序运行在那个窗口?
cat /dev/screen/程序名字/win-xxx