问题标签 [qnx-neutrino]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qnx - 如何在 QNX 下运行一个简单的“hello world”程序?
背景:我有 QNX 许可证密钥,并已将QNX 网站上的VMWare 目标映像安装到 VMWare 中。我将 QNX 目标 RTOS 作为 VM 运行,并且我的主机具有可以识别 QNX 目标操作系统的 QNX momentics IDE。
问题:我拥有最新 QNX SDP 7 的许可证,而我在 QNX 网站上可以找到的唯一兼容 VMWare 的映像是较旧的 QNX 6.5(?)。一个简单的“hello world”程序(Momentics IDE 附带的演示程序)将无法在 QNX 目标操作系统上运行,因为它缺少某些库。
我需要:
- 获取在 VMWare 上启动最新版本 QNX RTOS 的方法。我搜索和搜索都是徒劳的,但没有描述这个过程。QNX SDP 应该有一种方法可以为 VMWare 创建可引导的 QNX RTOS,但该过程未在任何地方列出(我已经搜索了好几天了!)
或者
- 找到一种将 Momentics IDE 7.0 与我拥有的旧版 QNX RTOS 一起使用的方法。
问题:
- 如何使用 QNX SDP 7.0 创建可启动的 QNX RTOS ISO 并将其加载到 VMWare 中?
- 让使用 QNX Momentics 7.0 创建的简单 C/C++ 程序在我拥有的旧版 QNX RTOS 上运行?
附录
这些是他们提供的有关如何获取最新 QNX RTOS VMWare 映像的说明。他们说:
我们提供与 VMware Workstation Pro 12.0 或更高版本、VMware Workstation Player 12.0 或更高版本以及 VMware Fusion Pro 8.0 或更高版本兼容的 VMware 映像。此图像是一个最小的 QNX Neutrino 系统。您可以从 QNX 软件中心下载 VMware 映像,方法是选择可用选项卡,展开参考映像列表,展开工具列表,然后选择适当的虚拟机。
但是,软件中心没有“参考图像”或“工具”或“可用选项卡”或类似的东西(参见图像)。
usb - 如何使用 usbdi 回调获取设备路径和挂载路径?
我正在实施一项服务,该服务将使用 usbdi 回调函数检测 usb 插件/删除。回调函数有一个参数“usbd_device_instance_t * usbInstance”,我可以从中获取设备供应商 ID、产品 ID 和设备类信息。但是,如果是大容量存储设备,我如何获得挂载点,如果是 HID 设备,我如何获得设备路径?
cross-compiling - 在为 QNX 交叉编译 NTP 时,如何从 autoconf 硬编码/更改测试结果?
我正在尝试从 i686-pc-linux-gnu 为 armv7-unknown-nto-qnx 交叉编译 NTP。
到目前为止,我已经建立了以下命令:
这似乎让我大部分时间都在那里。但是,编译器最终会抛出../../../sntp/libevent/signal.c:255:17: error: 'SA_RESTART' undeclared (first use in this function)
. 在这个和所有其他 SA_RESTART 实例中,配置定义的常量 HAVE_SIGACTION ifdef 会排除问题代码。查看 config.log,我发现了这个:
我认为这是一个误报。
我正在寻找一种通过进一步指定我的环境来纠正 ./configure 测试的方法,或者一种指定测试结果的方法。
我知道我可以在自动测试后修改 config.h,但这不是我的应用程序的有效解决方案。
c++ - C++/libscreen 无法更新可见性
我正在按照文档教程,使用屏幕窗口系统为带有 QNX CAR 2.0 的 Neutrino 6.5.0 编写 C++ (qcc) 的 GUI。没有生成可见的输出,并且/dev/screen/{pid}/win-{n}/win-{n}
具有status = WIN_STATUS_INVISIBLE
.
(使用{n}
和{pid}
表示运行时/动态变量值的替换)
我已经尝试按照教程进行操作,但结果相同。特别是window_group_name
(mainwindowgroup
或veryuniquewgn
) 的值没有区别;前者是本教程建议的值,后者是我自己的值。
我已经构建了一个 MCVE:
由于使用了screen_err()
定义,没有输出(除了printf
pid 的第一个输出)表明screen_...()
调用没有错误。这正是我运行它时所看到的。
在 中/dev/screen/{pid}
,我看到了一个ctx-{n}/ctx-{n}
和一个win-{n}/win-{n}
文件,正如预期的那样。前者不是人类可读的,但后者,以及它与工作 nto 6.5.0 + CAR 2.0 + libscreen 应用程序中的对应物的差异,产生了一些见解。
工作应用程序是一个 HMI,我没有它的源代码,并/etc/ro
以 root 身份启动,而我的应用程序是从 ksh 启动的,以 root 身份登录。
它们都是 98 行文件,所以我制作了一个差异 -win-{n}
左侧是工作应用程序,右侧是我的 - 不包括指标:(垂直比较超过 39 个字符的行)
在这些差异usage
中,只有一个具有我期望的值,考虑到它反映了相关调用的参数screen_set_window_property_iv(...)
。对于所有其他人,尤其是regions
和flags
,我不明白为什么它们的值与工作应用程序的值不同。
目标显示器的原始分辨率为 800x480。
c++ - 从 2 个不同的线程锁定时 Pthread_mutex_lock 崩溃
我在一个项目中使用 Pthread 和 Pthread_mutex。我有使用 SIGEV_THREAD() 定期创建线程的计时器。在我的代码中,我有一个定时器每 5 秒触发一个线程,另一个每 15 秒触发一次。
其中一个线程执行此代码 [Radar.cpp]
另一个执行这个[Display.cpp]
在这种情况下,指针“this”是两个不同的对象。指针 planeDB 和 planeDB 指向同一个对象。
我想创建一个互斥锁,它只允许一个函数在给定时间读取飞机数据库的内容。但是,在运行代码时,当 2 个线程尝试同时运行时出现错误。基本上,他们都试图锁定,我明白了:
在 AirplaneDB 中,互斥锁的初始化方式如下:
有任何想法吗?
更新:
该问题是由其中一个类中的指针设置不当引起的。因此试图将互斥锁锁定在地址 0。这一行应该让我找到答案:
初始化数据库正确修复了错误。
formatting - Qnx-neutrino 无法使用 fdisc 格式化我的分区,进程冻结
我正在尝试在 Windows 10 的 Oracle VM 上运行的 QNX-neutrino OS 中格式化我的 HDD 250Gb。我安装了我的 HDD,一切看起来都很好。我运行命令
并创建 4 个具有下一个大小的分区:
之后我运行命令:
当我尝试使用命令格式化创建的分区时:
这个过程开始了,永远不会结束。终端只是冻结。我能做些什么来修复它?或者还有另一种方法可以在这个系统中格式化我的分区?
c++ - ZMQ::send() 抛出异常并终止 QNX 进程。为什么以及如何从中恢复?
ZMQ::send()
抛出异常并终止进程。
为什么以及如何从中恢复。
REQ/REP
我在 QNX 版本 6.5.0 上使用 ZeroMQ模式。预期的catch{}
块不会收到此异常。
这是 gdb 跟踪:
这是我的代码片段。
multithreading - ZeroMQ:线程在 while(1) 循环中恰好在 2 小时后停止。为什么以及如何解决这个问题?
它不会崩溃,因此没有要分析的核心。它只是停止。
我实验过多次。它恰好在 2 小时后停止。
操作系统:qnx6.5.0 LIB
: ZeroMQ 和 Protobuf
我只有一个线程,它看起来像这样:
c++ - 无法使用 aarch64-unknown-nto-qnx7.0.0-g++-5.4.0 编译器为 QNX 平台交叉编译 gRPC
我正在尝试使用 QNX aarch64-unknown-nto-qnx7.0.0-g++-5.4.0 编译器交叉编译 gRPC 代码。我正在使用 toolchain.cmake 文件进行编译。
工具链.cmake:
即使我使用了 -std=c++11 (也尝试过 gnu++11),我也收到以下错误:
请帮我解决这个问题。
grpc - 无法在 QNX 上运行 greeter_client helloworld 示例项目
我已经成功地为 QNX ARM 7.0 交叉编译了代码,并且能够生成二进制文件。
我要做的第一件事是在目标上运行 helloworld 代码。所以我在 cpp 文件夹中构建了 helloworld 代码(因为我使用的是 cpp)。我在目标机器上只复制了两个文件greeter_server 和greeter_client。我能够成功使用 greeter_server 启动服务器。但是当我在另一个窗口中运行 greeter_client 时,我收到了失败消息。
这是启用 GRPC_TRACE=ALL, GRPC_VERBOSITY=DEBUG 后的日志。
请帮我知道这个问题。
我们没有 DNS 服务器,我尝试使用 GRPC_DNS_RESOLVER=native,但没有帮助。如果有人知道在 QNX 中配置 DNS,请告诉我。