我在机器上安装了QNX。问题是,嵌入式系统还必须能够访问硬件,端口管理等。这是如何在QNX中实现的?在哪个方向学习?到目前为止,我发现这是文件,目录,用户,组等的组织。或者我不明白系统的工作原理
答案 0 :(得分:5)
注意:我在底部提供了代码样本的链接。
我试着用Linux and QNX
之间的区别来解释它。
QNX
是RTOS
,其kernel
可以称为Neutrino Kernel
。 Kernel
只是一个与H/W
互动的基本骨骼,它是任何operating system
的核心,但OS
由application software
和Kernel
组成在unison
中有效,以达到computer system
的目的。
Linux
本身只是一个Kernel
,GNU/Linux
是一个完整的OS
。
Linux
基于monolithic architecture
,而QNX则为Micro Kernel
。
Monolithic kernel:
所有OS service
与kernel main thread
一起运行,因此位于同一memory
。 Monolithic kernels
更容易实现,但bug
等某些部分driver
会降低整个系统的效果。
更多RANT:
QNX
是完整的microkernel
,基于realtime OS
,而Linux
是monolithic kernel
。 QNX
可以在许多Embedded platforms
上投放mini computers
,例如在satnav
或music controls
的汽车上SCADA systems
。{Jeep Cherokee),framework
。应用程序构建X11
与Wayland
或Linux
大不相同QNX GUI
。如Linux
所示,它更接近骨骼和金属。
示例:在X11
中如果您想在屏幕上绘制一个圆圈,这将经历多个抽象层,如QNX
,在networky
中,事物采取更直接的方式这使得它在小芯片上变得更快,这导致X11
使Linux
成为QNX
的大部分framework
内容失去了。{/ p>
embedded systems
有点开箱即用,支持GNU/LINUX
支持Real Time
,而timely responses
则与此相反。
accuracy of the response
方面涉及QNX
和coding
。
查看here以了解QNX
以及int index;
for (int i = 0; i < arr.length; i++) {
if (arr[i] != null) {
index = i;
break;
}
}
所需的不同部分。
ObjectUtils.firstNonNull
可以找到示例代码here。
答案 1 :(得分:2)
QNX SDP 7的文档位于http://www.qnx.com/download/group.html?programid=29184 - 您需要登录才能访问它(如果您还没有帐户,请创建一个帐户)。
必须阅读QNX Neutrino系统架构指南。
总体而言,系统启动(请参阅构建嵌入式系统)和提供系统服务的过程(编写资源管理器)将需要硬件访问。主要是你将看到有足够的权限来访问端口,连接中断处理程序,并将硬件资源映射到程序的地址空间,然后创建初始化例程,中断处理程序(QNX Neutrino RTOS程序员指南)和各种形式的事件响应者在中断处理程序解除阻塞时在资源管理器进程内的线程中操作。 QNX Neutrino Cookbook提供了一些例子。在库引用中以及搜索示例时,查找mmap * in * out * shm *等函数。
但是,首先要学习并真正学习系统架构,在不了解架构和相关术语的情况下,很难找到绕过其余文档的方法并理解它。
玩得开心!