工具与软件:
在 A72和 R5之间的 IPC 通信期间、会出现消息错误 [CIpcDevice.cpp:59] CIpcDevice::Write() failed。
日志记录后发现、当物理地址为0时会发生错误。
我已记录相关部件(第26行)
int16_t Virtio_getAvailBuf(Virtio_Handle vq, void **buf, int32_t *len)
{
uint16_t head;
int16_t retVal;
/* There's nothing available? */
if (vq->last_avail_idx == vq->vring.avail->idx)
{
/* We need to know about added buffers */
vq->vring.used->flags &= (uint16_t)~VRING_USED_F_NO_NOTIFY;
retVal = -1;
}
else
{
/*
* Grab the next descriptor number they're advertising, and increment
* the index we've seen.
*/
#ifdef QNX_OS
/* Only get avail array entries after they have been exposed. */
asm(" DMB SY");
#endif
head = vq->vring.avail->ring[vq->last_avail_idx % vq->vring.num];
printf("last_avail_idx:%d / vq->vring.num:%d / head:%d\n",
vq->vring.avail->ring[vq->last_avail_idx],vq->vring.num,head);
vq->last_avail_idx++;
*buf = mapPAtoVA(vq->vring.desc[head].addr);
// printf("Physical address: %p\n", (void*)vq->vring.desc[head].addr);
// printf("Virtual address: %p\n", *buf);
*len = (int32_t)vq->vring.desc[head].len;
retVal = (int16_t)head;
}
return (retVal);
}
当写入错误 last_avail_idx 在128到255范围内时、似乎会发生写入错误。 但是、当 last_avail_idx 从255复位为0时、不会发生错误。


我很好奇、为什么它只能在高达127时才能正常工作、以及为什么在255后计数重置为0并且不会进一步递增。
您能否为我介绍需要检查哪些部件才能修复此错误?
您能否为我介绍一下为什么会出现此错误、以及需要修改哪些器件才能修复此错误?
谢谢你
