Python中的内存映射寄存器

Rga*_*ddi 5 python device-driver

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

似乎mmap和ctypes Structs的某些组合可能能够处理它,但是a)Structs似乎不允许你指定位域位置(它们也不是在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;
Run Code Online (Sandbox Code Playgroud)

Sha*_*ger 0

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