static void IPC_ServerThread(void* pArgs) { RPMessage_waitForLinuxReady(SystemP_WAIT_FOREVER); IPC_Socket serverSocket; // my internal structure, shouldn't be relevant while (!IPC_CreateSocket(&serverSocket, 1, 123, ID_A53_0)) vTaskDelay(10); ... } bool IPC_CreateSocket(IPC_Socket* socket, uint16_t localEndpt, uint16_t remoteEndpt, uint16_t remoteCoreId) { RPMessage_CreateParams createParams; RPMessage_CreateParams_init(&createParams); createParams.localEndPt = localEndpt; RPMessage_construct(&socket->rpm_obj, &createParams); socket->packetCounter = 0xffff; socket->localEndpt = localEndpt; socket->remoteEndpt = remoteEndpt; socket->remoteCoreId = remoteCoreId; if (remoteCoreId == ID_A53_0) { // announcement only necessary for Linux cores char* serviceName = "rpmsg_chrdev"; if (RPMessage_announce(remoteCoreId, localEndpt, serviceName) != SystemP_SUCCESS) { return false; // debugger shows that this does NOT happen } } ... // we actually arrive here return true; }