You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Linux迁移至Green Hills Integrity RTOS:物理内存映射实现问询

Green Hills Integrity RTOS中物理内存映射至虚拟内存的实现方法

背景与需求

需将原Linux环境下的代码迁移至Green Hills Integrity实时操作系统(RTOS),核心需求为:访问PCI设备基地址寄存器(BAR)对应的物理内存,将其映射为虚拟内存后完成寄存器读写操作。

Linux下的实现代码

fd = open("/dev/mem", O_RDONLY); 
void * virt_addr = mmap(NULL, 0x20000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, physical_addr);

int32_t register_access = ((UINT8 *)virt_addr + 0x2000);

注:physical_addr为PCI基地址寄存器(BAR)的物理地址。

VxWorks下已完成的实现代码

/* lookup table idx 0 */
ret = idt_ntb_peer_mw_get_addr(&ndev->ntb, 0, &ndev->outMemAddr, &ndev->sizeMapReg);

ret = devMemCreate("/sw2NTB1Cfg", 0, (PHYS_ADDR)ndev->outMemAddr, ndev->sizeMapReg, MMU_ATTR_SUP_RW | MMU_ATTR_USR_RW |
            MMU_ATTR_VALID | MMU_ATTR_CACHE_OFF);

/* Opening device memory */
fd = devMemOpen("/sw2NTB1Cfg", O_RDWR, S_IRWXU);

/* mapping physical to virtual using mmap */
ndev->sw2Ntb1regAddr = mmap(0, 0x200000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

/* Accessing SW2 NTB device id(offset = 0x2000) using this addr */
memcpy(&data, (UINT8 *)ndev->sw2Ntb1regAddr + reg, 4);  // reg is offset

问题

如何在Green Hills Integrity RTOS中实现上述相同的物理内存映射及寄存器访问功能?

内容的提问来源于stack exchange,提问作者Rajat Dongre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:15:56