Python中的内存映射寄存器

时间:2012-05-14 16:47:08

标签: python device-driver

有没有人想出一个在Python下使用内存映射设备寄存器的好解决方案?理想情况下,某些东西可以让我使用命名寄存器,甚至在这些寄存器中命名位域,这种方式不完全是临时的?理想情况下是跨平台的,但我只能使用Linux。

似乎mmap和ctypes Structs的某些组合可能能够处理它,但是a)结构似乎不允许你指定位域位置(它们也不在C中,所以...)和b我无法弄清楚如何在mmap上删除Struct映射。

或者我是否从根本上询问如何使用圆锯作为螺丝刀? (即它没有那样做,为什么你想要?)

C中的示例(未经测试,不使用)将类似于:

volatile struct {
    uint32_t mfr_id;
    uint32_t prod_id;
    uint32_t ctl;
    uint32_t dummy[5];
    ...
} * pDev;
hFile = open('/dev/bridge', O_RDWR)
pDev = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, hFile, 0);
assert(pDev->mfr_id == 0x12345678);
assert(pDev->prod_id == 0xDEADBEEF);

uint32_t temp = pDev->ctl;
temp &= CTL_ACCESS_MASK | CTL_SHIFT_MASK;
temp |= CTL_ACCESS_RO | CTL_SHIFT_5;
pDev->ctl = temp;

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是在C中编写访问器函数并从Python调用它们(在ctypes和Cython之间,从Python调用C代码并不那么难)。