我有一块板上装有 APM86290(ppc) SOC 的电路板。这是我第一次尝试这种类型的开发,我正在尝试使用使用 36 位地址映射的 SPI 控制器(根据数据表)。我想使用mmap()
and读取一些寄存器/dev/mem
。通常是否有统一的方法来解决那些高四位?或者这可能是这个处理器/编译器特有的东西?这就是我现在尝试做的方式。
#define OFFSET 0xfa0000000
int main()
{
int i;
unsigned int * someRegister;
int fd = open("/dev/mem",O_RDWR|O_SYNC);
if(fd < 0)
{
printf("Can't open /dev/mem\n");
return 1;
}
someRegister = (unsigned int *) mmap(0, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED, fd, OFFSET);
if(someRegister <= NULL)
{
printf("Can't mmap\n");
return 1;
}
else
{
printf("register=%x\n",OFFSET);
printf("contents=%x\n",*someRegister);
}
return 0;
}
上述程序的输出返回这些错误
内核模式下的机器检查。
指令读取 PLB 错误
PLB 主端口请求错误
PLB 读取错误 0x11000000 在 0x00000000_00000000
我想也许它没有使用 36 位地址并截断一些东西,但是当我做cat /proc/iomem
effff8000-effffffff : ocm_mem
fa0000000-fa000001f : serial
其中显示了我期望的 36 位值。