
座舱虚拟化QNX Hypervisor2.2用户指南与实践
文章平均质量分 72
本系列基于Qcom8155+QNX架构方案。
优惠券已抵扣
余额抵扣
还需支付
¥99.90
¥299.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
高桐@BILL
校园到职场,做过室内设计;WEB前后端,APP,嵌入式,LinuxAndroid,ChromiumOS,YunOS,智舱OS等开发。
行业遍及互联网,手机,IOT,汽车。
合作品牌如华为,中兴,OV,小米,三星,谷歌,联想,诺基亚,魅族,上汽,大众,腾讯,百度,网易,LG、HTC,沃达丰,AT&T,中移动,中国电信。
职业规划为操作系统方向,涉及不同框架、方案架构设计开发,可维可测,全维度的工程化;
目前主要涉及Android产品从App、FWK、HAL、Kernel、QNX全链路的垂直工程化,以及跨域产/研/测/项目/互联网产品的横向工程化;
展开
-
[QNX 自适应分区用户指南] 目录(完结)
目录原创 2022-08-15 23:04:13 · 1804 阅读 · 0 评论 -
【QNX Hypervisor 2.2用户手册】目录(完结)
为什么要翻译QNX Hypervisor 2.2用户手册手册?首先Q+x是目前SOC或座舱系统主流的方案。QNX是目前使用最广而且最稳定的方案之一,毕竟车厂和广大的用户的眼睛是雪亮的,况且QNX在车联网的市场份额非常惊人。了解QNX可以帮助系统地提高开发效率,减少无效case引起的开发成本。...原创 2022-07-19 23:04:51 · 5201 阅读 · 0 评论 -
[QNX Hypervisor 2.2用户手册]12.2 术语(二)
下面是在贯穿整个Hypervisor文档中的术语。翻译 2022-06-25 16:42:24 · 942 阅读 · 0 评论 -
[QNX Hypervisor 2.2用户手册]12.1 术语(一)
下面是在贯穿整个Hypervisor文档中的术语。翻译 2022-06-24 22:33:04 · 904 阅读 · 0 评论 -
[实践篇]13.32 QNX下,C++编程未捕获异常导致的CPU异常高占用
所以说,QNX上c++的异常处理并不是C++标准所定义的,这部分也得到了QNX官方的确认。那么当我们在QNX(sdp7.1)上使用C++编写程序时要注意所调用函数是否为抛出异常,如果会就要catch这些异常。线程2在抛出一个未捕获的异常之后,并没有如预期那样的导致进程coredump并退出,而是在进程中其他线程正常运行的情况下,抛出异常的线程异常占用cpu,导致cpu跑飞。排除死等或递归等错误用法的情况,还有可能是是在QNX侧调用C++系统API的时候,没有在子线程中捕获异常所导致。原创 2025-01-31 10:19:24 · 279 阅读 · 0 评论 -
[实践篇]13.31 QNX下的系统性能监控工具 - sysMonAppQNX(三)
以默认设置 (1000ms 的采样间隔,1 次循环) 获取 ADSP 处理器的性能分析统计数据。- 以 500ms 的采样间隔运行 3 次循环,并汇总结果,获取 ADSP 处理器的性能分析统计数据。命令用于显示目标处理器的进程描述符 (Process Descriptor, PD) 的统计信息。用于控制 ETM 跟踪 (Event Trace Monitoring) 和输出相关信息。命令用于获取目标 Q6 处理器的性能分析统计数据。此命令将显示所选处理器的架构版本信息。原创 2024-07-19 07:15:06 · 287 阅读 · 0 评论 -
[实践篇]13.30 QNX下的系统性能监控工具 - sysMonAppQNX(二)
将 ADSP 的核心时钟设置为 200 MHz,总线时钟设置为 100 MHz。 (默认: 0) - 设置 HCP 总线时钟频率 (可选) (默认: 0) - 设置 DMA 总线时钟频率 (可选)调用会等待用户输入解锁。测试结束后等待返回的时间 (单位: 毫秒) (默认: 0) (默认: 0) - 设置核心时钟频率。 (默认: 0) - 设置总线时钟频率。运行测试的时间 (单位: 秒) (默认: 60 秒)原创 2024-07-17 22:56:18 · 428 阅读 · 0 评论 -
[实践篇]13.29 QNX下的系统性能监控工具 - sysMonAppQNX(一)
sysMonAppQNX,即System Monitor Application for QNX;它是有QNX开发的系统监控应用程序。它用于监控 QNX 系统的性能和健康状况。sysMonAppQNX 可以监视各种指标,包括 CPU 使用率、内存使用率、磁盘 I/O、网络流量和进程活动。它还可以生成警报以指示潜在问题。原创 2024-07-17 22:38:19 · 1208 阅读 · 0 评论 -
[实践篇]13.29 再来聊下Pass Through设备透传
PassThrough(也称为设备直通或设备透传)是设备直接分配技术的一种具体实现。它允许宿主机中的物理设备(如PCI/PCIe设备)被直接分配给虚拟机,是虚拟机能够像物理设备一样直接使用这些设备。某些直通设备,特别是需要进行大量数据传输的设备(如WIFI,处处设备等)。这些设备通常支持DMA操作,能够独立完成内存与设备之间的数据传输。原创 2024-06-22 23:09:47 · 359 阅读 · 0 评论 -
Linux内存从0到1学习笔记(8.17 SMMU Fault调试方法)
通过前面的介绍,我们知道了SMMU实际上是一个针对外设的MMU。它作为一个硬件IP被设备执行DMA操作时使用。再来简单回顾下SMMU的工作流程:外设 ---> DMA操作 ---> SMMU ---> Memory也就是说,通常情况下驱动程序会先分配DMA Buffer ---> 然后执行SMMU映射,并得到IOVA ---> 驱动在设置IOVA到设备(也就是告诉设备Buffer的位置) ---> 设备驱动开始执行DMA操作 ---> 设备通过SMMU访问分配的DMA Buffer。原创 2024-06-22 08:11:03 · 2327 阅读 · 0 评论 -
4.2 【共享源】克隆详解
克隆是指通过共享缓冲区来复制内容(例如,两个窗口共享相同的内容)。你可以在多个显示器上显示内容,但只需要更新一个缓冲区。视频播放就是一个很好的例子。你可以解码一次,但在多个显示器上播放。例如,假设有一个完全透明的窗口,除了需要有一个在一角进行混合的水印。如果去混合整个窗口,那么成本会很高,可以通过将此窗口的透明度设置为SCREEN_TRANSPARENCY_DISCARD来完全避免。然而,为了保持水印可见,我们可以创建另一个窗口,与透明窗口共享其缓冲区。原创 2023-12-22 07:01:57 · 908 阅读 · 0 评论 -
5.1 显示窗口的内容(一)
显示器用于在物理硬件(如计算机显示器或触摸屏显示器)上显示窗口的内容。屏幕API提供的功能允许我们创建同时写入多个窗口和显示的应用程序。屏幕支持多个显示器,但创建和管理使用多个显示器的应用程序可能会非常棘手。你需要考虑线程、性能和图形优化。显示器彼此独立,每个窗口只能与一个显示器相关联。我们可以在配置文件graphics.conf中提供要应用于平台支持的物理显示器的配置。有关更多信息,请参阅配置屏幕。原创 2023-12-26 03:00:00 · 1827 阅读 · 0 评论 -
12.5 【Screen配置】配置winmgr(三)
class子段指定了窗口属性的默认值。Windows 必须与显示器相关联。因此,只有在系统支持显示器,或者系统上有需要显示器的应用程序时,才需要在配置文件中包含此部分。此class部分必须以 begin class class_name 开头并以 end class 结尾。class子段用于设置该部分中定义的窗口属性的默认值;这些属性是通过应用于帧缓冲区和应用程序窗口的参数来指定的。原创 2024-01-06 22:13:12 · 1062 阅读 · 0 评论 -
12.4 【Screen配置】配置winmgr(二)
如果 display_id 是一个整数,Screen 会将配置参数应用于其 ID 为 display_id 指定的显示器。否则,如果 display_id 是一个与有效显示器连接类型匹配的字符串,则 Screen 会将配置参数应用于其连接类型与 display_id 指定的显示器匹配的第一个可用显示器。可以使用 display_id 将每个display部分与物理显示器相关联。display_id 可以是标识显示器的数字,也可以是显示器的连接类型。display部分的数量取决于平台支持的物理显示器的数量。原创 2024-01-06 17:37:43 · 1075 阅读 · 0 评论 -
12.3 【Screen配置】配置winmgr(一)
与显示相关的参数在该段中指定,从开始显示display_id开始,到end display结束。可以有多个display子段,每个子段对应一个平台可用和支持的物理显示器。与类相关的参数在本段中指定,从begin class class_name 开始,以end class结束。graphics.conf 配置文件必须包含一个 winmgr 部分,在其中指定global, display,和class参数。winmgr 部分被标识为由 begin winmgr 和 end winmgr 包围的配置文件部分。原创 2024-01-04 22:19:59 · 591 阅读 · 0 评论 -
12.2 【Screen配置】khronos模块配置
khronos部分的配置用于指定与Khronos相关的库和参数(例如EGL和WFD库)。在graphics.conf配置文件中,khronos部分指定GPU和显示驱动程序。只有在系统需要这两种类型的驱动程序之一或两者时,才需要在配置文件中包含此部分。khronos部分由begin khronos和end khronos括起来。与EGL显示相关的库和参数配置egl display部分,以begin egl display display_id开头,以end egl display结尾。原创 2024-01-04 22:11:47 · 1027 阅读 · 0 评论 -
12.1 【Screen配置】概括
graphics.conf 文件位于以下目录中:源码目录:$QNX_TARGET/processor/usr/lib/graphics/platform终端目录:/usr/lib/graphics/platform其中处理器是目标终端设备对应的CPU架构(例如armle-v7),平台是平台的名称(例如imx6x)。除非终端设备上的系统允许,否则需要修改源码中的 graphics.conf 文件,然后将其构建到操作系统映像文件系统中。原创 2024-01-02 21:19:46 · 658 阅读 · 0 评论 -
13 术语
Screen系列中常见的术语。原创 2024-01-02 21:04:27 · 428 阅读 · 0 评论 -
11.2 Screen调试实战(二,运行时阶段)
运行时出现的问题是比较难查的。我们可以使用一些调试工具或通过slog2info打印的日志排查问题。原创 2024-01-01 07:44:12 · 1052 阅读 · 0 评论 -
11.1 Screen调试实战(一,初始化阶段)
调试图形并不容易。由于图形涉及许多方面和组件,因此找出问题所在可能具有挑战性。该节介绍了相关调查的工具和方法。图形问题主要包含以下两类:图形堆栈未正确初始化,或者应用程序运行时发生异常。这里的大多数调试方法都需要Screen的调试模块(screen-debug.so)。调试时,我们需要确保确保可以使用此模块和其他调试工具。原创 2024-01-01 07:43:53 · 1028 阅读 · 0 评论 -
10 Screen安全策略
关于Screen安全策略的章节是为系统集成商准备的,他们负责实施和执行安全策略,以创建和维护一个可信赖的执行环境。系统集成商使用QNX Neutrino安全策略来定义规则,并赋予Screen实用程序和应用程序procmgr能力(能力),就像他们对系统中的其他进程一样。有关系统安全和一般如何将安全策略应用于进程的信息,请参阅系统安全指南。可以在启动屏幕实用程序和应用程序时应用这些策略。原创 2023-12-31 10:41:24 · 955 阅读 · 0 评论 -
9 权限与特权
权限和特权共同决定了对API对象(例如窗口和会话)的访问级别。权限和特权是两个不同的概念。权限定义了执行某些操作的能力,例如设置属性。特权是根据角色类型授予的权限集合。请注意,在创建(例如 screen_create_())或销毁(例如 screen_destroy_())对象时,不会应用权限。原创 2023-12-31 10:41:01 · 931 阅读 · 0 评论 -
8 异步通知
应用程序可以通过sigevent请求异步接收特定Screen事件。对于多线程应用程序,所有事件处理都可以通过异步通知定向到一个线程。当应用程序的所有事件处理都由一个线程执行时,更容易同步任务并确保某些任务按正确的顺序执行。在你调用screen_notify()之前,你必须调用screen_register_event()来注册screen_notify()使用的sigevent。当你不再使用异步通知时,需要禁用通知,然后移除事件注册。我们建议你在禁用使用 你要注销事件的同时,仅在禁用使用该事件的异步通知之原创 2023-12-30 01:53:37 · 971 阅读 · 0 评论 -
7 事件处理
Screen事件,包括输入和常规事件,与给定的上下文相关联,通常在主应用程序的循环中处理。Screen在服务器端管理每个上下文的事件队列。Screen为每个上下文创建事件队列,最大队列大小默认为200。此值可在graphics.conf的全局部分配置。如果有比指定的队列大小更多的事件,则此队列大小不会增长。这意味着如果应用程序在更多事件排队超过队列容量之前未得到处理,则可能会丢失事件。在应用程序调用 screen_get_event() 之前,事件会一直存在于服务器上的上下文队列中。原创 2023-12-30 01:53:13 · 1012 阅读 · 0 评论 -
6.6 会话与输入事件(三)
指针输入会话使用SCREEN_EVENT_POINTER类型创建,通常用于控制光标的形状和位置。指针会话的SCREEN_PROPERTY_MODE属性未使用。表示一组六个整数,表示x和y的线性系数、x和y的二次系数以及最小和最大速度。指定一个备用会话。可以将一个会话设置为另一个会话(通常是输入区域)的备用。通常,作为备用的会话也是无窗口的。可以设置应用程序,以便当指针处于一个区域时,它会跳转到另一个会话。例如,如果指针位于特定区域上,可以移动到另一个显示器。原创 2023-12-29 06:56:22 · 1228 阅读 · 0 评论 -
6.5 会话与输入事件(二)
键盘输入会话是用类型SCREEN_EVENT_KEYBOARD创建的,可以与可能生成这些类型输入事件的一个或多个设备相关联。当输入是从键盘设备输入文本时,使用键盘会话。不使用键盘会话的SCREEN_PROPERTY_MODE 属性。原创 2023-12-29 06:55:42 · 1069 阅读 · 0 评论 -
6.4 会话与输入事件(一)
会话是特定类型输入事件的接收者。与窗口不同,会话不产生任何图形内容,也不能放入组中。会话可以被认为是已为会话关联的窗口建立的组。输入会话(会话)允许应用程序控制谁接收哪种类型的输入事件以及如何传递这些输入事件。对于每种类型的输入事件,都有一个相应的会话类型。会话类型由Screen会话类型定义。通过调用screen_create_session_type()和要创建的会话类型来创建会话。逻辑输入事件由输入会话封装。这种输入的一个例子是在文本字段中输入文本。原创 2023-12-28 06:02:25 · 979 阅读 · 0 评论 -
6.3 窗口与输入事件
默认情况下,Windows会接收多种类型的输入事件。在大多数情况下,指针和触摸事件的大小和位置(以及源大小和源位置)决定了输入焦点的位置。也就是说,围绕指针或触摸事件的大小和位置的窗口通常是接收输入事件的窗口。原创 2023-12-28 06:01:55 · 495 阅读 · 0 评论 -
6.2 Input事件类型详解
键盘事件可以与文本输入、导航、选择或特殊键(即具有特殊功能的键,例如音量增/减键)的使用有关。原创 2023-12-27 09:47:43 · 824 阅读 · 0 评论 -
6.1 Input与Input事件分类
Screen支持完全交互式用户体验开发的一个关键方面是支持输入事件并将输入和通知传递回应用程序的功能。输入事件表示用户与应用程序的某种交互。虽然Screen支持多个事件,但并非所有事件都是输入事件。事件可以广播,但输入事件始终只发送给一个接收者(通常是具有焦点的窗口或会话)。输入事件通常(但不一定)与物理设备相关联。例如,输入事件可能来自调用 screen_inject_event(),这可能与物理设备相关联,也可能不相关联。原创 2023-12-27 09:47:02 · 533 阅读 · 0 评论 -
4.10【共享源】外部合成
Screen通过使用根窗口和流支持外部合成(即使用非Screen的合成器)。当Screen不支持所需的效果时(例如页面卷曲效果、旋转效果、显示效果等),有时需要使用外部合成器。外部合成器使客户端能够实现自己的效果。使用外部合成器并不是为了取代Screen的合成管理器组件。Screen的合成管理器负责维护最终场景的合成以供显示。外部合成器本质上是一个消费者。它消费来自多个来源(例如窗口、流或两者)的内容,并反过来将内容呈现到自己的根窗口。原创 2023-12-26 17:14:02 · 1096 阅读 · 0 评论 -
5.3 显示窗口的内容(三)
合成是将多个内容源组合在一起的过程。当你在一个显示器上有多个可见窗口时,就会发生这种情况。Screen执行合成,同时确保所有应该可见的东西都可见,所有应该被覆盖的东西都被覆盖。正如你可能想到的那样,当你考虑单独的窗口和显示器的属性数量,以及多个窗口中的每一个时,如何组合图像几乎有无限种可能。由于最终图像需要正确构建,Screen 并不一定需要单独使用一种合成选项。例如,如果产生的结果图像不准确,即使性能有所提高,也是不合理的。原创 2023-12-27 01:00:00 · 937 阅读 · 0 评论 -
5.2 显示窗口的内容(二)
只有显示管理器被允许更改显示器的几何形状。窗口管理器也是显示管理器。原创 2023-12-26 06:27:34 · 1260 阅读 · 0 评论 -
4.9【共享源】流的多生产者和消费者
本质上,一个生产者流可以与多个消费者流连接,但一个消费者流只能连接到一个生产者流。请注意,基数关系仅限于单个流,而不限于生产者或消费者应用程序。在这个例子中,Stream-p2被Stream-c1和Stream-c2连接并被它们消费。然而,因为Stream-c2已经在消费Stream-p2,它也不能再消费Stream-p1。如果消费者需要来自多个生产者的内容,那么它必须管理多个消费者流。对于本例中的消费者2,为了消费流p1和流p2,它必须创建两个单独的流,并将一个连接到流p1,一个连接到流p2。原创 2023-12-25 18:08:53 · 521 阅读 · 0 评论 -
4.8 【共享源】流的消费者
消费者从生产者那里获取内容,以进行下一步的处理。消费者从生产者那里获取内容,并对其进行某种形式的处理(例如图像处理、合成)。它最终也可以显示来自生产者的内容。通常,我们需要在消费者应用程序中执行接下来的步骤,以从生产者那里获取内容;原创 2023-12-25 14:44:40 · 801 阅读 · 0 评论 -
4.7 【共享源】流的生产者(二)
流的模式决定了Screen如何使前台缓冲区可用。生产者通过调用screen_set_stream_property_iv()并设置SCREEN_PROPERTY_MODE属性来设置模式。原创 2023-12-24 22:35:38 · 482 阅读 · 0 评论 -
4.6 【共享源】流的生产者(一)
生产者创建内容并与有权限的消费者共享。作为生产者,必须相应地设置流以供消费。通常,我们需要在生产者应用程序中执行接下来的流程来共享产生的内容。原创 2023-12-24 22:27:14 · 506 阅读 · 0 评论 -
4.5 【共享源】流详解
流是屏幕API提供的屏幕外多缓冲渲染目标。流由应用程序而不是Screen本身的使用者使用。在窗口的情况下,最常见的是消费者是Screen,因为内容的存在就是为了在显示器上显示。然而,流的内容则被其他应用程序使用。这些应用程序可以与产生流内容的应用程序分开,可以在同一进程中,也可以在不同的进程中。使用流的常见情况是显示来自摄像机(或视频)的输出,在显示之前需要对摄像机的输出进行某种形式的图像处理。生产者流的缓冲区是通过调用 screen_create_stream_buffers() 创建的。原创 2023-12-23 22:27:17 · 1063 阅读 · 0 评论 -
4.4【共享源】克隆实战开发之截屏(二)
screen_read_display() 函数则用于捕获显示器的屏幕截图。我们需要在特权上下文中工作,以便可以完全访问系统的显示属性。我们可以通过调用具有 SCREEN_DISPLAY_MANAGER_CONTEXT 上下文类型的 screen_create_context() 来创建特权上下文。您进程必须具有 root 的有效用户 ID 才能创建此上下文类型。当捕获多个显示器的屏幕截图时,我们需要为每个显示器调用一次 screen_read_display()。原创 2023-12-23 22:09:17 · 493 阅读 · 0 评论 -
4.3【共享源】克隆实战开发之截屏(一)
screen_read_window() 函数用户捕获窗口的截图。此函数调用的上下文没有限制。当捕获多个无关窗口(即不在同一层次结构中的窗口)的屏幕截图时,则必须为每个窗口调用一次 screen_read_window()。接下来我们来详细了解下screen_read_window()函数。以下过程描述了如何使用Screen捕获单个窗口的屏幕截图。我们可以将生成的屏幕截图存储在pixmap或窗口缓冲区中以进行进一步操作。此特定过程描述了在pixmap缓冲区中捕获屏幕截图,然后将屏幕截图写入位图。原创 2023-12-22 22:40:44 · 1041 阅读 · 0 评论