18、高通8155座舱平台--QNX与Android通信 18.1 为什么需要通信?先想一个问题。你在Android上点了个“导航”,这个指令要传给QNX去控制仪表盘显示。或者QNX检测到车门没关好,要通知Android弹个警告。这中间要是没有一套可靠的通信机制,整个座舱就乱套了。我见过一些方案,直接用串口或者GPIO来传,那效率低得可怜。8155上,我们用的是更高级的手段。嗯,这里要注意,选哪种方式,取决于你的数据量大小和实时性要求。18.2 rpmsg:轻量级消息通道rpmsg,全称Remote Processor Messaging。它是基于virtio的一种简化实现。我个人习惯把它理解成“两个CPU之间的管道”。在8155上,QNX跑在A核(应用处理器),Android其实也跑在A核,但通过虚拟化技术隔离了。rpmsg就是它们之间的一条专用通道。核心特点:轻量级,开销小基于消息传递,不是流式数据有固定的通道(channel)概念我曾经在一个项目中,用rpmsg传一些控制指令,比如“切换驾驶模式”。数据量很小,就几个字节,但要求实时性高。rpmsg正好合适。代码示例(QNX侧,创建rpmsg端点):#include rpmsg.h // 创建rpmsg设备 rpmsg_device *rdev = rpmsg_create_device("virtio0", 0); if (!rdev) { // 处理错误 } // 创建端点,绑定回调 rpmsg_endpoint *ept = rpmsg_create_ept(rdev, "my_channel", 0, RPMSG_ADDR_ANY, my_callback, NULL); if (!ept) { // 处理错误 } // 发送消息 const char *msg = "switch_to_sport_mode";