python - Python 中的内存映射寄存器

标签 python device-driver

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

似乎 mmap 和 ctypes Structs 的某种组合可能能够处理它,但是 a) Structs 似乎不允许您指定位域位置(在 C 中也不允许,所以...),以及 b ) 我不知道如何将结构映射放在 mmap 之上。

或者我是在问如何将圆锯用作 Screwdriver ? (即它不会那样做,你到底为什么要这么做?)

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;

最佳答案

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

关于python - Python 中的内存映射寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10587639/

相关文章:

python - 为什么我不能在条件表达式中放入切片,我该怎么办?

c++ - 测量由我的程序引起的设备驱动程序 CPU/IO 利用率

c - 删除硬件id对应的oem.inf文件

python pptx 将图像对齐到幻灯片中心

Python 线程和 GIL

python - 有没有更pythonic的方法来找到列表中最接近另一点的点?

python - 在for循环中递归运行for循环(python)

Linux 如何与 PCI 驱动程序通信

c - 为微 Controller 编写设备驱动程序,在哪里定义 IO 端口引脚?

linux - 2个进程和2个线程在设备文件(节点文件)的使用上下文中的区别